Open BaymaxSky opened 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:
Đượ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
}
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
}
}
Đượ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
}
}
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
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.