内容纲要
239(重要)讲构造器/构造方法、(重要)对象创建的流程分析!!this关键字
- 构造器
- 构造器的快速入门
public class Constructor01{
public static void main(String[] args){
}
}
class Person{
String name;
int age;
//构造器
//老韩解读:
//1.构造器没有返回值,也不能写void
//2.构造器的名称和类Person一样
//3.(String pName,int pAge) 是构造器形参列表,规则和成员方法一样
public Person(String pName,int pAge){
name = pName;
age = pAge;
}
}
- 构造器的细节
- 构造器细节
课堂练习
public class ConstructorExercise{
public static void main(String[] args){
Person p1 = new Person(18,"小白");
System.out.println(p1.age + p1.name);
Person p2 = new Person();
}
}
class Person{
int age;
String name;
public Person(int pAge,String pName){
age = pAge;
name = pName;
}
public Person(){
age = 18;
}
}
(重要)对象创建的流程分析
-
加载Person类信息(Person.class),只加载一次
-
在堆中分配空间(地址)
-
完成对象初始化 [3.1 默认初始化 age = 0; name = null; ]
[ 3.2 显式初始化 age =90, name = null]
[ 3.3 构造器的初始化 age = 20, name = 小倩]
-
在对象在堆中的地址,返回给 p(p 是对象名,也叫对象的引用)
this关键字
注意上面代码:
1.在构造方法中的 name 根据作用域原则,指的是构造器中的 name。
2.也就是构造器中的 name 传入的 "大壮",age 传入的 3,赋给了构造器中的name;
3.然后 info( ) 方法中打印输出的 name 和 age 是属性的 name 和 age。 name = null;
age = 0;
- 重要的图
this.
堆中的属性在 java 虚拟机中指向的是自己的对象的地址,
注意:这3 个的 hashCode 是一样的,因为在 info( ) 方法中的 this.hashCode 是指向的是对象的地址, 也就是 newDog("大壮" , 3); 的地址它的 hashCode。构造方法中的this.hashCode 也是指向对象 newDog("大壮" , 3); 的地址。故他们3 的 hashCode 完全一致。
this关键字 注意事项 使用细节
- 3.访问成员方法的语法: this.方法名(参数列表);
- 4.访问构造器语法:this(参数列表); 注意只能在构造器中食用;必须放在首行
public T(){
this("jack",100);//固定写法,只能在构造器中使用。
//构造器中想要使用this 访问另外的构造器必须把 this(参数列表) 放置在第一条语句
}//看到下面的报错没有!!!!
- 课堂练习
- 回味一下上面那个代码 p1.compareTo(p2) 有点难懂哦