Bài 2.3. Các biến trong Java
Nội dung bài học
- Định nghĩa về biến trong lập trình Java
- Cú pháp khai báo biến
- Khởi tạo giá trị cho biến
- Gán giá trị cho biến
- Hằng số
- Các từ khóa
- Nhập dữ liệu cho biến
- Xuất dữ liệu ra màn hình
Khái niệm và đặc điểm
- Biến là tên được đặt cho vùng nhớ dùng để lưu trữ dữ liệu tạm thời nhằm phục vụ các hoạt động của chương trình.
- Biến sẽ bị hủy khi chương trình kết thúc để thu hồi bộ nhớ RAM cấp phát cho các chương trình khác.
- Biến được cấp phát bộ nhớ trong RAM, khi chương trình hoạt động, chương trình được nạp vào RAM. Khi nó bị hủy đi thì nó sẽ bị xóa khỏi RAM máy tính, điện thoại…
- Biến được chia thành các nhóm chính:
- Biến cục bộ: biến được khai báo nội bộ trong một hàm, một khối code nào đó.
- Biến của lớp: là các trường, các thuộc tính của lớp. Chi tiết ta sẽ tìm hiểu loại biến này trong chương hướng đối tượng.
- Hằng số là các biến chỉ được gán giá trị duy nhất 1 lần sau đó KHÔNG ĐỔI trong toàn bộ thời gian mà chương trình tồn tại.
Cú pháp khai báo biến
- Cú pháp tổng quát: kiểu danh_sách_biến;
- Trong đó:
- Kiểu là các kiểu dữ liệu hợp lệ trong ngôn ngữ Java, gồm các kiểu nguyên thủy và kiểu tham chiếu như int, float, bool hay các class, interface.
- Danh sách biến có thể gồm 1 hoặc nhiều biến, nếu có nhiều biến thì các biến sẽ phân tách nhau bởi dấu phẩy.
- Tên biến thường là danh từ hoặc cụm danh từ đặt tên sao cho tự bản thân biến mang ý nghĩa mà nó mô tả.
- Tên biến không trùng với các từ khóa và các từ dành riêng trong Java.
- Tên biến luôn bắt đầu bằng chữ cái thường, sau đó có thể là chữ cái, chữ số, dấu gạch dưới. Không bao giờ bắt đầu tên biến bằng một kí tự khác chữ cái thường.
- Nếu tên biến có nhiều từ cấu thành thì viết liền nhau và viết hoa chữ cái đầu từ.
- Tên biến phân biệt chữ hoa chữ thường. Tức là age khác với Age và khác aGE.
- Luôn kết thúc câu lệnh khai báo bằng 1 dấu chấm phẩy.
- Khuyến nghị khai báo mỗi biến trên 1 dòng.
- Từ phiên bản Java 9 ta có thể sử dụng keyword var để khai báo các biến cục bộ. Cú pháp:
var variableName = value;
- Java sẽ tự động gắn kiểu cho biến dựa vào giá trị value ở phía bên phải dấu bằng ta gán cho biến.
- Trong cú pháp khai báo biến với keyword var, bắt buộc phải gán giá trị cho biến ngay khi khai báo. Nếu không ta sẽ bị lỗi.
- Các giá trị của kiểu dữ liệu ta đã nói ở bài học 2.2. Bạn có thể xem lại. Sau đây là một số ví dụ:
var age = 20; // biến age kiểu int, nhận giá trị ban đầu là 20
var pi = 3.14; // biến pi có kiểu dữ liệu là double với giá trị ban đầu là 3.14
var letter = 'A'; // biến letter có kiểu dữ liệu là char, giá trị ban đầu là kí tự A hoa.
- Ví dụ:
int age; // tuổi
float avgGrade; // điểm TB
double interestRate; // lãi suất
long ballance; // số dư
String fullName; // họ tên đầy đủ
String address; // địa chỉ
// sau đây là các biến không hợp lệ:
int 5year; // tên bắt đầu bởi số
float my bonus; // trong tên có dấu cách
double max-volume; // trong tên có dấu -
Khởi tạo giá trị cho biến
- Mọi biến trong Java phải khai báo trước khi nó có thể được sử dụng
- Trong quá trình khai báo biến mà ta gán cho biến 1 giá trị ban đầu cùng kiểu thì ta gọi là khởi tạo giá trị cho biến
- Cú pháp tổng quát: kiểu tên_biến = giá_trị;
- Trong đó:
- Kiểu là các kiểu dữ liệu hợp lệ trong ngôn ngữ Java như int, float, boolean…
- Tên biến đặt theo quy tắc đặt tên biến
- Dấu = gọi là toán tử gán
- Giá trị là các giá trị hợp lệ cùng kiểu với kiểu của biến
- Ví dụ:
int age = 20; // tuổi
String fullName = ""; // họ tên
double interestRate = 0.0; // lãi suất
String address = "Hà Nội"; // địa chỉ
long balance = 15_600_000; // số dư
// các khởi tạo biến KHÔNG hợp lệ:
int year = "1500"; // sai kiểu dữ liệu
float gpa = 3.25; // sai kiểu dữ liệu
String email = 12345; // sai kiểu dữ liệu
- Cú pháp khởi tạo giá trị cho biến luôn kèm theo kiểu của biến ở đầu
Gán giá trị cho biến
- Khi ta đã khai báo biến, sau đó mới cung cấp giá trị cùng kiểu cho các biến đó thì ta gọi cú pháp này là gán giá trị cho biến
- Cú pháp tổng quát: tên_biến = giá_trị;
- Trong đó:
- Tên biến là các tên biến đã có trước đó
- Dấu = gọi là toán tử gán, cả câu lệnh gồm hai vế trái và phải + toán tử gán gọi là gán giá trị cho biến
- Giá trị là các giá trị cùng kiểu với kiểu của biến
- Ví dụ:
int age = 0; // khai báo và khởi tạo tuổi bằng 0
float avgGrade = 0.0f; // khai báo và khởi tạo điểm TB = 0.0
double interestRate; // lãi suất
age = 20; // gán giá trị 20 cho biến age
avgGrade = 3.25f; // gán giá trị 3.25 cho điểm TB
interestRate = 5.25; // gán giá trị cho lãi suất
Hằng số
- Hằng số là các biến mà giá trị của nó đã biết trước, không có nhu cầu thay đổi và không thể thay đổi kể từ sau khi được gán giá trị
- Cú pháp tổng quát: final kiểu TÊN_HẰNG_SỐ = giá_trị;
- Trong đó:
- final là một từ khóa mặc định
- Kiểu là bất kì kiều hợp lệ nào trong Java
- Tên hằng số luôn viết hoa hoàn toàn, mang ý nghĩa nào đó. Nếu tên có nhiều từ cấu thành thì phân tách nhau bởi dấu gạch dưới.
- Mọi hằng số không bắt buộc phải gán giá trị ngay khi khai báo nhưng sau khi đã gán giá trị lần đầu tiên thì giá trị của hằng số không thể thay đổi hoặc là chương trình sẽ báo lỗi.
- Ví dụ hằng số:
final double PI = 3.141592653589793; // số PI
final double E = 2.718281828459; // số E
final int MAX_VALUE;
MAX_VALUE = 100; // gán giá trị 100 cho hằng số MAX_VALUE
MAX_VALUE = 500; // error! giá trị của hằng số không thể thay đổi
final String MONDAY = "MONDAY"; // ok
MONDAY = "FRIDAY"; // error!
- Ta có thể khai báo hằng số trước rồi gán giá trị sau:
final String SEASON;
SEASON = "Spring"; // ok
- Ví dụ sử dụng hằng số để tính chu vi đường tròn:
public class Lesson23 {
public static void main(String[] args) {
final double PI = 3.141592653;
float r = 235.6f;
System.out.println("Chu vi đường tròn r = " + r + " là: " + (2 * PI * r));
}
}
// kết quả:
// Chu vi đường tròn r = 235.6 là: 1480.3184964431198
Các từ khóa
- Từ khóa, từ dành riêng là các từ được gán sẵn 1 chức năng cụ thể nào đó và chỉ sử dụng với mục đích thực hiện chức năng đó mà thôi.
- Các từ khóa và từ dành riêng luôn viết thường hoàn toàn
- Sau đây là các từ khóa và từ dành riêng trong Java. Khi khai báo biến mà thấy tên biến in đậm lên hoặc có màu khác thường thì đồng nghĩa với việc tên biến đã vi phạm vào các từ khóa, từ dành riêng.
| abstract | continue | for | new | switch | assert |
| if | package | synchronized | boolean | do | goto |
| this | break | double | implements | protected | throw |
| else | import | public | throws | case | enum |
| return | transient | catch | extends | int | short |
| char | final | interface | static | void | class |
| long | strictfp | volatile | const | float | native |
| while | default | private | byte | instanceof | super |
| try | finally | _ | const | goto |
- Dấu gạch dưới _ là một từ dành riêng sẽ được sử dụng trong tương lai
- Hai giá trị true, false không phải từ khóa nhưng nó là giá trị của riêng kiểu boolean cũng không được phép sử dụng làm tên biến
- Biểu diễn giá trị null cũng không được dùng làm tên biến
- var, yiel cũng không được dùng làm tên biến
- Các từ khóa bị giới hạn khác là: open, module, requires, transitive, exports, opens, to, uses, provides, with
Nhập dữ liệu cho biến
- Để nhập dữ liệu vào từ bàn phím và gán cho các biến, ta sử dụng đối tượng của lớp Scanner:
Scanner input = new Scanner(System.in); - in là chuẩn đầu vào dữ liệu đọc từ bàn phím
- Để đọc dữ liệu kiểu nào ta dùng phương thức nextX trong đó X là tên kiểu của biến cần lấy giá trị. Cụ thể cho trong bảng sau:
|
Kiểu biến |
Phương thức tương ứng |
Ví dụ |
| char | next().charAt(0) | char c = input.next().charAt(0); |
| byte | nextByte() | byte b = input.nextByte(); |
| short | nextShort() | short s = input.nextShort(); |
| int | nextInt() | int age = input.nextInt(); |
| long | nextLong() | long longNumber = input.nextLong(); |
| float | nextFloat() | float avgGrade = input.nextFloat(); |
| double | nextDouble() | double interestRate = input.nextDouble(); |
| boolean | nextBoolean() | boolean isPassed = input.nextBoolean(); |
| String | Đọc 1 từ: next()
Đọc cả dòng: nextLine() |
String name = input.next();
String fullName = input.nextLine(); |
- Thường đưa ra lời nhắc cho người dùng nhập đúng dữ liệu của kiểu ta muốn nhận vào.
- Khi đọc vào 1 từ hoặc các giá trị khác, việc đọc sẽ dừng khi gặp khoảng trắng như dấu cách, dấu tab, hoặc khi bạn ấn enter xuống dòng(dấu hiệu kết thúc dòng).
- Ví dụ đọc vào một kí tự:
import java.util.Scanner;
public class Lesson23 {
public static void main(String[] args) {
var scanner = new Scanner(System.in);
// Nhập vào một kí tự đơn
char c;
System.out.println("Nhập vào một kí tự: ");
c = scanner.next().charAt(0);
System.out.println("Kí tự bạn vừa nhập là: " + c);
}
Nhập vào một kí tự:
H
Kí tự bạn vừa nhập là: H
- Ví dụ đọc vào các loại dữ liệu khác:
import java.util.Scanner;
public class Lesson23 {
public static void main(String[] args) {
var scanner = new Scanner(System.in); // biến nhập dữ liệu từ bàn phím
// nhập vào một giá trị kiểu khác
System.out.println("Nhập tuổi: ");
var age = scanner.nextInt();
scanner.nextLine();
System.out.println("Họ và tên: ");
var fullName = scanner.nextLine();
System.out.println("Mức lương: ");
var salary = scanner.nextLong();
// hiển thị ra màn hình:
System.out.println("Họ và tên: " + fullName);
System.out.println("Tuổi: " + age);
System.out.println("Mức lương: " + salary);
}
}
Nhập tuổi:
25
Họ và tên:
Lê Hoàng Nam
Mức lương:
65200000
Họ và tên: Lê Hoàng Nam
Tuổi: 25
Mức lương: 65200000
Xuất dữ liệu ra màn hình
- Để xuất dữ liệu trong các biến ra màn hình ta dùng phương thức print, printf hoặc println của System.out
- out là chuẩn đầu ra dữ liệu mặc định của Java – màn hình console
- Cú pháp để thực hiện việc xuất dữ liệu ra với công cụ IntelliJ như sau:
| Phím tắt | Phương thức | Ý nghĩa sử dụng |
| sout+Tab | System.out.println(); | In ra nội dung cho trước sau đó đưa con trỏ chuột xuống đầu dòng kế tiếp |
| Soutf+Tab | System.out.printf(); | In ra nội dung cho trước theo định dạng cụ thể tương ứng giống như trong ngôn ngữ C |
| System.out.print(); | In ra nội dung cho trước và sau đó con trỏ chuột ở nguyên vị trí kết thúc không xuống dòng mới |
- Một số kí tự định dạng với printf:
| Kiểu |
Kí tự chuyển đổi định dạng |
| Char | %c |
| String | %s |
| Int, byte, short, long | %d |
| Float, double | %f |
- Ví dụ áp dụng:
import java.text.DecimalFormat;
import java.util.Scanner;
public class Lesson23 {
public static void main(String[] args) {
var scanner = new Scanner(System.in); // biến nhập dữ liệu từ bàn phím
System.out.println("Họ và tên: ");
var fullName = scanner.nextLine();
System.out.println("Điểm gpa: ");
var gpa = scanner.nextFloat();
System.out.println("Mức lương: ");
var salary = scanner.nextDouble();
// hiển thị ra màn hình:
System.out.printf("Họ và tên: %-30s\n", fullName);
System.out.printf("Điểm GPA: %-10.2f\n", gpa);
// định dạng giá trị số phân tách bởi dấu phẩy ở phần nghìn, lẻ thập phân
var formatter = new DecimalFormat("#,###.##");
System.out.printf("Mức lương: %sđ\n", formatter.format(salary));
}
}
- Kết quả:
Họ và tên:
Lê Công Nam
Điểm gpa:
3.2564
Mức lương:
12560000.265
Họ và tên: Lê Công Nam
Điểm GPA: 3.26
Mức lương: 12,560,000.27đ
