面向对象基础

对象创建内存

面向对象基础 - 图1

  • 当程序运行到第一行代码的Book时,类Book就会进入方法区。运行到b1处,就会在栈里面创建一个内存Book b1 null(此时为空值)。
  • 当程序运行到new Book()处,就会在堆内存里创建一个对象Book,并且这个对象的地址为0x1234,将地址返回给栈,作为b1的值。然后程序继续往下就是在堆内存中继续增加对象的属性及赋值等。
  • 当程序运行到Book b2 =b1时,栈线上b1的上方创建b2,然后把b1的值复制给b2。
  • 原理:实际上就是通过在栈存储的地址,找到堆内存中储存的对象,从而实现访问或修改对象。
  • 当程序运行结束时,释放栈,b2先出栈,b1最后出栈,由于堆内存中的对象的地址没有被栈内存指向(对象不存在引用),满足GC的垃圾回收,堆内存 中的对象会被回收。

面向对象基础 - 图2
面向对象基础 - 图3

构造方法

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);
}

匿名对象

面向对象基础 - 图4
像m这种只使用一次的对象,我们可以用匿名对象将其进行替换。替换后效果如下:
面向对象基础 - 图5

匿名对象存储原理

面向对象基础 - 图6

  • 如果一个对象,我们准备使用两次或以上,那么一定要给对象创建对象名。

面向对象基础 - 图7
每运行一个new Person5()就会创建一个新的对象,逻辑如下图
面向对象基础 - 图8

编程规范

面向对象基础 - 图9