1. Biến cục bộ (Local Variable)
Một biến được khai báo bên trong thân phương thức(method) được gọi là local variable. Bạn chỉ có thể sử dụng biến này trong phương thức đó và các phương thức khác trong lớp thậm chí không biết rằng biến này tồn tại.
- Phạm vi: Được khai báo trong một phương thức, constructor, hoặc khối lệnh.
- Vòng đời: Tồn tại trong suốt quá trình thực thi phương thức hoặc khối lệnh đó. Khi phương thức kết thúc, biến cục bộ sẽ bị hủy.
- Khởi tạo: Cần được khởi tạo trước khi sử dụng, vì Java không tự động khởi tạo biến cục bộ.
public class App {
public void printName() {
String localVar = "Tây Java"; // Biến cục bộ
System.out.println(localVar);
}
}
2. Biến instance (Instance Variable)
Một biến được khai báo bên trong class nhưng bên ngoài phương thức được gọi là instance variable. Biến này không được khai báo là static. Biến này được gọi là instance variable vì giá trị của biến này là cụ thể cho từng instance cụ thể và không được chia sẻ giữa các instance.
- Phạm vi: Được khai báo bên trong một lớp nhưng bên ngoài bất kỳ phương thức, constructor, hoặc khối lệnh nào.
- Vòng đời: Gắn liền với đối tượng (instance) của lớp. Khi đối tượng bị hủy (garbage collected), biến instance cũng sẽ bị hủy theo.
- Khởi tạo: Mặc định sẽ được khởi tạo giá trị nếu không được khởi tạo (ví dụ: null cho đối tượng, 0 cho số nguyên, false cho kiểu boolean).
public class App { int instanceVar; // Biến instance (thuộc đối tượng) public void printName() { String localVar = "Tây Java"; // Biến cục bộ System.out.println(localVar); } }
3. Biến tĩnh (Static Variable)
Một biến được khai báo là static được gọi là static variable. Biến này không thể là local variable. Bạn có thể tạo một bản sao duy nhất của static variable và chia sẻ biến này giữa tất cả các method của class. Việc cấp phát bộ nhớ cho các biến tĩnh chỉ diễn ra một lần khi lớp được tải trong bộ nhớ.
- Phạm vi: Được khai báo với từ khóa static và tồn tại trên phạm vi lớp thay vì phạm vi đối tượng. Tức là biến này được chia sẻ giữa tất cả các đối tượng của lớp đó.
- Vòng đời: Tồn tại trong suốt vòng đời của lớp và chỉ được khởi tạo một lần khi lớp được tải vào bộ nhớ (class loading).
- Khởi tạo: Tương tự như biến instance, biến static được khởi tạo giá trị mặc định nếu không được khởi tạo.
public class App { int instanceVar; // Biến instance (thuộc đối tượng) static int staticVar = 100; // Biến static (thuộc lớp) public void printName() { String localVar = "Tây Java"; // Biến cục bộ System.out.println(localVar); } }
4. Biến hằng số (Constant Variable)
- Phạm vi: Là biến có giá trị cố định và không thể thay đổi sau khi đã khởi tạo. Được khai báo với từ khóa final.
- Vòng đời: Giống như biến instance hoặc biến static tùy thuộc vào cách khai báo.
- Khởi tạo: Cần được khởi tạo khi khai báo hoặc trong constructor nếu là biến instance final.
public class App {
int instanceVar; // Biến instance (thuộc đối tượng)
static int staticVar = 100; // Biến static (thuộc lớp)
final double CONSTANT_VAR = 3.14; // Biến hằng số
public void printName() {
String localVar = "Tây Java"; // Biến cục bộ
System.out.println(localVar);
}
}
5. Biến tham chiếu (Reference Variable)
- Phạm vi: Được sử dụng để tham chiếu đến các đối tượng (object) trong Java. Đây là các biến lưu trữ địa chỉ của đối tượng thay vì giá trị thực tế của nó.
- Vòng đời: Giống như biến cục bộ, instance hoặc static tùy thuộc vào nơi khai báo biến tham chiếu.
- Khởi tạo: Biến tham chiếu mặc định là null nếu không được khởi tạo.
public class App { int instanceVar; // Biến instance (thuộc đối tượng) static int staticVar = 100; // Biến static (thuộc lớp) final double CONSTANT_VAR = 3.14; // Biến hằng số String welcome = "Welcome to Java Programming!"; // Biến tham chiếu tới đối tượng String public void printName() { String localVar = "Tây Java"; // Biến cục bộ System.out.println(localVar); } public void display() { System.out.println(welcome); } }
6. Câu hỏi phỏng vấn Java variables
1. Biến trong Java là gì?
Trả lời:
Biến trong Java là tên được gán cho một vùng bộ nhớ nơi dữ liệu được lưu trữ. Biến có thể thay đổi giá trị trong suốt quá trình thực thi chương trình.
2. Các kiểu biến trong Java là gì?
Trả lời: Java có ba loại biến chính:
- Local Variables: Được khai báo bên trong một phương thức, constructor hoặc block. Biến cục bộ không có giá trị mặc định và phải được khởi tạo trước khi sử dụng.
- Instance Variables (Non-Static Fields): Được khai báo trong một lớp nhưng ngoài bất kỳ phương thức nào. Chúng có giá trị mặc định (null, 0, hoặc false).
- Class Variables (Static Fields): Được khai báo với từ khóa static trong một lớp nhưng ngoài các phương thức. Biến static được chia sẻ bởi tất cả các đối tượng của lớp đó.
3. Sự khác nhau giữa biến cục bộ và biến instance là gì?
Trả lời:
Biến cục bộ: Khai báo bên trong phương thức, nó không có giá trị mặc định và phải được khởi tạo trước khi sử dụng.
Biến instance: Khai báo trong lớp nhưng ngoài phương thức, nó có giá trị mặc định và thuộc về các đối tượng của lớp.
4. Static variable là gì? Khi nào sử dụng?
Trả lời:
Biến static là biến chung cho tất cả các đối tượng của một lớp. Chúng được khai báo với từ khóa static. Biến static hữu ích khi bạn muốn một giá trị được chia sẻ giữa tất cả các đối tượng của lớp. Ví dụ như biến đếm số lượng đối tượng đã được tạo ra.
5. Từ khóa final trong khai báo biến có nghĩa là gì?
Trả lời:
Khi biến được khai báo với từ khóa final giá trị của nó không thể thay đổi sau khi đã được khởi tạo và nó trở thành một hằng số.
6. Biến kiểu tham chiếu và biến kiểu nguyên thủy khác nhau như thế nào?
Trả lời:
- Biến kiểu nguyên thủy (Primitive): Lưu trữ trực tiếp giá trị của biến (int, float, boolean, v.v.).
- Biến kiểu tham chiếu (Reference): Lưu trữ tham chiếu đến một đối tượng trong bộ nhớ. Các kiểu này bao gồm String, Array, và các đối tượng do người dùng tự định nghĩa.
7. Tại sao nên sử dụng từ khóa transient cho biến trong Java?
Trả lời:
Từ khóa transient được sử dụng để bỏ qua không tuần tự hóa(Serializable) các biến khi đối tượng được tuần tự hóa. Khi đối tượng được tuần tự hóa các biến transient sẽ không được ghi vào luồng đầu ra.
8. Từ khóa volatile là gì và khi nào nên dùng?
Trả lời:
Từ khóa volatile được sử dụng để chỉ ra rằng giá trị của biến có thể bị thay đổi bởi các thread khác nhau. Nó đảm bảo rằng các thay đổi với biến sẽ được nhìn thấy ngay lập tức bởi các thread khác.
9. Làm thế nào để tạo một biến hằng trong Java?
Trả lời:
Sử dụng từ khóa final để khai báo một biến hằng. Ví dụ: final int MAX_VALUE = 100;. Khi giá trị của biến được gán, nó không thể thay đổi.
10. Tại sao biến instance không thể sử dụng bên trong phương thức static?
Trả lời:
Biến instance thuộc về đối tượng cụ thể, trong khi phương thức static là của lớp. Phương thức static không có quyền truy cập trực tiếp vào các biến instance vì nó không được gọi trên một đối tượng cụ thể nào.