BaymaxSky / core-java-world

0 stars 0 forks source link

Có bao nhiêu cách để khởi tạo giá trị cho một field trong class #1

Open BaymaxSky opened 1 year ago

BaymaxSky commented 1 year ago

Có bao nhiêu cách để khởi tạo giá trị cho một field trong class và thứ tự ưu tiên

what are static blocks and static initializers in Java

Static blocks or static initializers are used to initialize static fields in java. we declare static blocks when we want to intialize static fields in our class. Static blocks gets executed exactly once when the class is loaded . Static blocks are executed even before the constructors are executed.

binzunu1909 commented 1 year ago

Có 3 cách để khởi tạo giá trị cho một field trong class và theo thứ tự ưu tiên như sau:

1. Khởi tạo trực tiếp

Được ưu tiên cao nhất do cung cấp giá trị cho field ngay khi khai báo nó trong class để làm code rõ ràng và dễ đọc.

public class MyClass {
    int myField = 10; // Sử dụng giá trị 10 được khởi tạo trực tiếp
}

2. Khởi tạo thông qua constructor

Sử dụng constructor để khởi tạo giá trị cho field thông qua tham số truyền vào. Đảm bảo đối tượng có thể có các giá trị khác nhau tùy thuộc vào các tham số truyền vào constructor.

public class MyClass {
    int myField;

    public MyClass(int value) {
        myField = value; // Sử dụng giá trị được truyền vào constructor
    }
}

3. Khởi tạo thông qua phương thức setter

Được ưu tiên cuối cùng vì thích hợp khi muốn thay đổi giá trị của field sau khi đã tạo đối tượng, nhưng làm cho code phức tạp hơn và khó đọc hơn.

public class MyClass {
    int myField;

    public void setMyField(int value) {
        myField = value; // Sử dụng giá trị được gán thông qua phương thức setter
    }
}
jacobvn84 commented 1 year ago

Order of execution of Initialization blocks and Constructors in Java

In a Java program, operations can be performed on methods, constructors and initialization blocks. Instance Initialization Blocks : IIB are used to initialize instance variables. IIBs are executed before constructors. They run each time when object of the class is created. Initializer block : contains the code that is always executed whenever an instance is created. It is used to declare/initialize the common part of various constructors of a class. Constructors : are used to initialize the object’s state. Like methods, a constructor also contains collection of statements(i.e. instructions) that are executed at time of Object creation.

Order of execution of Initialization blocks and constructor in Java

Static initialization blocks will run whenever the class is loaded first time in JVM Initialization blocks run in the same order in which they appear in the program. Instance Initialization blocks are executed whenever the class is initialized and before constructors are invoked. They are typically placed above the constructors within braces.

// Java code to illustrate order of
// execution of constructors, static
// and initialization blocks
class GFG {

    GFG(int x)
    {
        System.out.println("ONE argument constructor");
    }

    GFG()
    {
        System.out.println("No argument constructor");
    }

    static
    {
        System.out.println("1st static init");
    }

    {
        System.out.println("1st instance init");
    }

    {
        System.out.println("2nd instance init");
    }

    static
    {
        System.out.println("2nd static init");
    }

    public static void main(String[] args)
    {
        new GFG();
        new GFG(8);
    }
}

Output

1st static init 2nd static init 1st instance init 2nd instance init No argument constructor 1st instance init 2nd instance init ONE argument constructor

Note : If there are two or more static/initializer blocks then they are executed in the order in which they appear in the source code.

Nguồn