构造器(constructor)
大约 3 分钟
构造器(constructor)
基本介绍
构造方法又叫构造器( constructor ),是类的一种特殊的方法,它的主要作用是 完成对新对象的初始化。它有几个特点:
构造器特点
- 方法名和类名必须相同
- 没有返回值
- 在创建对象时,系统会自动的调用该类的构造器完成对对象的初始化
- 构造器的修饰符可以默认
- 参数列表 和 成员方法一样的规则
基本语法
[修饰符] 方法名(形参列表){ 方法体; }
演示
在创建人类的对象时,就直接指定这个对象的年龄和姓名
public class Hello {
public static void main(String[] args){
Person p = new Person('yang', 27);
System.out.println(p.name + p.age);
}
}
class Person {
String name;
int age;
/**
* 1.构造器没有返回值,也不能写void
* 2.构造器的名称和类Person一样
* 3.(string pName, int pAge) 是构造器形参列表,规则和成员方法一样
* */
public Person(String pName, int pAge){
System.out.prinyln("构造器被调用~~ 完成对象的初始化")
name = pName;
age = pAge;
}
}
注意事项和使用细节
- 一个类可以定义多个不同的构造器,即构造器重载 比如: 我们可以再给 Person 类定义一个构造器,用来创建对象的时候,只指定人名不需要指定年龄
public class Hello { public static void main(String[] args){ Person p1 = new Person('yang', 27); /** 第一个构造器*/ Person p2 = new Person('yang'); /** 第二个构造器*/ } } class Person { String name; int age; /** 第一个构造器*/ public Person(String pName, int pAge){ name = pName; age = pAge; } /** 第二个构造器*/ public Person(String pName){ name = pName; } }
- 构造器名和类名要相同
- 构造器没有返回值
- 构造器是完成对象的初始化,并不是创建对象
- 在创建对象时,系统自动的调用该类的构造方法
- 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造方法(也叫默认构造方法),比如 Dog (){},使用 javap 指令 反编译看看
- 反编译步骤
public class Hello{ public static void main(String[] args){ Dog dog1 = new Dog(); } } class Dog{ /** * Dog是默认构造器 * Dog(){} */ }
javac Hello.java # 先编译java文件 javap Dog.class # 反编译 class 文件 也可省略 .class 后缀 # 输出默认构造器 # class Dog { # Dog(); # }
- 一旦定义了自己的构造器,默认的构造器就覆盖了就不能再使用默认的无参构造器,除非显式的定义一下,即: Person(){}
class Dog{ public Dog(String dName){} //覆盖默认构造器 Dog(){} // 显示的定义 无参数构造器 }
演示
对象创建的流程分析(重点)
this 关键字
什么是 this
java虚拟机会给每个对象分配 this,代表当前对象
演示
public class Hello {
public static void main(String[] args){
Person p1 = new Person('yang', 27);
Person p2 = new Person('yang2', 30);
System.out.println("p1的hashCode()" + p1.hashCode());
System.out.println("p2的hashCode()" + p2.hashCode());
}
}
class Person {
String name;
int age;
public Person(String name, int age){
// this 就是指向当前对象的属性
this.name = name;
this.age = age;
System.out.println("this的hashCode()" + this.hashCode());
}
}
this 的注意事项和细节
- this 关键字可以用来访问本类的属性、方法、构造器
- this 用于区分当前类的属性和局部变量
- 访问成员方法的语法: this.方法名(参数列表);
- 访问构造器语法: this(参数列表): 注意只能在构造器中使用
- this 不能在类定义的外部使用,只能在类定义的方法中使用