基本定义
构造方法也叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成新对象的初始化,有以下几个特点:
- 方法名和类名相同
- 没有返回值
- 在创建对象时,系统会自动调用该类的构造器完成对对象的初始化
- 一个类可以有多个不同的构造器,即构造器重载
- 构造器是完成对象的初始化,而不是创建对象,系统调用构造器时,对象已经被创建好
- 如果程序员没有定义构造方法,系统会自动给类生成一个没有参数的构造方法,即无参构造方法。而如果程序员已经自定义了构造方法,系统就不会再自动生成无参构造方法,此时如果需要用到无参构造方法,需要程序员手动的显式定义无参构造方法
基本语法:
[修饰符] 方法名(形参列表){
方法体;
}
注:修饰符可以是默认、public、protected、private中的一种
对象创建流程详解
以以下代码为例进行说明:
public class Test {
public static void main(String[] args){
Person p = new Person("张三", 18);
}
}
class Person {
int age = 90;
String name;
public Person(String n, int a){
name = n;
age = a;
}
}
上述代码的创建流程如下:
- 首先加载 Person 类信息(Person.class),只会加载一次
- 在堆中为对象分配空间
- 完成对象初始化
- 先进行默认初始化:age = 0;name = null;
- 再进行显式初始化:age = 90;name = null;
- 构造器初始化:age = 18;name = “张三”;
- 把对象在堆中分配到的空间地址返回给变量 p
如下图所示
this理解
如下图,this指向创建的当前对象。
this使用细节
- this 关键字可以用来访问本类的属性、方法和构造器
- this 用于区分当前类的属性和局部变量
- 访问成员方法的语法:this.方法名(参数列表);
- 访问构造器语法:this(参数列表);注意只能在构造器中使用,即只能在构造器中访问另外一个构造器,而且this语句必须放在第一条语句的位置
- this 不能在类定义的外部使用,只能在类定义的方法中使用
public class Test {
public static void main(String[] args){
T t = new T();
t.f2();
}
}
class T {
int age;
public T(){
// this 关键字可以用来访问本类的构造器
// 访问构造器语法:this(参数列表)
// 只能在构造器中使用,即只能在构造器中访问另外一个构造器,
// this语句必须放在第一条语句的位置
this(18);
System.out.println("T()构造器被调用");
}
public T(int age){
// his 关键字可以用来访问本类的属性
// this 用于区分当前类的属性和局部变量:
// 1、this.age 直接访问的是类的属性
// 2、age 是先查找有没有age这个局部变量,如果没有,再查找累的属性
this.age = age;
System.out.println("T(int age)构造器被调用");
}
public void f1(){
System.out.println("f1()方法被调用");
}
public void f2(){
System.out.println("f2()方法被调用");
// 调用同类方法中的第一种方式:直接调用
f1();
// 调用同类方法中的第二种方式:用 this 关键字访问本类的方法
this.f1();
}
}