在Java方法内部定义一个局部变量时,必须要初始化,否则就会编译失败,如下:
要让上述代码通过编译,只需在使用a之前给a赋一个初始值即可
如果是对象:下面用一个日期类演示
我们没有给年月日赋值,它却编译通过了,并且自动初始化为0
这就是Java中构造方法起到作用了
虽然代码里没有表现,但是当我们没有写任何构造方法时,Java会帮我们提供一个默认不带参数的构造方法,实例化对象时一定会调用构造方法
但是,一旦我们自己写了构造方法,Java就不会给我们提供不带参数的构造方法了,如下代码,我们自己写了一个三个参数的构造方法,就会报错:
两种解决方法:
1、new对象时,传三个参数,如下:
2、再写一个无参数的构造方法,并且在无参构造方法中用this调用三个参数的构造方法,如下:
注意:this在构造方法中使用时,必须是第一条语句,否则就报错 ,并且this调用不能成环
结论:
1、一个对象的生成至少有2步很重要:
- 为对象分配内存
- 调用合适的构造方法
2、构造方法名 必须和当前 类名一样,并且没有返回值,在创建对象时,编译器自动调用,并且在整个对象的生命周期内只调用一次
3、一个类中可能不只一个构造方法,构造方法可以发生重载
4、构造方法的作用就是用来初始化对象中的成员,并不负责给对象开辟空间,实例化时可以借用构造方法对对象进行初始化
Tips:用idea自动生成构造方法:
所用到的代码:
public class Date {
int year;
int month;
int day;
//无参构造方法
public Date(){
this(2024,5,20);
}
//三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
//打印
public void printDate(){
System.out.println(year + "年" + month + "月" + day + "日");
}
public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}