이 기사는 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
자바 언어의 상속 시스템에서 부모 클래스도 초기화 블록을 가질 수 있으며 숫자는 그렇지 않습니다. 제한된.
부모 클래스의 인스턴스 초기화 블록은 자식 클래스의 생성자에서super()
를 호출한 직후에 실행됩니다. 컴파일러는 현재 클래스의 인스턴스 초기화 블록을 실행하기 전에 상위 클래스의 인스턴스 초기화 블록을 실행합니다. 매우 복잡하지 않나요? 이를 보여주기 위해 코드를 작성해 보겠습니다rrreee
실행 결과에서 JavaTester 클래스의 객체를 생성할 때 컴파일러는 JavaTester Constructor 클래스의 메소드를 실행하려고 시도합니다. 그러나 상위 클래스가 있기 때문에super()
문을 발견한 후 상위 클래스의 생성자를 먼저 실행하도록 전환합니다. 위 내용은 Java의 인스턴스 초기화 블록(IIB)에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!