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:
Keywords | Description |
---|---|
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. |
assert | Kiểm tra điều kiện là đúng hay sai (Thường sử dụng trong Unit Test ) |
boolean | Kiểu dữ liệu logic, chỉ nhận một trong hai giá trị true hoặc false |
break | Sử dụng để thoát khỏi vòng lặp hoặc sử dụng trong switch case |
byte | Kiểu dữ liệu có thể lưu trữ các số nguyên từ -128 đến 127 |
case | Sử dụng với câu lệnh switch , đánh dấu một khối lệnh |
catch | Dù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 |
char | Kiểu ký tự dùng để biểu diễn các ký tự trong bộ mã Unicode |
class | Dùng để định nghĩa một class |
continue | Sử dụng để tiếp tục một vòng lặp tại điều kiện đã được xác định |
const | Sử 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 |
default | Mặc định được thực thi nếu không có case nào trả về true . Được sử dụng trong switch case |
do | Sử dụng cùng với while để tạo vòng lặp do while |
double | Là kiểu dữ liệu lưu trữ các số thực |
else | Sử dụng trong câu điều kiện. Rẽ nhánh điều kiện ngược với if |
enum | Kiểu dữ liệu đặc biệt, đại diện cho hằng số cố định |
exports | Exports một package với một module |
extends | Kế 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) |
final | Dù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 |
float | Là kiểu dữ liệu lưu trữ các số thực |
for | Dùng để tạo vòng lặp for |
if | Sử dụng để tạo câu điều kiện |
implements | implements một interface |
import | Sử dụng để import package, class hoặc interface |
instanceof | Kiể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 |
int | Kiểu dữ liệu dùng để lưu trữ các số nguyên từ -2147483648 to 2147483647 |
interface | Sử dụng để định nghĩa interface |
long | Kiểu dữ liệu dùng để lưu trữ các số nguyên từ -263 đến 263-1 |
module | Khai báo một module |
native | Sử dụng để chỉ định một hàm được triển khai bởi các ngôn ngữ khác |
new | Tạo một đối tượng mới |
package | Khai báo một package |
private | Phạ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 |
protected | Phạ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 |
public | Phạ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 |
requires | Chỉ định các thư viện bắt buộc bên trong một module |
return | Sử dụng để trả về một giá trị từ một phương thức |
short | Kiể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 |
strictft | Hạ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 |
switch | Sử dụng trong mệnh đề switch case |
synchronized | Chỉ 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) |
this | Tham chiếu đến đối tượng hiện tại trong một phương thức hoặc hàm tạo |
throw | Ném ra ngoại lệ |
throws | Khai báo một ngoại lệ |
transient | Chỉ đị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ữ |
try | Dùng để tạo mệnh đề try catch |
var | Khai báo biến |
void | Cho biết một phương thức không có giá trị trả về |
volatile | Bá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) |
while | Tạ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