>  기사  >  Java  >  Java의 인스턴스 초기화 블록(IIB)에 대한 자세한 소개(코드 예)

Java의 인스턴스 초기화 블록(IIB)에 대한 자세한 소개(코드 예)

不言
不言앞으로
2018-10-15 15:41:062159검색

이 기사는 Java의 인스턴스 초기화 블록(IIB)에 대한 자세한 소개(코드 예제)를 제공합니다. 이는 특정 참조 값을 가지고 있으므로 도움이 될 수 있습니다.

Java 언어의 클래스 초기화 블록 이번 글에서는 Java의 인스턴스 초기화 블록(IIB)에 대해 간략하게 소개했습니다. 다만, 소개가 좀 간단한 것 같아서, 자세히 소개하기 위해 다른 글을 쓰겠습니다.

Java 언어에는 메소드, 생성자 및 초기화 블록의 세 가지 작업이 있습니다.

초기화 블록은 인스턴스 초기화 블록(IIB)과 정적 초기화 블록으로 구분됩니다. 이번 장에서는 주로 인스턴스 초기화 블록을 소개합니다.

인스턴스 초기화 블록은 인스턴스 변수를 초기화하는 데 사용됩니다.

인스턴스 초기화 블록은 클래스의 인스턴스를 초기화할 때 실행되며 생성자보다 먼저 실행됩니다. 그리고 클래스의 객체가 생성될 때마다 실행됩니다.

인스턴스화 블록 구문

인스턴스 초기화 블록은 일반적으로 코드를 확장하기 위해 중괄호 {}를 사용하여 생성자 앞에 배치됩니다. 구문 구조는 일반적으로 다음과 같습니다{} 扩起来的代码。语法结构一般如下

class JavaTester 
{ 
    // 实例化块 
    {  
        System.out.println("IIB block"); 
    } 
     
    // 构造函数
    JavaTester() 
    { 
        System.out.println("Constructor Called"); 
    } 
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

注意,实例化块并不是类的必须。只是一个可选项。用于抽出构造函数的公共部分单独执行而已。

这段代码是可以编译运行的,运行结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB block
Constructor Called

一个类中包含多个实例初始化块

类中的 实例初始化块 并不是类所必须的,而且,不限数量。一个类既可以没有实例初始化块,也可以有多个实例初始化块。

如果一个类有多个实例初始化块,那么它们会按照顺序从上到下依次执行,也就是说,定义在类顶部的实例初始化块最先执行。

我们来看一段代码,下面的类 JavaTester 定义了多个实例初始化块。

class JavaTester 
{ 
    {  
        System.out.println("IIB1 block 1 "); 
    } 
    
    { 
        System.out.println("IIB2 block 2"); 
    } 
       
    JavaTester() 
    { 
        System.out.println("Constructor Called"); 
    } 
      
    { 
        System.out.println("IIB3 block 3"); 
    } 
     
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

运行上面这段代码,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
IIB1 block 1 
IIB2 block 2
IIB3 block 3
Constructor Called

父类中的初始化块

在 Java 语言的继承体系中,父类同样可以有初始化块,而且数量不限。

父类的实例初始化块在子类的构造函数中调用 super() 之后立即运行。编译器会在执行当前类的实例初始化块之前先执行父类的实例初始化块。

是不是很绕口,我们写一段代码来演示下

class B 
{ 
    B() 
    { 
        System.out.println("B-Constructor Called"); 
    } 
  
    { 
        System.out.println("B-IIB block"); 
    } 
  
}

public class JavaTester extends B 
{ 
    {  
        System.out.println("JavaTester IIB1 block 1 "); 
    } 
    
    { 
        System.out.println("JavaTester IIB2 block 2"); 
    } 
       
    JavaTester() 
    { 
        super(); 
        System.out.println("JavaTester-Constructor Called");
    } 
      
    { 
        System.out.println("JavaTester IIB3 block 3"); 
    } 
     
