本篇主要介绍Java语言中的面向对象中的构造方法。
12 构造方法
构造方法是在使用new关键字创建对象时调用的方法,负责对象属性值的初始化工作。
12.1 构造方法的特性
1、构造方法的方法名与类名相同(包括字母大小写)
2、构造方法没有返回值(void类型也不能写)
3、构造方法如果开发者不提供,则编译器会默认提供一个无参的构造方法。若开发者提供了构造方法,则编译器不再提供无参的构造方法。
12.2 无参构造方法
12.2.1 隐藏的无参构造方法
隐藏的无参构造方法,即开发者在类中不需要提供构造方法,编译器会自动给这个类提供一个无参的构造方法。
public class Point{
public int x;
public int y;
}
public static void main(String[] args) {
//创建Point对象,调用了系统提供的隐藏的无参构造方法
Point point = new Point();
point.x = 3;
point.y = 3;
}
12.2.2 显式定义的无参构造方法
开发者在类中显式定义无参的构造方法后,系统不再提供隐藏的无参的构造方法。
public class Point{
public int x;
public int y;
//显式定义的无参构造方法Point()
public Point(){
}
}
public static void main(String[] args) {
//创建Point对象,调用了开发者显式定义的无参构造方法
Point point = new Point();
point.x = 3;
point.y = 3;
}
注:隐藏的无参构造方法,只有在开发者未显式的的定义任何一个构造方法(不管有参还是无参)时,系统才会提供隐藏的无参构造方法。只要开发者定义了一个或者多个构造方法(不管有无参数),系统都不再提供隐藏的无参构造方法。
12.3 有参构造方法
有参的构造方法是为了创建对象时,使用指定的值将对象的属性值进行初始化而定义的构造方法。有参构造方法必须由开发者显式定义。
public class Point{
public int x;
public int y;
//有参构造方法
public Point(int x, int y){
this.x = x;//给对象的x属性赋值
this.y = y;//给对象的y属性赋值
}
}
public static void main(String[] args) {
Point point = new Point(3,4);//使用有参构造方法创建对象
System.out.println("x坐标为"+point.x
+",y坐标为"+point.y);//输出x坐标为3,y坐标为4
}
上述代码中的有参构造方法,在给成员变量赋值时,使用了java中的关键字this,如this.x = x;此处如果写出x = x;则是将传入的参数x的值赋给了变量本身,而不是赋给成员变量x(因为此处形参与成员变量同名)。如果要把形参的值赋给同名的成员变量,需要使用this.成员变量名即可访问同名的成员变量。
12.4 构造方法的重载
一个类的构造方法有多个,这些构造方法的参数列表不同,就形成了构造方法的重载。
public class Point{
public int x;
public int y;
//无参构造方法
public Point(){
}
//1个参数的有参构造方法
public Point(int x){
this(x,x);//调用Point(int x, int y)
}
//2个参数的有参构造方法
public Point(int x,int y){
this.x = x;
this.y = y;
}
}
上述代码的Point类中,定义了三个构造方法,这三个构造方法的参数列表是不同的,属于方法的重载。
其中,只有一个参数的构造方法,使用this(x,x)调用了有两个参数的构造方法,这是关键字this的另一种用法。
有了构造方法的重载,开发者就可以按需实例化Point的对象,比如:
Point p1 = new Point();//点p1的坐标为(0,0)
Point p2 = new Point(3);//点p2的坐标为(3,3)
Point p3 = new Point(4,5);//点p3的坐标为(4,5)
下一篇将介绍Java中的面向对象中的方法的重载。