49天精通Java,第35天,Java初始化、构造器、对象创建的过程-LMLPHP

大家好,我是哪吒。

🏆本文收录于,49天精通Java从入门到就业

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

一、初始化与清理

初始化和清理正是导致不安全编程的两大因素。许多错误都源于程序员忘记初始化变量。特别是使用依赖库时,用户可能不知道如何初始化库的组件,甚至不知道要初始化它们。

清理也需要特别关注,因为当你不再使用一个元素时,就不再关注它,所以很容易忘记它,如果不及时清理,这个元素使用的资源会一直被占用,结果就是资源很容易被耗尽。

二、用构造器保证初始化

1、无参构造器

在Java中,没有无参构造器。Java中的构造器是一个特殊的方法,它在创建对象时被调用。构造器可以接受任何数量的参数,但是它们必须在创建对象时传递。

public class Test {  
    //  构造器代码  
}

在这个例子中,我们定义了一个名为Test的类,它有一个无参构造器。在这个构造器中,我们可以编写任何必要的代码来初始化对象。

2、有参构造器

在Java中,有参构造器(parameterized constructor)是指一个类中带有参数的构造方法。与无参构造器不同,有参构造器接受参数来初始化对象的成员变量。

有参构造器的语法格式为:

public class Test {
    public Test(int param1, String param2) {
        // 构造器代码
    }
}

在上面的例子中,Test类定义了一个有参构造器,该构造器接受一个int类型的参数和一个String类型的参数。当创建Test类的对象时,需要传递对应的参数值来调用该构造器来初始化对象。

使用有参构造器可以方便地对对象进行初始化,并且避免了在创建对象后再一一设置每个成员变量的值的繁琐过程。通常情况下,建议在定义类时同时定义无参构造器和有参构造器,以方便使用者根据自己的需求选择合适的构造器来创建对象。

三、成员初始化

Java 成员初始化是一种在类初始化过程中执行的操作,它可以对类的实例变量或方法进行赋值。这些操作可以包含赋值,运算表达式或其他复杂的表达式。

在 Java 中,成员初始化可以通过以下方式实现:

1、显式初始化

在类定义中直接对成员变量进行赋值。

public class Test {  
    public int id = 1;  
    public String name = "哪吒编程";  
}

2、隐式初始化

在创建对象时,使用默认值对成员变量进行初始化。

public class Test {  
    public int id;  
    public String name;  
      
    public Test() {  
        // 默认构造函数使用默认值进行成员变量初始化  
        this.id = 0; // 0为默认值  
        this.name = null; // null为默认值  
    }  
}

3、初始化块

可以在类定义中添加初始化块来对成员变量进行初始化。初始化块可以包含任意数量的语句,这些语句将在对象创建时执行。

public class InitializeTest {
    public int id;
    public String name;

    // 初始化块
    {
        this.id = 10; 
        this.name = "哪吒编程";
    }
}

初始化块中的语句将先于构造函数执行。

猜猜看下面这段代码会输出什么?

public class InitializeTest {
    public int id;
    public String name;

    // 初始化块
    {
        this.id = 10;
        this.name = "哪吒编程";
    }

    // 构造函数
    public InitializeTest() {
        this.id = 0;
        this.name = null;
    }

    public static void main(String[] args) {
        InitializeTest initializeTest = new InitializeTest();
        System.out.println(initializeTest.id);
        System.out.println(initializeTest.name);
    }
}

四、对象创建的过程

1、创建对象时,或者第一次访问类的静态方法或静态字段时,Java解释器会搜索类路径来定位class文件。

2、当class被加载后,将创建一个class对象,它的所有静态初始化工作都会执行。

因此,静态初始化只在class对象首次加载时发生一次。

3、当使用new创建对象时,首先会在堆上为对象分配足够的存储空间,这块存储空间会被清空,然后自动将对象中的所有基本类型设置为其默认值,比如int的默认值为0,Integer的默认值为null。

4、执行所有初始化操作。

5、执行构造器。


49天精通Java,第35天,Java初始化、构造器、对象创建的过程-LMLPHP

🏆本文收录于,49天精通Java从入门到就业

全网最细Java零基础手把手入门教程,系列课程包括:基础篇、集合篇、Java8新特性、多线程、代码实战,持续更新中(每周1-2篇),适合零基础和进阶提升的同学。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

05-23 13:15