    public static void main(String[] args) 
    { 
        JavaTester a = new JavaTester(); 
    } 
}

运行以上范例,输出结果如下

[yufei@www.twle.cn java]$ javac JavaTester.java && java JavaTester
B-IIB block
B-Constructor Called
JavaTester IIB1 block 1 
JavaTester IIB2 block 2
JavaTester IIB3 block 3
JavaTester-Constructor Called

从运行的结果来看,当创建类 JavaTester 的对象时,编译器尝试执行类 JavaTester 的构造函数。但因为它有一个父类,在发现了 super()rrreee

클래스에는 인스턴스화 블록이 필요하지 않습니다. 그냥 옵션입니다. 생성자의 공개 부분을 추출하여 별도로 실행하는 데 사용됩니다.

이 코드를 컴파일하고 실행할 수 있으며 결과는 다음과 같습니다
    rrreee
  1. 클래스에 여러 인스턴스 초기화 블록이 포함되어 있습니다.

  2. 클래스에 있는

    인스턴스 초기화 블록

    은 클래스에 필요하지 않으며, 수로 제한합니다. 클래스에는 인스턴스 초기화 블록이 없거나 여러 인스턴스 초기화 블록이 있을 수 없습니다.
  3. 클래스에 인스턴스 초기화 블록이 여러 개 있는 경우 위에서 아래로 순서대로 실행됩니다. 즉, 클래스 상단에 정의된 인스턴스 초기화 블록이 먼저 실행됩니다.

    다음 코드를 살펴보겠습니다. JavaTester 클래스는 여러 인스턴스 초기화 블록을 정의합니다.
  4. rrreee
  5. 위 코드를 실행하면 출력 결과는 다음과 같습니다

    rrreee

  6. 부모 클래스의 초기화 블록

자바 언어의 상속 시스템에서 부모 클래스도 초기화 블록을 가질 수 있으며 숫자는 그렇지 않습니다. 제한된.

부모 클래스의 인스턴스 초기화 블록은 자식 클래스의 생성자에서 super()를 호출한 직후에 실행됩니다. 컴파일러는 현재 클래스의 인스턴스 초기화 블록을 실행하기 전에 상위 클래스의 인스턴스 초기화 블록을 실행합니다.

매우 복잡하지 않나요? 이를 보여주기 위해 코드를 작성해 보겠습니다
    rrreee
  • 위 예제를 실행하면 출력 결과는 다음과 같습니다

    rrreee

    실행 결과에서 JavaTester 클래스의 객체를 생성할 때 컴파일러는 JavaTester Constructor 클래스의 메소드를 실행하려고 시도합니다. 그러나 상위 클래스가 있기 때문에 super() 문을 발견한 후 상위 클래스의 생성자를 먼저 실행하도록 전환합니다.
  • 따라서 상속 시스템에서는 인스턴스 초기화 블록과 생성자의 실행 순서는 다음과 같습니다

  • 부모 클래스의 인스턴스 초기화 블록을 실행

부모 클래스의 생성자를 실행🎜🎜🎜🎜실행 현재 클래스 블록의 인스턴스 초기화 🎜🎜🎜🎜현재 클래스의 생성자 실행 🎜🎜🎜🎜🎜인스턴스 초기화 블록의 주요 포인트🎜🎜🎜 인스턴스 초기화 블록의 주요 포인트를 살펴보겠습니다. 🎜🎜🎜🎜새 인스턴스가 생성될 때마다 인스턴스 초기화 블록이 실행됩니다.🎜🎜🎜🎜초기화 블록은 클래스에 나타나는 순서대로 실행됩니다.🎜🎜🎜🎜부모 클래스가 있으면 부모 클래스가 먼저 인스턴스화되고 그러면 현재 클래스가 클래스의 인스턴스 초기화 블록으로 호출되고 마지막으로 현재 클래스의 생성자가 호출됩니다. 🎜🎜🎜

위 내용은 Java의 인스턴스 초기화 블록(IIB)에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제