1.局部变量

package com.qfedu.a_var;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {//int i = 0;//成员变量for (int i = 0; i < 10; i++) {//局部的变量  i  只能局部使用System.out.println(i);int[] arr ={1,3,4,5,6};}//test(arr);//System.out.println(i);}public static void test(int[] arr) {System.out.println(Arrays.toString(arr));}
}

2.局部变量和成员变量的区别

区别 成员变量 局部变量
定义的位置 定义在类的大括号内 定义在方法或者代码块大括号以内
作用 描述当前的类对象的属性 用于在代码中保存数据,数值和参数的
初始值 是对应当前数据的"0"值 没有赋值不能使用
所处内存空间 类对象在堆区
作用域 谁持有类对象的地址,谁就可以使用 只能在大括号中
生存期 对象创建,出现成员变量。销毁对象,成员变脸销毁 只能在大括号中

3.jvm的垃圾回收机制

jvm是虚拟的软件,可以在任何平台上运行。

GC jvm虚拟机的垃圾回收机制

图书管理员

​ jvm的gc在一段时间内,自动检测整个内存。是否有无主内存。如果存在就回收。如果没有,就等待下一次的回收机制。

4.封装

java三大特性:封装 继承 多态

封装是java面向对象的一种思想

类的封装。方法的封装,包的封装等的

在写类的时候,之前的成员变量,什么也没有修饰。谁都可以使用这个变量。只要通过对象.属性就可以来直接操作咱们的成员变量。这样是有一定的隐患的。如果咱们向要对数据添加一定的限制和判断怎么办?

使用关键字private (私有的) 修饰

package com.qfedu.a_var;public class Person {//成员变量private String name;//姓名private int age;//年龄private char gender;//性别public Person() {}public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setGender (char gender) {this.gender = gender;}public char getGender () {return gender;}//设置了年龄public void setAge(int age) {if (age > 0 && age < 120) {this.age = age;} else {this.age = 0;}}public int getAge() {return age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", gender=" + gender +'}';}
}

总结:

​ 如果想要对类的属性进行封装的话。

​ 1.对成员变量进行私有化(包装了)

​ 2.写成员变量对应的set和get方法

注意事项:

​ 1.从今天开始,你写的类下面的所有的成员变量全部都要私有化(private)。这是一种规范。

​ 2.可以更加规范对于成员变量的操作

​ 3.可以隐藏一部分代码的操作过程

package com.qfedu.a_var;//实体类
public class Bird {//成员变量//种类private String kind;private String color;private boolean size;public Bird() {}public String getKind() {return kind;}public void setKind(String kind) {this.kind = kind;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public boolean isSize() {return size;}public void setSize(boolean size) {this.size = size;}@Overridepublic String toString() {return "Bird{" +"kind='" + kind + '\'' +", color='" + color + '\'' +", size=" + size +'}';}
}

5.this关键字

字面意思:

​ 这儿,这个

1.表示调用当前方法的类对象

​ 可以使用this调用类对象的成员变量和成员方法

​ 也可以用于操作当前类对象

2.this可以调用构造方法(考点)

​ 格式:

​ this(实际参数);

​ a.有且只能用在构造方法内。

​ b.this()在类内调用其他的构造方法。是根据传参不同决定调用哪个构造方法

​ c.不能调用本身的构造方法

​ d.this(实际参数),有且只能放在当前构造方法的第一行。

