Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ตัวแปร final สามารถกำหนดค่าเมื่อสร้างออบเจ็กต์ใน Java ได้หรือไม่

เมื่อประกาศตัวแปรเป็น final หลังจากกำหนดค่าแล้วจะแก้ไขไม่ได้ ต่างจาก instance variable ทั่วไป final variable ไม่มีค่า default จึง บังคับต้องกำหนดค่าตอนประกาศหรือใน constructor มิฉะนั้นจะเกิด compile-time error

ตัวอย่าง error: ไม่ได้กำหนดค่า

public class FinalExample {
    final int j; // Error: variable j might not have been initialized
    public static void main(String[] args){
        FinalExample obj = new FinalExample();
        System.out.println(obj.j);
    }
}

4 วิธีในการกำหนดค่า final variable

1. ตอนประกาศ (Inline Initialization)

public class FinalExample {
    final int j = 100;
    public static void main(String[] args){
        System.out.println(new FinalExample().j); // 100
    }
}

2. ใช้ final method

import java.util.Scanner;
public class FinalExample {
    final int num = getNum();
    public static final int getNum() {
        System.out.println("Enter the num value");
        return new Scanner(System.in).nextInt();
    }
    public static void main(String[] args){
        System.out.println(new FinalExample().num);
    }
}

3. ใช้ Constructor (พบบ่อยที่สุด)

public class FinalExample {
    final int num;
    public FinalExample(int num) {
        this.num = num; // ต้องกำหนดค่าในทุก constructor
    }
    public static void main(String[] args){
        System.out.println(new FinalExample(20).num); // 20
    }
}

4. ใช้ Instance Initialization Block

public class FinalExample {
    final int num;
    { // Instance initializer block
        num = 500;
    }
    public static void main(String[] args){
        System.out.println(new FinalExample().num); // 500
    }
}

ข้อสังเกตสำคัญ

  • final instance variable ต้องถูกกำหนดค่าใน ทุก constructor ของคลาส
  • final static variable ต้องกำหนดค่าตอนประกาศ หรือใน static initializer block
  • การใช้ constructor เป็นวิธีมาตรฐานและยืดหยุ่นที่สุด สามารถรับค่าจากภายนอกได้

สรุป

ได้ ตัวแปร final สามารถกำหนดค่าเมื่อสร้างออบเจ็กต์ผ่าน constructor (หรือ instance initializer block) ซึ่งเป็นวิธีที่พบบ่อยและแนะนำมากที่สุด