Java基础 4.18
1.对象创建的流程分析
案例
class Person {int age = 90;String name;public Person(String pName, int pNum) {name = pName;age = pNum;}
}
流程分析
- 加载Person类信息(Person.class),只会加载一次
- 在堆中分配空间(地址)
- 完成对象初始化[3.1 默认初始化 age = 0, name = null 3.2 显式初始化 age = 90, name = null 3.3 构造器的初始化 age = 20, name = 小倩]
- 在对象在堆中的地址,返回给p(p是对象名,也可以理解为是对象的引用)
2.this关键字
public class This01 {public static void main(String[] args) {Dog dog = new Dog("Tom", 10);dog.ac();}
}class Dog {String name;int age;public Dog(String dName, int dAge) {name = dName;age = dAge;}public void ac() {System.out.print("name = " + name + " age = " + age);}
}
引入
- 如果我们构造器的形参能够直接写成属性名就更好了
- 但是出现一个问题,根据变量的作用域原则 构造器的name是局部变量 不是属性 age是局部变量 不是属性
什么是this
Java虚拟机会给每个对象分配this,代表当前对象
public Dog(String name, int age) {this.name = name;this.age = age;}