Initialization Block ในภาษา Java

| Java | 1200 | 867 วันที่แล้ว
บทความนี้เรามาดูวิธีการใช้ Initialization Block ในภาษา Java กันครับ ว่า Initialization Block มันคืออะไร ใช้ยังไง และต้องรู้อะไรบ้าง

ก่อนอื่นเรามาดูวิธีการใช้งาน Initialization Block แบบง่าย ๆ กันก่อน ตามด้านล่างเลย

package com.howtoclicks.example;

public class HowToclicksExample {
	static int x;
	 
	 static {
	  x = 50;
	 }
}
จากโค้ดจะเห็นว่าเรามีบล็อกอยู่ ซึ่งในที่นี้ก็คือ ในวงเล็บ { และ } จะเห็นว่าเป็นบล็อกอยู่ ถ้าแปรตรง ๆ Initialization ก็คือการเริ่มต้น Block ก็คือบล็อก ถ้านำมารวมกัน ก็น่าจะแปลว่า บล็อกเริ่มต้น แล้วใช้ยังไง มีประโยชน์ยังไง มาดูกันต่อไปครับ

A non-static initialization block

- จะ Executed แต่ละครั้งที่ Object ได้สร้างขึ้น - สามารถกำหนดค่าตัวแปรเริ่มต้นใน class ตัวอย่างโค้ด java
class TestNonStaticBlock {
	int a;
	static int b;

	{
		a = 0;
		b = 0;
		System.out.println("Running initialization block. Class TestNonStaticBlock");
	}
}

static initialization block

- จะใช้คำว่า static ในการนำหน้าบล็อก - จะ Executed ครั้งเดียว เมื่อ Class ถูกโหลดขึ้นมา - สามารถกำหนดค่าเริ่มต้นเฉพาะตัวแปรที่เป็น static เท่านั้น ตัวอย่างโค้ด java
class TestStaticBlock {
	int a;
	static int b;

	static {
		b = 0;
		System.out.println("Running initialization block. Class TestStaticBlock");
	}
}

A non-static initialization block VS static initialization block

ต่อไปมาลองดูความแตกต่างโดยการรันโค้ดดูครับ โค้ดตามด้านล่าง
package com.howtoclicks.example;

public class HowToclicksExample {
	public static void main(String[] args) {
		new TestNonStaticBlock();
		new TestNonStaticBlock();
		new TestStaticBlock();
		new TestStaticBlock();
	}
}

class TestNonStaticBlock {
	int a;
	static int b;

	{
		a = 0;
		b = 0;
		System.out.println("Running initialization block. Class TestNonStaticBlock");
	}
}

class TestStaticBlock {
	int a;
	static int b;

	static {
		b = 0;
		System.out.println("Running initialization block. Class TestStaticBlock");
	}
}
จากโค้ด ผลลัพธ์ที่ด้คือ Running initialization block. Class TestNonStaticBlock Running initialization block. Class TestNonStaticBlock Running initialization block. Class TestStaticBlock จากนั้นลองรันโค้ด
package com.howtoclicks.example;

public class HowToclicksExample {
	public static void main(String[] args) {
		System.out.println(TestNonStaticBlock.b);
		System.out.println(TestNonStaticBlock.b);
		System.out.println(TestStaticBlock.b);
		System.out.println(TestStaticBlock.b);
	}
}

class TestNonStaticBlock {
	int a;
	static int b;

	{
		a = 0;
		b = 0;
		System.out.println("Running initialization block. Class TestNonStaticBlock");
	}
}

class TestStaticBlock {
	int a;
	static int b;

	static {
		b = 0;
		System.out.println("Running initialization block. Class TestStaticBlock");
	}
}
ผลลัพธ์ที่ได้ คือ 0 0 Running initialization block. Class TestStaticBlock 0 0 จะเห็นว่า ที่เรารันโค้ดทดสอบแรก จะเกิดการ Execute บล็อก Running initialization block. Class TestNonStaticBlock สองครั้งเพราะเราสร้าง Object ขึ้นมาสองตัว จากนั้นเราก็ลองสร้าง Object กับ Class TestStaticBlock เหมือนกัน แต่จะแสดง Running initialization block. Class TestStaticBlock ขึ้นมาแค่ครั้งเดียว เพราะจะรันครั้งเดียวแค่ตอน Class ตอนโหลดเท่านั้น จากนั้นเราก็แสดงตัวอย่างที่สอง โดยการใช้ชื่อ Class แล้วตามด้วยตัวแปร จะเห็นว่าไม่มี Running initialization block. Class TestNonStaticBlock เลยเพราะเราไม่ได้สร้าง Object ดังนั้น block ที่ไม่ใช่ static จึงไม่ได้ Execute
comments

[1]
Adobe-PDF
976 D
[1]
Android
867 D
[40]
Animal
960 D
[1]
Apache
976 D
[2]
[10]
[2]
CMS-SMF
977 D
[1]
[3]
[1]
Database
976 D
[4]
[1]
Docker
872 D
[1]
Fruit
961 D
[2]
Git
763 D
[5]
HTML
763 D
[1]
Housework
965 D
[2]
IT
957 D
[2]
Imacro
977 D
[17]
Java
761 D
[1]
Java-Web
867 D
[1]
[2]
MQL5
789 D
[3]
MakeMoney
762 D
[18]
[1]
Maven
761 D
[1]
Mobile
974 D
[1]
NodeJs
763 D
[3]
Physics
758 D
[4]
PugJS
763 D
[2]
React
772 D
[132]
Science
959 D
[1]
[2]
Spring
761 D
[7]
[2]
[1]
[4]
Ubuntu
927 D
[1]
WebLogic
958 D
[4]