Java构造方法

 构造方法的特征:

    • 具有与类相同的名称

    • 不能含有返回值类型,也不能是void

    • 不能在方法中用return语句返回一个值

    • 在实例化时,它会由系统自动调动(类是对象的抽象,对象是类的实例化)

    • 若编写代码时,类中没有编写构造方法,系统会自动生成一个构造方法

 

构造方法的定义:

       构造方法是Java创建的伪方法,是一种实例方法,名称与其类名相同,是通过new关键字来调用。

 

构造方法的执行顺序:

       在创建对象时,对象所在类的所有属性会首先进行初始化,在类的所有成员初始化完成后,才调用对象所在类的构造方法创建对象,构造方法的功能就是初始化。

e.g

 1 public class Circle {
 2     double radius=1.0;
 3     Circle(){}
 4     Circle(double radius){
 5         this.radius=radius;
 6     }
 7     void getRadius(){
 8         System.out.println(radius);
 9     }
10     double getArea(){
11         return radius*radius*3.14;
12     }
13     double getPerimeter(){
14         return 2*3.14*radius;
15     }
16 }

其中第3,4行的方法就是构造方法。

 

构造方法的调用:

e.g

 1 class SuperClass{
 2 SuperClass(){
 3     System.out.println("SuperClass的构造方法");}}
 4 
 5 public class SubClass extends SuperClass{
 6 SubClass(){
 7     System.out.println("SubClass的构造方法");}}
 8 
 9 public static void main(String[] args){
10     SubClass sub =new SubClass();}}

其运行结果为:

注意:在子类中只实例化了一个子类对象。从输出结果来看,程序并不是一开始就运行自己的构造方法,而是先运行其父类的默认构造方法。故而,程序自动调用其父类的默认构造方法

e.g

 1 class One{
 2     One(String str){
 3           System.out.println(str);}}
 4 
 5 
 6 class Two{
 7     One one1=new One("one-1");
 8     One one2=new One("one-2");
 9     One one3=new One("one-3");
10     Two(String str){
11            System.out.println(str);}}
12 
13 public class test{
14      public static void main(String[] srgs){
15            Two two=new Two("two");}}

其运行结果为:

        在main()方法中实例化了一个Two类的对象。但程序在初始化Two类的对象时,并非先调用Two类的构造方法,而是先初始化Two类的成员变量。这里Two类有3个成员变量,它们都是One类的对象,

所以要先调用3次One类的相应的构造方法。最后再初始化Two类的对象

 

构造方法的重载    

    • 一个类的构造方法可以有多个,允许重载

    • 每个类至少有一个构造方法,如果用户没有定义,系统自动产生一个默认构造方法,没有参数,也没有方法体。

    • 用户可以定义构造方法,如果定义了构造方法,则系统不再提供默认构造方法。

    • 构造方法一般是public,不可以定义为private。

关于构造方法重载的一个案例:

 1 class Person{
 2       private String name="unknown";
 3       private int age=1;
 4       public Person(){
 5             System.out.println("constructor1 is calling");}
 6       public Person(String s){
 7             name=s;
 8             System.out.println("constructor2 is calling");
 9             System.out.println("name is"+name);}
10       public Person(String s,int i){
11             name=s;
12             age=i;
13             System.out.println("constructor3 is calling");
14             System.out.println("name&age is"+name+age);}
15       public void shout(){
16             System.out.println("Please see above!");}
17 }
18 
19 class TestPerson{
20       public static void main(String[] args){
21             Person p1=new Person();
22             p1.shout();
23             Person p2=new Person("Jack");
24             p2.shout();
25             Person p3=new Person("Tom",9);
26             p3.shout();}}

其运行结果为:

 

 

posted @ 2018-10-07 17:43  Tinero  阅读(273)  评论(0编辑  收藏  举报