Initialization Block ในภาษา Java

| Java | 721 | 591 วันที่แล้ว
บทความนี้เรามาดูวิธีการใช้ 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
700 D
[1]
Android
591 D
[40]
Animal
684 D
[1]
Apache
700 D
[2]
[10]
[2]
CMS-SMF
701 D
[1]
[3]
[1]
Database
700 D
[4]
[1]
Docker
595 D
[1]
Fruit
684 D
[2]
Git
487 D
[5]
HTML
487 D
[1]
Housework
689 D
[2]
IT
681 D
[2]
Imacro
701 D
[17]
Java
484 D
[1]
Java-Web
591 D
[1]
[2]
MQL5
513 D
[3]
MakeMoney
486 D
[18]
[1]
Maven
485 D
[1]
Mobile
698 D
[1]
NodeJs
486 D
[3]
Physics
482 D
[4]
PugJS
486 D
[2]
React
496 D
[132]
Science
683 D
[1]
[2]
Spring
485 D
[7]
[2]
[1]
[4]
Ubuntu
650 D
[1]
WebLogic
682 D
[4]