BIẾN TRONG JAVA

Biến Trong JAVA

Trong Java, biến là một liên kết tới một vị trí trên bộ nhớ (memory) để chứa dữ liệu. Có 3 kiểu biến trong java, bao gồm biến cục bộ (hay còn gọi là biến local), biến toàn cục (biến instance) và biến tĩnh(biến static).

1. Biến là gì

Biến là vùng nhớ dùng để lưu trữ các giá trị của chương trình. Mỗi biến gắn liền với một kiểu dữ liệu và một định danh duy nhất gọi là tên biến.

Cú pháp:

kieu_du_lieu ten_bien = gia_tri;

Ví dụ
int a, b, c; // declares three ints, a, b, and c.
int d = 3, e, f = 5; // declares three more ints, initializing
byte z = 22; // initializes z.
double pi = 3.14159; // declares an approximation of pi.
char x = ‘x’; // the variable x has the value ‘x’.

2. Quy tắc đặt tên biến

  • Tên phân biệt chữ HOA và chữ thường.

  • Tên biến chấp nhận các ký tự chữ cái, ký số, dấu _ và dấu $.

  • Tên biến phải bắt đầu bằng một chữ cái , một dấu _ hay dấu $. Không bắt đầu bằng ký tự số.

  • Tên biến không được trùng với các từ khóa.

  • Tên biến không có khoảng trắng trong tên.

Để code dễ đọc, dễ theo dõi người ta còn sử dụng quy tắc đặt tên biến sau (không bắt buộc):

  • Tên lớp: ký tự đầu tiên của một từ được viết hoa, các ký tự còn lại viết thường. Ví dụ: class Car, class Student, class InputStream, …
  • Tên biến, hằng, phương thức: ký tự đầu tiên viết thường, ký tự đầu tiên của từ thứ hai trở đi được viết hoa. Ví dụ: String ten, Date ngaySinh, int diemTrungBinh, …

Các từ khoá không dược sử dụng cho tên biến:

KeywordsDescription
abstractĐược sử dụng cho lớp và phương thức. Một lớp trừu tượng không thể sử dụng để tạo đối tượng mà phải thông qua một lớp kế thừa nó. Một phương thức trừu tượng chỉ có thể được sử dụng trong một lớp trừu tượng và nó không có phần thân. Phần thân được cung cấp bởi lớp con.
assertKiểm tra điều kiện là đúng hay sai (Thường sử dụng trong Unit Test)
booleanKiểu dữ liệu logic, chỉ nhận một trong hai giá trị true hoặc false
breakSử dụng để thoát khỏi vòng lặp hoặc sử dụng trong switch case
byteKiểu dữ liệu có thể lưu trữ các số nguyên từ -128 đến 127
caseSử dụng với câu lệnh switch, đánh dấu một khối lệnh
catchDùng để bắt ngoại lệ được tạo bởi khối try, sử dụng kèm với try để xử lý các ngoại lệ trong chương trình
charKiểu ký tự dùng để biểu diễn các ký tự trong bộ mã Unicode
classDùng để định nghĩa một class
continueSử dụng để tiếp tục một vòng lặp tại điều kiện đã được xác định
constSử dụng để xác định một hằng số. Tuy nhiên trong Java không sử dụng từ này mà sử dụng final
defaultMặc định được thực thi nếu không có case nào trả về true. Được sử dụng trong switch case
doSử dụng cùng với while để tạo vòng lặp do while
doubleLà kiểu dữ liệu lưu trữ các số thực
elseSử dụng trong câu điều kiện. Rẽ nhánh điều kiện ngược với if
enumKiểu dữ liệu đặc biệt, đại diện cho hằng số cố định
exportsExports một package với một module
extendsKế thừa một lớp (Chỉ ra rằng một lớp được kế thừa từ một lớp khác)
finalDùng để chỉ ra các biến, phương thức không thay đổi sau khi đã được định nghĩa. Những phương thức final không được kế thừa và override.
finallyĐược xử dụng với các ngoại lệ, khối finally luôn được thực thi dù có ngoại lệ sảy ra hay không
floatLà kiểu dữ liệu lưu trữ các số thực
forDùng để tạo vòng lặp for
ifSử dụng để tạo câu điều kiện
implementsimplements một interface
importSử dụng để import package, class hoặc interface
instanceofKiểm tra một đối tượng là một thể hiện của một lớp cụ thể hay một interface
intKiểu dữ liệu dùng để lưu trữ các số nguyên từ -2147483648 to 2147483647
interfaceSử dụng để định nghĩa interface
longKiểu dữ liệu dùng để lưu trữ các số nguyên từ -263 đến 263-1
moduleKhai báo một module
nativeSử dụng để chỉ định một hàm được triển khai bởi các ngôn ngữ khác
newTạo một đối tượng mới
packageKhai báo một package
privatePhạm vi truy cập sử dụng cho các biến, phương thức và constructor, làm cho chúng chỉ có thể được truy cập trong lớp đã khai báo
protectedPhạm vi truy cập sử dụng cho các biến, phương thức và constructor, làm cho chúng chỉ có thể được truy cập nếu trong cùng package hoặc thông qua tính kế thừa
publicPhạm vi truy cập có thể sử dụng cho lớp, biến, phương thức và constructor, làm cho chúng có thể được truy cập ở khắp mọi nơi trong chương trình
requiresChỉ định các thư viện bắt buộc bên trong một module
returnSử dụng để trả về một giá trị từ một phương thức
shortKiểu dữ liệu dùng để lưu trữ các số nguyên từ -32768 đến 32767
staticĐịnh nghĩa biến, phương thức của một lớp có thể được truy cập trực tiếp từ lớp mà không thông qua khởi tạo đối tượng của lớp
strictftHạn chế độ chính xác và làm tròn của các phép tính số thực
superĐề cập tới các đối tượng lớp cha
switchSử dụng trong mệnh đề switch case
synchronizedChỉ ra là ở mõi thời điểm chỉ có 1 đối tượng hay 1 lớp có thể truy nhập đến biến dữ liệu hoặc phương thức loại đó – Thường được sử dụng trong lập trình đa luồng (multithreading)
thisTham chiếu đến đối tượng hiện tại trong một phương thức hoặc hàm tạo
throwNém ra ngoại lệ
throwsKhai báo một ngoại lệ
transientChỉ định rằng nếu một đối tượng được Serialized, giá trị của biến sẽ không cần được lưu trữ
tryDùng để tạo mệnh đề try catch
varKhai báo biến
voidCho biết một phương thức không có giá trị trả về
volatileBáo cho chương trình dịch biết là biến khai báo volatile có thể thay đổi tùy ý trong các luồng (thread)
whileTạo vòng lặp while

