面向对象基础
对象创建内存
- 当程序运行到第一行代码的Book时,类Book就会进入方法区。运行到b1处,就会在栈里面创建一个内存Book b1 null(此时为空值)。
- 当程序运行到new Book()处,就会在堆内存里创建一个对象Book,并且这个对象的地址为0x1234,将地址返回给栈,作为b1的值。然后程序继续往下就是在堆内存中继续增加对象的属性及赋值等。
- 当程序运行到Book b2 =b1时,栈线上b1的上方创建b2,然后把b1的值复制给b2。
- 原理:实际上就是通过在栈存储的地址,找到堆内存中储存的对象,从而实现访问或修改对象。
- 当程序运行结束时,释放栈,b2先出栈,b1最后出栈,由于堆内存中的对象的地址没有被栈内存指向(对象不存在引用),满足GC的垃圾回收,堆内存 中的对象会被回收。
构造方法
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(1);
Person2 p1 = new Person2();
System.out.println(2);
p1.name = “张三”;
p1.age = 18 ;
p1.say();
Person2 p2 =new Person2(“李四”,20);
p2.say();
}
}
class Person2{
//不建议程序员依赖程序自动生成的无参构造方法
//建议每创建一个对象就写一个构造方法
//构造方法的作用:用于对象初始化
//无参构造方法
Person2(){
System.out.println(“构造方法执行了”);
}
//有参构造方法
Person2(String a,int b){
name=a;
age=b;
}
String name;
int age;
void say() {
System.out.println(“自我介绍:我是”+name+”,我的年龄:”+age);
}
匿名对象
像m这种只使用一次的对象,我们可以用匿名对象将其进行替换。替换后效果如下:
匿名对象存储原理
- 如果一个对象,我们准备使用两次或以上,那么一定要给对象创建对象名。
每运行一个new Person5()就会创建一个新的对象,逻辑如下图