Initialization Block ในภาษา Java

| Java | 1028 | 773 วันที่แล้ว
บทความนี้เรามาดูวิธีการใช้ 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
882 D
[1]
Android
773 D
[40]
Animal
866 D
[1]
Apache
882 D
[2]
[10]
[2]
CMS-SMF
883 D
[1]
[3]
[1]
Database
882 D
[4]
[1]
Docker
778 D
[1]
Fruit
866 D
[2]
Git
669 D
[5]
HTML
669 D
[1]
Housework
871 D
[2]
IT
863 D
[2]
Imacro
883 D
[17]
Java
666 D
[1]
Java-Web
773 D
[1]
[2]
MQL5
695 D
[3]
MakeMoney
668 D
[18]
[1]
Maven
667 D
[1]
Mobile
880 D
[1]
NodeJs
668 D
[3]
Physics
664 D
[4]
PugJS
668 D
[2]
React
678 D
[132]
Science
865 D
[1]
[2]
Spring
667 D
[7]
[2]
[1]
[4]
Ubuntu
832 D
[1]
WebLogic
864 D
[4]