II. Các loại biến và phạm vi

2.1 Biến cục bộ (local)

  • Biến local được khai báo trong các phương thức, hàm constructor hoặc trong các block.
  • Biến local được tạo bên trong các phương thức, constructor, block và sẽ bị phá hủy khi kết thúc các phương thức, constructor và block.
  • Không được sử dụng “access modifier” khi khai báo biến local.
  • Các biến local được lưu trên vùng nhớ stack của bộ nhớ.
  • Bạn cần khởi tạo giá trị mặc định cho biến local trước khi có thể sử dụng.
				
					public class Person {
  
  static String group;
  
  String name;
  
  {
    int age = 10;
    System.out.println(age);
  }
  public void show() {
    String website = "stackjava.com";
    System.out.println(website);
  }
  
  public static void main(String[] args) {
    int age = 15; // local variable
    System.out.println(age);
    
    Person person = new Person(); // local variable
  }
}
				
			

Các biến local là: biến age trong block code, biến website trong method show(), biến age và biến person trong hàm main

2.2 Biến global / biến instance (biến toàn cục)

  • Biến instance được khai báo trong một lớp(class), bên ngoài các phương thức, constructor và các block.
  • Biến instance được lưu trong bộ nhớ heap.
  • Biến instance được tạo khi một đối tượng được tạo bằng việc sử dụng từ khóa “new” và sẽ bị phá hủy khi đối tượng bị phá hủy.
  • Biến instance có thể được sử dụng bởi các phương thức, constructor, block, … Nhưng nó phải được sử dụng thông qua một đối tượng cụ thể.
  • Bạn được phép sử dụng “access modifier” khi khai báo biến instance, mặc định là “default”.
  • Biến instance có giá trị mặc định phụ thuộc vào kiểu dữ liệu của nó. Ví dụ nếu là kiểu int, short, byte thì giá trị mặc định là 0, kiểu double thì là 0.0d, … Vì vậy, bạn sẽ không cần khởi tạo giá trị cho biến instance trước khi sử dụng.
  • Bên trong class mà bạn khai báo biến instance, bạn có thể gọi nó trực tiếp bằng tên khi sử dụng ở khắp nơi bên trong class đó.
				
					public class Person {
  
  static String group; // static variable
  
  String name; // instance variable
  
  public void hello() {
    System.out.println(name);
  }
  
  public static void main(String[] args) {
    Person person = new Person();
    person.hello();
  }
}
				
			

Biến name là biến instance, giá trị mặc định của nó là null. Biến name được tạo mỗi khi ta tạo một thể hiện (một object) của class Person.

2.3 Biến static trong java

  • Biến static được khai báo trong một class với từ khóa “static”, phía bên ngoài các phương thức, constructor và block.
  • Sẽ chỉ có duy nhất một bản sao của các biến static được tạo ra, dù bạn tạo bao nhiêu đối tượng từ lớp tương ứng.
  • Biến static được lưu trữ trong bộ nhớ static riêng.
  • Biến static được tạo khi chương trình bắt đầu chạy và chỉ bị phá hủy khi chương trình dừng.
  • Giá trị mặc định của biến static phụ thuộc vào kiểu dữ liệu bạn khai báo tương tự biến instance.
  • Biến static được truy cập thông qua tên của class chứa nó, với cú pháp: TenClass.tenBien.
  • Trong class, các phương thức sử dụng biến static bằng cách gọi tên của nó khi phương thức đó cũng được khai báo với từ khóa “static”
				
					public class Person {
  
  static String group; // static variable
  
  String name; // instance variable
  
  public static void main(String[] args) {
    Person person = new Person();
    Person.group = "ASIA";
    System.out.println(Person.group);
  }
}
				
			

Biến group là biến static, ta có thể truy cập nó thông qua tên class: Person.group