在java语言中,构造方法是一种比较特殊的方法,它用于创建实例(也就是对象)的时候进行初始化操作。
在创建对象的时候,实际上就用到了构造方法,只不过是new的方式
例:Preson p = new Person();
此处的Person()就是一个构造方法,构造方法默认不可见。
如果我们需要将某些特定的变量进行特殊的初始化,以便让其他对象创建的时候能够获取到预期的值,我们就可以通过自定义构造方法的方式来实现。
在没有定义手工定义构造方法的时候,采用的是系统为操作类提供的一个无参数的默认的构造方法,它的形式就是:public 类名() {}
static class MagicBox{
public int length;
public int width;
public int height;
//定义一个构造方法,用于对盒子进行初始化
//定义一个带参的方法,用于接收外界传递来的初始化参数
public MagicBox(int length,int width,int height){
this.height = height;
this.length = length;
this.width = height;
}
}
public static void main(String[] args) {
MagicBox box = new MagicBox(50,20,10);
System.out.println("length:"+box.length);
System.out.println("width:"+box.width);
System.out.println("height:"+box.height);
}
在案例中,在没有定义构造方法之前,MagicBox box2 = new MagicBox();这种方式是可以被使用的,但此时定义了一个带有参数的构造方法,这种方法就不适用了。
在java语言中,一旦用户定义了构造方法,系统就不再提供默认的构造方法了。
static class MagicBox{
public int length;
public int width;
public int height;
//系统默认提供的构造方法,在用户未自定义构造方法之前,这个方法是由系统提供的,并不可见。
//如果用户自定义了一个构造方法,并与原来系统默认的构造方法一致,那么原来的构造方法失效。
//一个类中可以同时存在多个构造方法,此时形成了构造方法重载
public MagicBox() {
}
//定义一个构造方法,用于对盒子进行初始化
//定义一个带参的方法,用于接收外界传递来的初始化参数
public MagicBox(int length,int width,int height){
this.height = height;
this.length = length;
this.width = height;
}
}
public static void main(String[] args) {
MagicBox box = new MagicBox(50,20,10);
System.out.println("length:"+box.length);
System.out.println("width:"+box.width);
System.out.println("height:"+box.height);
//系统默认的初始化
MagicBox box2 = new MagicBox();
System.out.println(box2.height);
System.out.println(box2.length);
System.out.println(box2.width);
}
运行结果
因为构造方法主要用于被其他类调用并创建对象,所以通常构造方法的访问权限是public,允许系统中的其他类来创建该类的对象。如果将构造方法设置为protected,主要用于被子类调用;如果将其设置为private,其他类则不能创建该类的实例。
建议将构造方法的访问权限设置为public,且保留原默认构造方法。
如果一个构造方法的结构能够包含另一个构造方法的结构,那么他们之间是存在可调用关系的。
static class MagicBox{
public int length;
public int width;
public int height;
//系统默认提供的构造方法,在用户未自定义构造方法之前,这个方法是由系统提供的,并不可见。
//如果用户自定义了一个构造方法,并与原来系统默认的构造方法一致,那么原来的构造方法失效。
//一个类中可以同时存在多个构造方法,此时形成了构造方法重载
public MagicBox() {
}
//定义一个构造方法,用于对盒子进行初始化
//定义一个带参的方法,用于接收外界传递来的初始化参数
public MagicBox(int length,int width,int height){
//可以使用this关键字对构造方法进行调用,
//使用this调用另一个构造方法的时候,调用语句必须放在第一行
//在普通方法中无法引用构造方法,对构造方法的调用只能出现在构造方法中。
//在使用构造方法引用时,也不能出现调用闭环,不能相互调用。
this(length, width);
this.width = width;
}
public MagicBox(int length,int width){
this.length = length;
this.width = height;
}
}
public static void main(String[] args) {
MagicBox box = new MagicBox(50,20,10);
System.out.println("length:"+box.length);
System.out.println("width:"+box.width);
System.out.println("height:"+box.height);
//系统默认的初始化
MagicBox box2 = new MagicBox();
System.out.println(box2.height);
System.out.println(box2.length);
System.out.println(box2.width);
}