构造方法
-
构造方法是一种方法名与类名相同的用于创建实例时将实例进行初始化的方法。
-
在类中都有程序自动创建的默认的构造方法,它是无参的。
-
构造方法可在类中人为自定义,若自定义了构造方法,则默认构造方法失效。
-
构造方法没有返回值类型。
-
构造方法可分为隐式构造方法和显式构造方法,系统提供的默认构造方法为隐式构造方法,是不可见的。显式构造方法是指人自定义的构造方法,它是可见的。两者的方法名和类名相同。
隐式构造方法
public class Test0{
public static void main(String[] args) {
Test00 t=new Test00();
System.out.println(t.getAge()+","+t.getName());
}
}
class Test00{
private int age;
private String name;
public Test00(){//系统默认的构造方法,它是不可见的.
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getName()
{
return name;
}
public void setName(String name){
this.name=name;
}
}
运行结果如下:
由此可见,在默认构造方法中,将成员变量进行了初始化,age初始化为0,name初始化为null。
运行时的内存图如下:
在使用new关键字创建对象的同时程序会自动调用构造方法为对象中的成员变量初始化。
显示构造方法
- 无参构造
- 有参构造
1. 无参构造
public class Test0{
public static void main(String[] args) {
Test00 t=new Test00();
System.out.println(t.getAge()+","+t.getName());
}
}
class Test00{
private int age;
private String name;
public Test00(){//自定义的无参构造方法,它是可见的.
age=10;
name="小明";
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getName()
{
return name;
}
public void setName(String name){
this.name=name;
}
}
运行结果如下:
无参构造方法虽然没有参数的传递,但是它的方法中为成员变量赋了值,此时默认构造方法已经被覆盖失效,成员变量的初始化值已不再是默认构造方法时的0和null,而变为了10和小明。
2. 有参构造
public class Test0{
public static void main(String[] args) {
Test00 t=new Test00(11,"小红");
System.out.println(t.getAge()+","+t.getName());
}
}
class Test00{
private int age;
private String name;
public Test00(int age,String name){//自定义的有参构造方法,它是可见的.
this.age=age;
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getName()
{
return name;
}
public void setName(String name){
this.name=name;
}
}
运行结构如下:
有参构造方法接受传递的参数并将其赋值给自己的成员变量。此时默认构造方法已覆盖失效。有参构造方法相比于无参构造方法更加灵活。
构造方法可以重载,但是由于构造方法的名字与类名相同因此它不能被重写