package com.qfedu.testThis;class Dog {private String name;private int age;private char gender;public Dog() {System.out.println("无参数的构造方法");}public Dog(String name) {this("狗蛋", 12, '女');//相当于在有参数的构造方法中调用了无参数构造方法this.name = name;System.out.println("带有String类型的构造方法");}public Dog(String name, int age) {this.name = name;this.age = age;System.out.println("带有String,int类型的构造方法");}public Dog(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;System.out.println("带有String,int,char类型的构造方法");}public void test() {System.out.println(this);}
}
public class Demo1 {public static void main(String[] args) {//        Dog dog = new Dog();
//        /*
//        *
//        * java中如果两个类的对象的空间地址是一样的,就证明是同一个对象
//        * */
//        dog.test();
//        System.out.println(dog);Dog dog1 = new Dog("旺财");//dog1.test();System.out.println(dog1);}
}

6.多类合作的练习题

1.人类

​ 属性:name,age,sex,cat

2.猫类

​ 属性:name age

package com.qfedu.class1;public class Person {private String name;private int age;private boolean sex;private Cat cat;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}
}
package com.qfedu.class1;public class Cat {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", age=" + age +'}';}
}
package com.qfedu.class1;public class Demo1 {public static void main(String[] args) {Person person = new Person();Cat cat = new Cat();cat.setName("rose");cat.setAge(12);person.setName("zixin");person.setAge(78);person.setCat(cat);Cat cat1 = person.getCat();System.out.println(cat1);}
}

汽车类:

​ 属性:颜色,品牌,车轮胎个数

​ 行为:飙车

修理厂:

​ 属性:店的名字,地址,练习方式

​ 行为:修车

修理厂修车的方法:

​ 方法需要一个外来数据。一个别人的车

​ c车是一个类对象。当前修车方法的参数是一个汽车类的对象

