21xrx.com
2024-09-08 09:31:37 Sunday
登录
文章检索 我的文章 写文章
掌握Java对象初始化的正确姿势
2023-06-15 20:50:57 深夜i     --     --
Java 对象初始化 静态初始化 实例初始化 代码实例

Java是一种面向对象编程语言,对于Java程序员而言,对象的初始化是一个十分基础和重要的知识点。本文将对Java对象初始化的方式、顺序和注意事项进行讲解,并且提供代码实例帮助读者更好地理解这个概念。

1. 对象初始化方式

Java中有两种对象初始化的方式,它们分别是:静态初始化和实例初始化。

静态初始化是在静态代码块中或在定义变量时已经进行的初始化。

实例初始化是对象的构造函数被调用时执行的初始化。

下面是代码案例:


public class InitializationDemo {

  static int staticVar = 1; // 静态变量

  static {  // 静态初始化块

    System.out.println("执行了静态初始化块(static initialization block)");

    staticVar++;

  }

  int instanceVar = 1; // 实例变量

  { // 实例初始化块

    System.out.println("执行了实例初始化块(instance initialization block)");

    instanceVar++;

    staticVar++;

  }

  public InitializationDemo() { // 构造函数

    System.out.println("执行了构造函数(constructor)");

    instanceVar++;

    staticVar++;

  }

  public static void main(String[] args) {

    InitializationDemo demo1 = new InitializationDemo();

    InitializationDemo demo2 = new InitializationDemo();

    System.out.println("实例变量的值: " + demo1.instanceVar + " " + demo2.instanceVar);

    System.out.println("静态变量的值: " + InitializationDemo.staticVar);

  }

}

2. 对象初始化的顺序

对象初始化的顺序对于Java程序的正确性来说至关重要。对象初始化顺序如下:

① 静态代码块的初始化(按照代码的顺序进行)

② 静态变量的初始化(按照代码的顺序进行)

③ 实例变量的初始化(与静态变量一样,按照代码的顺序进行)

④ 实例代码块的初始化(按照代码的顺序进行)

⑤ 构造函数的初始化

实例代码块与实例变量的初始化是在构造函数之前进行的。下面是一个例子:


public class InitializationDemo2 {

  static int staticVar = 1; // 静态变量

  static {  // 静态初始化块

    System.out.println("执行了静态初始化块(static initialization block)");

    staticVar++;

  }

  int instanceVar = 1; // 实例变量

  { // 实例初始化块

    System.out.println("执行了实例初始化块(instance initialization block)");

    instanceVar++;

    staticVar++;

  }

  public InitializationDemo2() { // 构造函数

    System.out.println("执行了构造函数(constructor)");

    instanceVar++;

    staticVar++;

  }

  public static void main(String[] args) {

    InitializationDemo2 demo = new InitializationDemo2();

  }

}

3. 对象初始化的注意事项

如果一个类继承另一个类,它的初始化顺序是从基类开始逐级往下,最后才到子类。

如果一个子类没有定义任何构造函数,那么它会默认调用父类的无参构造函数。如果父类没有提供无参构造函数,那么子类必须在构造函数中显示调用父类的构造方法。这个过程称之为super调用。

如果一个类既提供了构造函数,又提供了静态初始化块,那么静态初始化块先执行,然后才是构造函数。而且无论new多少个实例,静态初始化块都只会执行一次。

通过本文的讲解,相信读者对Java对象初始化有了更深入的理解。同时,这里提供的代码实例也可以帮助读者更好地理解这个概念。在实际编写Java程序时,正确掌握对象初始化的方式和顺序是非常重要的,这将对程序的性能和正确性产生重要影响。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章