构造方法

构造方法名([参数列表]){
 
[this([参数列表]);] |[super([参数列表]);
 
语句序列
 
}

其中,this是调用其他的构造方法,super是调用父类的构造方法。它们都必须放在其他语句的前面。
 
 构造方法的名字必须和类的名字完全相同。
 
 除了访问权修饰符之外,不能有其他任何修饰符,也就不能有返回值。
 
 尽管没有返回值,但并不能用“void”修饰。
 
 构造方法不能用static和final来修饰。一般也不用private修饰,这会导致无法在外部创建对象。
 
 构造方法不能由对象显式地调用。一般通过new关键字来调用,或者用this、super来调用。
 
 构造方法的参数列表可以为空,也可以有参数。根据参数的有无,可以将构造方法分为无参数的构造方法和带参数的构造方法。
 
 用户定义的类可以拥有多个构造方法,但要求参数列表不同。
 
 如果用户定义的类未提供任何构造方法时,系统会自动为其提供一个无参数的构造方法。
 

一、无参数构造方法的定义和使用

  利用无参数构造方法为一些成员变量做初始化:

 

public class Test {

 private int x = 0;

 public Test() {  

 System.out.println("这是个无参的构造!!!");  

 x = 2;  

}

 public static void main(String[] args) {   

Test t = new Test();   //隐式调用无参数的构造方法

System.out.println(t.x);  //可以通过类方法获取该值

}

}

/*public void Test() {
  System.out.println("这是个无参的构造!!!");
  x = 2;
 }

它的输出结果如下: x = 0  

  语句Test t = new Test(); 并不是调用程序员自己定义的“构造方法”,而是调用了系统提供的默认 的无参数的构造方法,这个方法其实什么事情也没做,自然也就不会更改x的值。  

说明:C++程序员不会犯此类错误。因为在C++中,如果在构造方法前面加上void,编译器将报错。  

注意:构造方法前的访问权限修饰符同样有4种,但通常不会是private类型。因为用它来修饰的话,无法在外部使用该构造方法。  

Test t = new Test();  创建对象在没有无参构造方法下也可以的,因为默认下还有一个构造方法。*/

二、带参数构造方法的定义和使用 

public class Test {

 private int x = 0;

 public Test(int x1) {   

System.out.println("这是个有参的构造!!!");  

 x = x1;  

}

 public static void main(String[] args) {   

Test t = new Test(12);  

 System.out.println(t.x);  

}

}

系统不会再为类提供无参数的构造方法。当此类被其他类继承时,这一问题显得越发严重,它甚至会导致根本无法写出一个子类。因此,父类中应该要有无参的构造方法!!!

三、this关键字和构造方法的调用

this([参数列表])
 
  系统将根据参数列表来决定调用哪一个构造方法。使用this时还需注意下面几点:
 1、用this调用构造方法时,该语句只能用在构造方法中。
 
 2、this语句必须是构造方法中的第一条语句。
 
 3、和new不同,this虽然可以调用构造方法,但它只是执行构造方法中的语句,并不会创建对象。

 

public class Test {  private int x = 0;  private int y = 0;  public Test(int x1) {   System.out.println("这是个有参的构造!!!");   x = x1;

 }

 public Test(int x1,int x2) {   this(30);   System.out.println("这是个有参的构造!!!");   y = 59;  }

 public static void main(String[] args) {   Test t = new Test(12,49);   System.out.println(t.x+":::"+t.y);  } }

posted on 2012-09-03 22:22  云端飘  阅读(1174)  评论(0编辑  收藏  举报

导航