package com.qfedu.class2;/*
*
* 汽车类:​      属性:颜色,品牌名字,车轮胎个数​      行为:飙车
* */
public class Car {//成员变量private String color;private String name;private int wheelCount;public Car() {}public Car(String color, String name, int wheelCount) {this.color = color;this.name = name;this.wheelCount = wheelCount;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getWheelCount() {return wheelCount;}public void setWheelCount(int wheelCount) {this.wheelCount = wheelCount;}/*飙车方法:要求轮胎必须是4个,缺一不可*/public void race () {if (wheelCount == 4) {System.out.println("开着"+ color + name + ",在航海中路上以200km/h飙车");} else {System.out.println("去修理厂!!!");}}
}
package com.qfedu.class2;/*修理厂:​      属性:店的名字,地址,联系方式​      行为:修车*/
public class Factory {private String name;private String addr;private String tel;public Factory() {}public Factory(String name, String addr, String tel) {this.name = name;this.addr = addr;this.tel = tel;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}/** 修理厂有一个修车的方法,* 分析方法:*       方法名字:repair*       形式参数的列表:*               该方法的参数是一个有问题的车,是一个Car类的对象*        返回值类型:*               void* public void repair(Car car) {}* *//*** 修理厂类的修车方法,这个里面传入的是car对象* @param car*/public void repair (Car car) throws InterruptedException {//传入car对象的时候,轮胎的个数是否是4个?if (car.getWheelCount() < 4) {System.out.println("修理中........");Thread.sleep(10000);//睡10秒  10000mscar.setWheelCount(4);System.out.println("修理完成,请付款,2w");} else if (car.getWheelCount() == 4) {System.out.println("你脑子瓦特了吧");}}
}
package com.qfedu.class2;public class Demo1 {public static void main(String[] args) throws InterruptedException {Car car = new Car("green", "法拉利",4 );for (int i = 0; i < 10; i++) {car.race();Thread.sleep(1000);}System.out.println("轮胎跑掉一个。。。。");car.setWheelCount(3);car.race();Factory factory = new Factory();factory.setName("boge汽修");factory.setAddr("航海中路60号海为科技园12楼");factory.setTel("138后面随便");factory.repair(car);for (int i = 0; i < 20; i++) {car.race();}}
}

键盘类

​ 属性:品牌,按键的个数

​ 行为:敲代码

屏幕类

​ 属性:品牌 尺寸

​ 行为:显示bug

电脑类

​ 属性:键盘类对象,屏幕类对象

​ 行为:换键盘,换屏幕,写bug

package com.qfedu.class3;/*
*
* 属性:品牌,按键的个数​        行为:敲代码
* */
public class Keybord {private String name;private int keyCount;public Keybord() {}public Keybord(String name, int keyCount) {this.name = name;this.keyCount = keyCount;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getKeyCount() {return keyCount;}public void setKeyCount(int keyCount) {this.keyCount = keyCount;}public void coding () {System.out.println("噼里啪啦的敲代码!!!");}
}
package com.qfedu.class3;/*屏幕类​      属性:品牌  尺寸​       行为:显示bug*/
public class Screen {private String name;private double size;public Screen() {}public Screen(String name, double size) {this.name = name;this.size = size;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSize() {return size;}public void setSize(double size) {this.size = size;}public void show () {System.out.println("显示咱们无处遁形的bug");}
}
package com.qfedu.class3;/*
* 电脑类​      属性:键盘类对象,屏幕类对象​       行为:写bug
* */
public class Computer {private Keybord keybord;private Screen screen;public Computer() {}/*** 大电脑类带的两个参数,是键盘类的对象和屏幕类的对象* @param keybord* @param screen*/public Computer(Keybord keybord, Screen screen) {this.keybord = keybord;this.screen = screen;}public Keybord getKeybord() {return keybord;}public void setKeybord(Keybord keybord) {this.keybord = keybord;}public Screen getScreen() {return screen;}public void setScreen(Screen screen) {this.screen = screen;}public void writeBug() {System.out.println("使用"+ keybord.getName() + ":" + keybord.getKeyCount()+"," + screen.getName()+ ":" + screen.getSize() + "写bug");}
}
package com.qfedu.class3;public class Demo1 {public static void main(String[] args) {Keybord keybord = new Keybord("双飞燕", 87);Screen screen = new Screen("京东方", 15.6);Computer computer = new Computer(keybord, screen);computer.writeBug();//使用罗技键盘Keybord keybord1 = new Keybord("罗技", 108);computer.setKeybord(keybord1);computer.writeBug();//换个屏幕Screen screen1 = new Screen("SONY", 32.0);computer.setScreen(screen1);computer.writeBug();}
}

7.匿名对象(很好用)

语法格式:

​ 创建对象:

​ 类名 对象名字 = new 类名()

​ 赋值号左侧只是在内存的栈区定义了一个变量而已。而这个变量是引用数据类型。

​ 赋值号右侧在内存的堆区创建了类的对象。并且把当前类对象内存的空间首地址,赋值给了左侧的引用数据类型

​ 匿名对象:

​ 就是没有对象名字的对象!!

​ 语法格式:

​ new 类名()

​ 用途:

​ 1.直接调用类的成员方法

​ 2.使用匿名对象当成参数传给一个方法

package com.qfedu.niming;class Person {private String name;public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void eat() {System.out.println("民以食为天");}
}public class Demo1 {public static void main(String[] args) {//Person person = new Person();
//        Person person = new Person();
//        Person person1 = new Person();
//        person.setName("狗蛋");
//        person1.getName()//使用匿名对象new Person().eat();new Person().setName("狗蛋儿");//肉包子打狗一去不会,new 一个Person就是新的对象System.out.println(new Person().getName());//Person person = new Person();test(new Person());}public static void test(Person person) {person.eat();}
}

作业:

1.今天的代码敲上三遍以上

2.成人类下面有孩子类,孩子类下面玩具类

3.十二生肖 今天加封装

8.局部变量、成员变量、jvm垃圾回收机制 、封装、this关键字、匿名对象相关推荐

  1. JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探

    一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...

  2. JVM架构、JVM垃圾回收机制、垃圾回收算法、垃圾回收器、JMM(内存模型)

    0 JVM和Java的关系 JDK = JRE + Java开发工具(java,javac,javadoc,javap-) JRE = JVM + Java核心类库 即: JDK = JVM + Ja ...

  3. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  4. 2.JVM垃圾回收机制-什么时候回收内存

    在前面的文章中,我们介绍过JVM垃圾回收机制负责的是堆和方法区的内存. 参考:http://blog.csdn.net/u011983531/article/details/49227013 在本篇中 ...

  5. JVM垃圾回收机制(超级无敌认真好用,万字收藏篇!!!!)

    文章目录 JVM垃圾回收机制 1 判断对象是否存活的算法 1.1 引用计数器算法 1.2 可达性分析算法 2 对象的四种引用方式 2.1 强引用 2.2 软引用 2.3 弱引用 2.4 虚引用 3 垃 ...

  6. 【深入理解JVM】JVM垃圾回收机制

    最近又回头翻了翻<java编程思想>.有关垃圾回收机制的问题还没有总结过,刚好今天周六,总结一下吧. 1.垃圾回收的目的 垃圾回收的目的是查找和回收(清理)无用的对象,以便让JVM更有效的 ...

  7. JVM垃圾回收机制及算法

    JVM垃圾回收机制 在Java中,程序员是不需要像C++那样显示的去释放一个对象的内存的,而是由虚拟机自行执行.在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空 ...

  8. 【JVM】JVM垃圾回收机制GC

    文章目录 JVM垃圾回收机制 一.堆内存区域划分 1.1内存分配策略 1.2永久代(Permanent Generation) 1.3元空间(MetaSpace) 二.标记算法 2.1引用计数算法 2 ...

  9. 深入理解JVM—垃圾回收机制

    一.前言 明确垃圾收集器关注的部分:堆和方法区.着重学习如何确定哪些垃圾需要回收.垃圾回收算法以及GC触发条件. 二.如何确定哪些垃圾需要回收 1.引用计数算法 在对象中添加一个引用计数器,每当有一个 ...

  10. 4、JVM垃圾回收机制、新生代的GC、GC(Minor GC、FullGC)、GC日志、JVM参数选项、元空间(笔记)

    4.JVM垃圾回收机制 4.1.新生代的GC 4.1.1.串行GC(SerialGC) 4.1.2.并行回收GC(Parallel Scavenge) 4.1.3.并行GC(ParNew) 4.2.G ...

最新文章

  1. Loj #6287 诗歌
  2. Mybatis使用generator自动生成映射配置文件信息
  3. c语言获取五子棋盘光标位置,跪求C语言五子棋悔棋部分实现
  4. C++对象数组与对象指针的用法【C++初学面向对象编程】
  5. 论文笔记:语音情感识别(二)声谱图+CRNN
  6. String 源码探究
  7. 服务器定时备份数据库 执行文件
  8. html打砖块小游戏源代码,javascript实现打砖块小游戏(附完整源码).pdf
  9. 手机整人脚本html,vbs整人代码_手机vbs整人代码_如何让别人执行vbs代码(3)
  10. 高格VE8产品技术白皮书
  11. 小众软件(持续更新)
  12. 信息安全实验:实现一个fake-wifi
  13. THREE 使用Tween插件实现动画
  14. 解决Chrome无法访问此网站或无法显示此网页问题
  15. MySQL批量查某个库里每张表的数据量
  16. win10亮度无法调节,怎么处理
  17. 高等数学:一元函数微分学
  18. R语言第十讲 逻辑斯蒂回归
  19. Kaggle手机验证manually verified
  20. 软链接与硬链接的区别

热门文章

  1. c语言文字表达式,【原创】化学方程式配平算法的设计与实现( 非Naylon版)
  2. 《论文阅读》PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  3. 腾讯会议录制视频下载
  4. 从SNP_VCF文件提取SNV
  5. 计算机中常用的时间换算
  6. 企业微信PC版多开软件,测试win10有效
  7. 高德API实现地理逆编码
  8. IDEA 中添加@author注释(live templates)
  9. 块截断编码图像压缩技术
  10. mysql 升级mariadb_mariadb升级