Initialization Block ในภาษา Java

| Java | 818 | 649 วันที่แล้ว
บทความนี้เรามาดูวิธีการใช้ 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
758 D
[1]
Android
649 D
[40]
Animal
742 D
[1]
Apache
758 D
[2]
[10]
[2]
CMS-SMF
759 D
[1]
[3]
[1]
Database
758 D
[4]
[1]
Docker
654 D
[1]
Fruit
742 D
[2]
Git
545 D
[5]
HTML
545 D
[1]
Housework
747 D
[2]
IT
739 D
[2]
Imacro
759 D
[17]
Java
542 D
[1]
Java-Web
649 D
[1]
[2]
MQL5
571 D
[3]
MakeMoney
544 D
[18]
[1]
Maven
543 D
[1]
Mobile
756 D
[1]
NodeJs
544 D
[3]
Physics
540 D
[4]
PugJS
544 D
[2]
React
554 D
[132]
Science
741 D
[1]
[2]
Spring
543 D
[7]
[2]
[1]
[4]
Ubuntu
709 D
[1]
WebLogic
740 D
[4]