Initialization Block ในภาษา Java

| Java | 974 | 739 วันที่แล้ว
บทความนี้เรามาดูวิธีการใช้ 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
848 D
[1]
Android
739 D
[40]
Animal
832 D
[1]
Apache
847 D
[2]
[10]
[2]
CMS-SMF
849 D
[1]
[3]
[1]
Database
847 D
[4]
[1]
Docker
743 D
[1]
Fruit
832 D
[2]
Git
635 D
[5]
HTML
635 D
[1]
Housework
837 D
[2]
IT
829 D
[2]
Imacro
849 D
[17]
Java
632 D
[1]
Java-Web
739 D
[1]
[2]
MQL5
661 D
[3]
MakeMoney
634 D
[18]
[1]
Maven
633 D
[1]
Mobile
846 D
[1]
NodeJs
634 D
[3]
Physics
630 D
[4]
PugJS
634 D
[2]
React
644 D
[132]
Science
831 D
[1]
[2]
Spring
633 D
[7]
[2]
[1]
[4]
Ubuntu
798 D
[1]
WebLogic
830 D
[4]