Java构造器的理解

Posted ch42e

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java构造器的理解相关的知识,希望对你有一定的参考价值。

构造器的引入

在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器。从而保证了初始化的进行。

构造器的命名

  1. 所取得任何名字可能与类得某个成员名称相冲突
  2. 调用构造器是编译器得责任,所以必须让编译器知道应该调用哪个方法

Java构造器采用与类相同的名称

class Example{
    public String var1;
    public String var2;
    // 默认构造器(无参构造器)
    public Example(){}
}

构造器的形式

不接受任何参数的构造器叫做默认构造器。但是和其他方法一样,Java构造器也能够带有形参,以便指定如何创建对象。

class Example{
    public String var1;
    public String var2;
    // 默认构造器(无参构造器)
    public Example(){}
    
    //自定义构造器(带有形参)
    public Example(String var1,String vart2){
        this.var1 = var1;
        this.var2 = var2;
    }
    
    public static void main(String[] args){
        Example example = new Example("参数1","参数2");
    }
}

在上面的代码中,存在两个构造器(默认构造器和自定义构造器),因此我们可以使用new Example()的方式来创建不带参数的Example对象,同时也可以使用new Example(var1,var2)的方式来创建对象。

构造器有助于减少错误,并使得代码更容易阅读。从概念上来讲,“初始化”和“创建”是彼此独立的,但是在Java中,“初始化”和“创建”是捆绑在一起,二者不能分离。

构造器没有返回值,不会返回任何东西(new表达式确实返回了对新建对象的引用,但构造器本身并没有任何返回值)

this关键字

this关键字只能够在方法内部使用,表示对“调用方法的哪个对象”的引用。下面给出this关键字的6个用法:

  1. this可用于引用当前类的实例变量。
  2. this可用于调用当前类方法(隐式)
  3. this() 可用于调用当前类的构造函数
  4. this可以在方法调用中作为参数传递。
  5. this可以在构造函数调用中作为参数传递。
  6. this可用于从方法返回当前的类实例。

技术图片

详细内容可参考链接3

super关键字

构造器是不能够被继承的,如果子类要调用父类中的构造器,那么就必须要用到super关键字了。

package chapter7;

class Example {
    public String name;

    //无参构造器
    public Example(){
        System.out.println("Example()");
    }

    //有参构造器
    public Example(String name){
        this.name = name;
        System.out.println(name);
    }
}

public class People extends Example{
    public People(){
        super();
    }
    public People(String name){
        super(name);
    }
    public static void main(String[] args){
        People people1 = new People();
        People people2 = new People("yoloyanng");
    }
}
/*
* Output:
* Example()
* yoloyanng
*/

在People类中的两个构造器中包含了super关键字,它们的作用是实例化父类中的构造器,加入到People中。并且super关键字只能够放在首行,而如果没有加上super关键字,编译器会自动加上。

更多用法:

  1. super可用于直接引用父类实例变量。
  2. super可用于直接调用父类方法。
  3. super() 可用于直接调用父类构造函数。

技术图片

详细内容参考链接4

参考

《Java编程思想》(第四版)

链接1:https://www.cnblogs.com/grl214/p/5895854.html

链接2:https://blog.csdn.net/f381226200/article/details/88368446

链接3:https://www.javatpoint.com/this-keyword

链接4:https://www.javatpoint.com/super-keyword

以上是关于Java构造器的理解的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中创建构造函数的代码片段或快捷方式

无法解析片段中的 ViewModelProvider 构造?

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Effective Java通俗理解(持续更新)

Java如何快速构造JSON字符串