[Java Cơ Bản] Bài 2: Kiểu Dữ Liệu, Toán Tử và Cấu Trúc Điều Khiển (If, Switch)
Chào các bạn! Nếu ở bài 1 chúng ta đã biết cách cấu hình môi trường và chạy thử chương trình "Hello World", thì hôm nay chúng ta sẽ đi sâu hơn vào nội tại của ngôn ngữ Java. Trong bài này, chúng ta sẽ cùng tìm hiểu về các kiểu dữ liệu, cách tính toán với toán tử, và cách kiểm soát luồng chạy của chương trình thông qua các câu lệnh điều kiện.
1. Kiểu dữ liệu nguyên thủy (Primitive Types)
Java được kế thừa từ ngôn ngữ C, do đó nó vẫn giữ lại các kiểu dữ liệu nguyên thủy. Trong Java, có tổng cộng 8 kiểu dữ liệu nguyên thủy được chia thành các nhóm chính:

- Kiểu số nguyên:
byte: Kích thước 8 bit, lưu trữ từ -2^7 đến 2^7-1, mặc định là 0.
short: Kích thước 16 bit, lưu trữ từ -2^15 đến 2^15-1, mặc định là 0.
int: Kích thước 32 bit, lưu trữ từ -2^31 đến 2^31-1, mặc định là 0.
long: Kích thước 64 bit, lưu trữ rất lớn, mặc định là 0L.
- Kiểu số thực (dấu phẩy động):
float: Kích thước 32 bit, mặc định là 0.0F.
double: Kích thước 64 bit, mặc định là 0.0.
- Kiểu ký tự:
char, kích thước 16 bit, lưu trữ các ký tự Unicode. - Kiểu logic:
boolean, kích thước 1 bit, chỉ nhận 2 giá trịtruehoặcfalse, mặc định làfalse.

2. Ép kiểu (Type Casting)
Trong quá trình tính toán, đôi khi chúng ta cần chuyển đổi qua lại giữa các kiểu dữ liệu.
- Ép kiểu tự động (Ngầm định): Xảy ra tự động theo chiều tăng dần kích thước lưu trữ:
byte->short->int->long->float->double. Ví dụ: gán biến int cho biến double. - Ép kiểu tường minh: Khi muốn chuyển từ kiểu lớn sang kiểu nhỏ hơn, ta phải ép kiểu thủ công. Phần thập phân sẽ bị bỏ đi nếu ép từ số thực sang số nguyên. Ví dụ:
a = (int)b;


3. Lớp Bao (Wrapper Class) và Xử lý chuỗi
Rất nhiều hàm trong Java chỉ làm việc với đối tượng (Object) chứ không làm việc với các kiểu nguyên thủy. Vì vậy, Java cung cấp các "Lớp bao" tương ứng:
Byte, Short, Integer, Long, Float, Double, Character, Boolean

Quá trình chuyển đổi qua lại giữa kiểu nguyên thủy và Lớp bao được gọi là:
Boxing: Tạo đối tượng từ lớp bao để bọc giá trị nguyên thủy (VD:Integer a = Integer.valueOf(5);)

Unboxing: Lấy giá trị nguyên thủy ra khỏi đối tượng lớp bao (VD:int b = a.intValue();).

Chuyển chuỗi thành số:
Để biến đổi một chuỗi văn bản thành dạng số, ta dùng các phương thức của lớp bao như:
Integer.parseInt("3"), Double.parseDouble(String), v.v..

Kiểm soát lỗi với Try...Catch:
Khi dùng các hàm parse hoặc hàm nhập liệu như scanner.nextInt(), nếu người dùng nhập chữ cái thay vì số, chương trình sẽ văng lỗi. Để xử lý, ta đặt đoạn mã đó vào khối try...catch để kiểm soát ngoại lệ và thông báo lỗi thân thiện hơn.

4. Toán Tử & Biểu Thức
Kết hợp các biến và toán tử, ta tạo thành các biểu thức trả về một giá trị cụ thể.

- Toán tử số học: + (cộng), - (trừ), * (nhân), / (chia lấy nguyên), % (chia lấy dư), ++ (tăng 1 đơn vị), -- (giảm 1 đơn vị).

- Toán tử so sánh: == (bằng), != (khác), >, <, >=, <=.

-
Toán tử logic: * &&: Trả về true khi tất cả biểu thức đều true.
-
||: Trả về true khi chỉ cần 1 biểu thức true
-
!: Phủ định biểu thức

-
-
Toán tử điều kiện (3 ngôi):
<điều kiện> ? <giá trị đúng> : <giá trị sai>. Nếu điều kiện true, biểu thức nhận giá trị đúng; ngược lại nhận giá trị sai.

6. Lệnh Switch - Case
Khi bạn có một biểu thức cần đối chiếu với nhiều giá trị cụ thể khác nhau, switch...case là một giải pháp thay thế code sạch và dễ nhìn hơn so với dùng quá nhiều if...else if.

Cú pháp hoạt động:
- Chương trình sẽ so sánh biểu thức với từng
case - Nếu khớp ở
casenào, khối lệnh của case đó sẽ chạy - Quan trọng: Phải luôn sử dụng từ khóa break; ở cuối mỗi
case. Nếu không cóbreak, chương trình sẽ tự động trôi xuống và chạy luôn các case tiếp theo bất chấp điều kiện. - Nhánh
defaultlà tùy chọn, sẽ được kích hoạt nếu không có case nào khớp.
7. Tổ chức chương trình cơ bản
Trong thực tế, người ta không viết dồn toàn bộ code vào phương thức main(). Để tái sử dụng và dễ quản lý, hãy chia nhỏ logic thành các phương thức độc lập.
Ví dụ, bạn có thể tạo một hệ thống Menu thực đơn trong hàm thucDon(), và từ hàm này gọi đến các hàm xử lý chuyên biệt như thucHienPhepCong() hay thucHienPhepTru() khi người dùng chọn số từ bàn phím.

Lời Kết
Bài học này tuy dài nhưng chứa đựng những yếu tố nền móng bắt buộc phải có để xây dựng mọi ứng dụng Java. Hãy thực hành thử cấu trúc if...else và switch...case bằng cách tự code một ứng dụng Menu tính toán máy tính cá nhân nhé. Chúc các bạn học tốt!
All rights reserved