2021-04-18 10:55  阅读(113)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-class-instance.html

Java面向对象设计 - Java初始化块

实例初始化块

实例初始化块用于初始化类的对象。

一个实例初始化程序只是一个类的代码块,但在任何方法或构造函数之外。

实例初始值设定程序没有名称。它的代码只是放置在一个开放大括号和闭包。

例子

下面的代码展示了如何为Test类声明一个实例初始化器。

注意,实例初始化程序在实例上下文中执行,并且关键字this在实例初始化程序中可用。

    class Test {
      private int num;
      // An instance initializer
      {
        this.num = 101;
    
        /* Other code for the instance initializer*/
      }
    
      /* Other code for Test class*/
    }
    

多重实例初始化

我们可以有一个类的多个实例初始化器。对于我们创建的每个对象,它们都以文本顺序自动执行。

所有实例初始值的代码在任何构造函数之前执行。

下面的代码演示了构造函数和实例初始化函数的执行顺序。

    public class Main {
      {
        System.out.println("Inside instance initializer 1.");
      }
    
      {
        System.out.println("Inside instance initializer 2.");
      }
    
      public Main() {
        System.out.println("Inside  no-args constructor.");
      }
    
      public static void main(String[] args) {
        Main m = new Main();
      }
    }
    

上面的代码生成以下结果。

2021041810510_1.png

实例初始化程序不能有return语句。

静态初始化块

静态初始化块也称为静态初始化器。它类似于实例初始化块。

它用于初始化一个类。每个对象执行一个实例初始化器,而当类定义被加载到JVM中时,只对一个类执行一次静态初始化器。

我们需要在其声明的开头使用static关键字。

我们可以在类中有多个静态初始化器。所有静态初始化器都按文本出现的顺序执行,并在任何实例初始化器之前执行。

以下代码演示了何时执行静态初始化程序。

    public class Main {
      private static int num;
      {// An instance initializer
        System.out.println("Inside instance initializer.");
      }
      // A static initializer. Note the use of the keyword static below.
      static {
        num = 2014;
        System.out.println("Inside static initializer.");
      }
    
      // Constructor
      public Main() {
        System.out.println("Inside constructor.");
      }
    
      public static void main(String[] args) {
        System.out.println("Inside  main() #1.   num: " + num);
        // Declare a reference variable of the class
        Main si;
        System.out.println("Inside  main() #2.   num: " + num);
        new Main();    // Create an object
    
        System.out.println("Inside  main() #3.   num: " + num);
        new Main();// Create another object
      }
    }
    

上面的代码生成以下结果。

202104181056_2.png

静态初始化器不能抛出检查的异常,它不能有一个return语句。

点赞(16)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 初始化块
上一篇
Java 构造函数
下一篇
Java Object类