Java中的构造方法

1. Java中构造方法的介绍

      构造方法是类的一种特殊方法,用来初始化类的一个新的对象,在创建对象(new 运算符)之后自动调用。Java 中的每个类都有一个默认的构造方法,并且可以有一个以上的构造方法。

      换个角度说:构造方法负责对应对象的初始化工作,为实例变量赋予合适的初始值。

2. 构造方法必须满足的语法规则

  1. 方法名必须与类名相同。
  2. 方法没有任何返回类型,包括void。
  3. 只能与new关键字结合使用。
  4. 默认返回类型的是某个类的实例本身类型。
  5. 不能被static,final,synchronized,abstract和native等关键词修饰。

     注意:类的构造方法不是要求必须定义的。如果在类中没有定义任何一个构造方法,则 Java 会自动为该类生成一个默认的构造方法。默认的构造方法不包含任何参数,并且方法体为空。如果类中显式地定义了一个或多个构造方法,则 Java 不再提供默认构造方法。

public Class Test {
    /**没有定义任何的构造函数,java会自动生成一个默认的构造方法
      *方法的特点是:
      *1:方法中不包括任何参数
      *2:方法体为空
      **/  
}

     构造方法的代码实例:

public Class Test{
    
    private int paramOne;
    private int paramTwo;
    //无参构造方法也称作为Nullary构造方法。只有编译程序自动加载到构造方法才称为默认构造方法。
    //对于自行编写无参,空方法的构造方法不能称作为默认构造方法。
    public Test(){
        //自定义的无参构造函数
        //paramOne = 0;
        //paramTwo = 1;
    }
    
    public Test(int paramOne,int paramTwo){
        //自定义的有参构造函数
        this.paramOne = paramOne;
        this.paramTwo = paramTwo;
    }
    //toString()方法是Object类中定义的方法,我们创建的所有类都会继承该方法,该方法返回一个String
    //类型的字符串。如果类中定义了该方法,则在调用该对象时会自动调用该对象的toString()方法返回一个              
    //字符串。
    public String toString() {
        return "paramOne = " + paramOne + ";paramTwo = " + paramTwo;
    }

    //Object类中定义的toString方法
    public String toString() {
        //此处使用了Object的hashCode()默认方法,返回的是内存地址,但是hashCode()是可以重写的,
        //所以hashCode()不能代表内存地址的不同。
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
}

      注意:如果为构造方法定义了返回值类型或使用 void 声明构造方法没有返回值,编译时不会出错,但 Java 会把这个所谓的构造方法当成普通方法来处理。

3. 构造方法没有返回值同时不能使用void关键字声明的原因

      简单的说,这是 Java 的语法规定。实际上,类的构造方法是有返回值的,当使用 new 关键字来调用构造方法时,构造方法返回该类的实例,可以把这个类的实例当成构造器的返回值,因此构造器的返回值类型总是当前类,无须定义返回值类型。但必须注意不要在构造方法里使用 return 来返回当前类的对象,因为构造方法的返回值是隐式的。

4. 构造方法不能被static,final,synchronized,abstract和native等关键词修饰的理由

      构造方法用于初始化一个新对象,所以用 static 修饰没有意义。构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义。多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。构造方法并非本地方法所以也没有必要使用native关键字。

      总结:构造方法与普通方法相比,前者用来初始化对象实例,与此同时能够对类的成员变量进行初始化操作,而后者用来定一对象的实际功能行为,而且后者可以利用前者来实现某种功能。

 

    原文作者:至学者
    原文地址: https://blog.csdn.net/calm_encode/article/details/86737228
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