目录
一、利用构造方法初始化
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
public class Date {
public int year;
public int month;
public int day;
public Date(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
System.out.println("Date(int year,int month,int day)方法被调用了");
}
public void printDate(){
System.out.println(year + "/" + month + "/" + day);
}
public static void main(String[] args) {
Date date = new Date(2023,8,5);
date.printDate();
}
}
注:
- 名字与类名相同,没有返回值类型,设置为void也不行
- 一般情况下使用public修饰
- 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
- 构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间
- 构造方法可以重载
public class Date { public int year; public int month; public int day; //无参数的构造方法 public Date(){ this.year = 2023; this.month = 8; this.day = 9; } //带有三个参数的构造方法 public Date(int year,int month,int day){ this.year = year; this.month = month; this.day = day; System.out.println("Date(int year,int month,int day)方法被调用了"); } public void printDate(){ System.out.println(year + "/" + month + "/" + day); } public static void main(String[] args) { Date date = new Date(2023,8,5); date.printDate(); Date date1 = new Date(); date1.printDate(); } }
- 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的(一旦用户定义,编译器则不再生成)
- 构造方法中,可以通过this调用其他构造方法来简化代码
【this(...)必须是构造方法中第一条语句 、 不能形成环】
public class Date { public int year; public int month; public int day; //无参数的构造方法 public Date(){ this(2023,8,9); /*this.year = 2023; this.month = 8; this.day = 9;*/ } //带有三个参数的构造方法 public Date(int year,int month,int day){ this.year = year; this.month = month; this.day = day; System.out.println("Date(int year,int month,int day)方法被调用了"); } public void printDate(){ System.out.println(year + "/" + month + "/" + day); } public static void main(String[] args) { Date date = new Date(2023,8,5); date.printDate(); Date date1 = new Date(); date1.printDate(); } }
二、默认初始化
首先我们先思考一个问题,为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?
原因是:对象空间被申请好之后,对象中包含的成员已经设置好了初始值
数据类型 | 默认值 |
byte | 0 |
char | '\u0000' |
short | 0 |
int | 0 |
long | 0L |
boolean | false |
float | 0.0f |
double | 0.0 |
reference | null |
三、就地初始化
就地初始化就是在声明成员变量时,就直接给出了初始值
public class Person {
public String name = "周武";
public void printPerson(){
System.out.println("姓名:" + name);
}
public static void main(String[] args) {
Person person = new Person();
person.printPerson();
}
}