不能用对象来调用构造器
javap:反编译指令——对.class文件使用,能看到编译前的源文件,常用的有javap-c(反汇编) ,-v
public static void main(String[] args) { Person01 p1 = new Person01(23, "张三"); } } class Person01 { int age; String name; public Person01(int pAge, String pName) { //构造器 age = pAge; name = pName; }
Person01(){ //无参构造器 设置默认age为18 age = 18; }
public Person01(int pAge) {
//构造器重载 age = pAge; } }
虚拟机会给每一个对象分配一个this,来表示当前对象,哪个对象调用,this就代表那个对象
(可以使用hashCode()方法来查看this的地址——由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。这一般是通过将该对象的内部地址转换成一个整数来实现的。
使用细节:
4的意思——只能在构造器中使用this来调用另一个构造器,而且必须放在构造器的第一句
第一个name是通过就近原则来访问的,而this.name明确制定了要访问的name(即类中的属性name)
小练习:
public class Constructor { public static void main(String[] args) { Person01 p1 = new Person01(23,"zhangsan"); Person01 p2 = new Person01(45,"lisi"); System.out.println("p1、p2的比较结果:"+p1.compareTo(p2)); } } class Person01 { int age; String name; public Person01(int age, String name) { this.age = age; this.name = name; } public boolean compareTo(Person01 p){ return this.name==p.name && this.age ==p.age; } }