GIỚI THIỆU JAVA
1. Java là gì
Chương trình nguồn ược soạn thảo bằng ngôn ngữ lập trình cần ược biên dịch
hoặc thông dịch thể chạy trên máy tính. Mỗi loại CPU cần có một trình biên dịch
riêng dịch chương trình nguồn. Để trình biên dịch, ta thường phải tốn nhiều thời
gian và công sức ể xây dựng.
Java một ngôn ngữ lập trình ược Sun Microsystems ưa ra o năm 1995.
Chương trình Java chạy nhanh, hiệu quả ộc lập thiết bị (chạy trên nhiều loại CPU)
không phụ thuộc vào hệ iều hành.
Chương trình Java vừa biên dịch vừa thông dịch. Trước tiên chương trình nguồn
ược biên dịch bằng công cụ JAVAC ể chuyển thành dạng bytecode. Sau ó chương trình
dạng bytecode ược thực thi trên mỗi loại máy nhờ chương trình thông dịch.
Java ược dùng rộng rãi ể viết các ứng dụng chạy ơn lẻ, ứng dụng mạng, ứng
dụng internet, ứng dụng iện thoại di ộng, …
2. Đặc iểm của Java
Java là ngôn ngữ mạnh mẽ.
Độc lập phần cứng và hệ iều hành
Chương trình ược viết tại một máy nhưng có thể chạy ược ở bất kỳ âu.
mức nguồn: Kiểu dữ liệu của Java nhất quán cho tất cả hệ iều hành
phần cứng khác nhau. Chương trình Java ược viết trên một y thể dịch chạy trên
các loại máy khác mà không cần phải viết lại.
mức nhị phân: Chương trình ã ược biên dịch thể chạy trên nền khác
không cần dịch lại. Tuy nhiên cần phần mềm máy ảo Java hoạt ộng nmột trình
thông dịch tại máy thực thi.
Trình biên dịch sẽ dịch chương trình C++ thành máy nhưng phụ thuộc vào
CPU. Do ó khi muốn chạy trên loại CPU khác, ta phải biên dịch lại chương trình.
Không giống như C hay C++, trình biên dịch của Java chuyển nguồn thành
dạng bytecode ộc lập với phần cứng mà có thể chạy trên bất kỳ CPU. Nhưng ể thực thi
chương trình dưới dạng bytecode, tại mỗi máy cần phải trình thông dịch của Java hay
còn gọi máy ảo Java. Máy ảo Java sẽ chuyển bytecode thành lệnh CPU thực
thi ược.
Java là ngôn ngữ lập trình hướng ối tượng.
Java cung cấp khả năng xây dựng ứng dụng phân tán chạy trên mạng.
Java hỗ trợ a luồng (multithread) ể thực thi các công việc ồng thời.
Java hỗ trợ khả năng liên kết ộng.
Java cung cấp khả năng truy xuất cơ sở dữ liệu.
Java có các lớp kiểm tra bảo mật.
Lớp ầu tiên: Dữ liệu các phương thức ược óng gói bên trong lớp. Chúng chỉ
ược truy xuất thông qua các giao diện lớp cung cấp. Java không hỗ trợ con trỏ vậy
không cho phép truy xuất bộ nhớ trực tiếp. Nó không cho phép truy xuất thông tin bên
ngoài mảng bằng kỹ thuật tràn. Nó cũng cung cấp kỹ thuật dọn rác trong bộ nhớ.
Lớp thứ hai: Trình biên dịch kiểm soát ể ảm bảo mã an toàn.
Lớp thứ ba: Trình thông dịch kiểm tra xem bytecode an toàn trước khi thực thi.
Lớp thứ tư: kiểm st việc nạp các lớp lên bộ nhớ giám sát việc vi phạm giới
hạn truy xuất trước khi nạp vào hệ thống.
3. Các loại ứng dụng
3.1. Console
Chương trình này ược chạy từ dấu nhắc lệnh và không sử dụng giao diện ồ họa.
3.2. Ứng dụng có giao diện ồ họa
Đây là ứng dụng thông dụng có giao diện cửa sổ, thực ơn, nút lệnh.
3.3. Ứng dụng cơ sở dữ liệu
Các ứng dụng sử dụng JDBC API ể kết nối tới cơ sở dữ liệu. Chúng có thể là
applet hay ứng dụng bình thường.
3.4. Applet
Đây là ứng dụng chạy trên Internet thông qua các trình duyệt hỗ trợ Java. Applet
ược nhúng bên trong trang Web. Khi trang Web ược hiển thị trong trình duyệt, Applet
sẽ ược nạp và ược thực thi.
3.5. Servlet
Ta thể viết chương trình API chạy trên máy chủ giám sát các quá trình tại
máy chủ trả lời các u cầu của máy trạm. Ứng dụng trên máy chủ ược gọi Servlet
hoặc Applet tại máy chủ.
4. Máy ảo Java
Máy ảo JVM (Java Virtual Machine) là một phần mềm dựa trên sở máy tính
ảo. Nó có tập các lệnh luận lý ể xác ịnh các hoạt ộng của máy tính. Nó ược như một hệ
iều hành thu nhỏ. Nó thiết lập các lớp trừu tượng cho: Phần cứng n dưới, hệ iều hành,
mã ã biên dịch.
Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không phụ
thuộc vào phần cứng cụ thể.
Máy ảo tạo ra một i trường bên trong thực thi các lệnh bằng cách nạp các tập
tin .class. Tập tin .class cho phép chương trình Java ược viết một lần nhưng chạy ở bất
kỳ âu miễn là có máy ảo.
5. Bộ công cụ phát triển JDK
JDK (Java Development Kit) bộ công cụ phát triển các ứng dụng Java do Sun
Microsystem ưa ra.
Sử dụng công cthông qua dòng lệnh Command prompt hoặc thông qua các IDE.
Ta có thể xem thư mục program files ể kiểm tra có thư mục jdk chưa. Nếu có thì
ã cài ặt công cụ jdk.
Tải và cài ặt JDK: https://www.oracle.com/java/technologies/
Nhấp vào chọn bản Java SE: chẳng hạn Java SE 20.01 (20.01 là phiên bản của
jdk) hoặc vào thẳng url sau
Nhấp chọn Windows, nhấp chọn bản .zip hoặc .exe hoặc .msi.
Nên tải bản .exe hoặc .msi lấy tập tin chạy cài ặt tộng. Nếu lấy bản .zip, ta
phải giải nén, rồi sao chép thủ công thư mục jdk-20.0.1 vào thư mục Program Files,
rồi phải cài ặt biến môi trường.
Sau khi cài ặt sẽ có thư mục chứa các công cụ của jdk:
C:\Program Files\Java\jdk-20.0.1
Ta có thể vào trang https://jdk.java.net ể tải phiên bản jdk mới nhất. Nhưng nó
bản cài ặt thủ công.
JDK có các công cụ sau mà có thể sử dụng thông qua dòng lệnh
Command prompt:
1) Trình biên dịch javac
javac [options] sourcecodename.java
2) Trình thông dịch java java [options] classname 3)
Trình dịch ngược javap javap [options] classname
4) Công cụ phát sinh tài liệu javadoc
javadoc [options] sourcecodename.java
5) Chương trình tìm lỗi (debug) jdb jdb
[options] sourcecodename.java hoặc
jdb -host -password [options] sourcecodename.java
6) Chương trình chạy applet
appletviewer [options] sourcecodename.java / url v.v,…
IDE: Môi trường phát triển tích hợp (Integrated Development Environment)
một ứng dụng tạo iều kiện ầy lập trình. cho phép soạn chương trình, biên dịch,
thông dịch (chạy) chương trình thông qua các lệnh trên giao diện cửa sổ. Các phần mềm
cung cấp IDE:
- Jcreator: Phần mềm Lập trình Java rất nhỏ gọn.
- Eclipse: Phần mềm Lập trình Java ược yêu thích.
- NetBeans: Phần mềm lập trình Java tốt.
- IntelliJ IDEA: Phần mềm lập trình Java phổ biến.
- v.v,…
Lưu ý: Các phần mềm này, a số ssụng jdk, nên trước khi cài ặt các phần mềm
này, cần phải cài ặt jdk trước.
Sử dụng Eclipse IDE for Java Developers - 2023-03 Tạo
project, sau ó tạo các thứ (lớp,…) trong project.
+ Tạo project: File \New \Java project
Đặt tên project, cũng là tên gói com.ht.mypackage1 (hoặc ơn giản là
mypackage1).
+ Tạo lớp: File \New \Class
Đặt tên lớp là MyClass1. Nếu chọn public static void main thì nó sẽ phát sinh sẵn
cấu trúc phương thức main. Nếu không chọn thì sau ó ta tự soạn cấu trúc phương thức
main.
CÁC THÀNH PHẦN CƠ BẢN CỦA CHƯƠNG TRÌNH
1. Cấu trúc của chương trình
Chương trình Java ược tổ chức thành các gói. Mỗi gói có thể có một hoặc nhiều
lớp.
Đối với chương trình Java nhỏ và ơn giản, chỉ gồm một gói. Chương trình
thường phương thức main. Đây phương thức chính thực hiện iều khiển
chương trình.
Sau ây là cấu trúc của chương trình Java chỉ có một gói và một lớp:
//Các chỉ thị import nếu có
class tênlớp
{
public static void main(String args[])
{
//Các phát biểu của chương trình
}
}
VD: Chương trình xuất ra màn hình câu thông báo "CHAO BAN".
class Chao
{
public static void main(String args[])
{
System.out.println("CHAO BAN");
}
}
Dòng ầu dùng từ khóa class ể khai báo tên lớp ược tạo. Tên lớp này do người
lập trình ặt. Tên lớp nên bắt ầu bằng chữ in hoa.
Phần thân lớp ược bao óng bằng cặp ngoặc {} dòng 2 dòng cuối. Bên
trong thân lớp là phương thức main. Phương thức main ược khai báo:
public static void main(String args[])
Từ khoá public chỉ ịnh mức truy xuất của phương thức. Từ khoá static cho phép
phương thức main ược gọi mà không cần tạo ra một thể hiện của lớp. Từ khoá void cho
biết rằng phương thức sẽ không trả ra bất cứ giá trị nào khi thực thi chương trình. args
tham số của phương thức main. thể nhận các giá trị vào main khi ta gọi chương
trình từ dấu nhắc lệnh.
System.out.println là phát biểu xuất một chuỗi ra màn hình.
Mỗi phát biểu ược kết thúc bởi dấu chấm phẩy.
Chương trình có phân biệt chữ hoa và chữ thường.
Chương trình còn có thể bao gồm các ghi chú. Khi dịch, chương trình dịch sẽ t
loại bỏ các ghi chú này. Trước ghi chú ta dùng hiệu // nếu ghi chú chỉ gồm một dòng.
Nếu ghi chú gồm nhiều dòng thì ta bao óng bằng cặp ký hiệu /* và */.
2. Biên dịch và chạy chương trình
Cách 1: Soạn và chạy chương trình trong Eclipse (hoặc khác).
Cách 2: Chạy các lệnh sau trong Command prompt như sau Giả
sử JDK ược cài ặt ở thư mục C:\JDK1.5.0.
Ta soạn lưu chương trình sau thành tập tin vd.java trong thư mục
c:\jdk1.5.0\bin. Để ý rằng kiểu của tập tin là .java.
class Chao
{
public static void main(String args[])
{
System.out.println("CHAO BAN");
}
}
Ta biên dịch chương trình nguồn bằng trình biên dịch javac. Vào Start menu, gọi
chương trình Command Prompt. Ở dấu nhắc lệnh ta 2 lệnh:
cd\jdk.1.5.0\bin
C:\jdk1.5.0\bin>javac vd1.java
Trình biên dịch sẽ phát sinh thêm tập tin mới Chao.class trong thư mục
c:\jdk1.5.0\bin. Tập tin này chứa bytecode. Để ý rằng tên tập tin mới sẽ trùng với
tên lớp.
Để chạy chương trình ta sử dụng trình thông dịch java. dấu nhắc lệnh ta
lệnh:
C:\jdk1.5.0\bin>java Chao
Trên màn hình Command Prompt sẽ hiển thị kết quả chạy chương trình.
Nếu lớp có mức truy xuất là public thì tên lớp và tên tập tin phải giống nhau.
VD: Tên tập tin của chương trình sau phải là Chao.java. public class Chao
{
public static void main(String args[])
{
System.out.println("CHAO BAN");
}
}
Truyền dữ liệu cho chương trình (thực hiện trong Command prompt)
VD: Khi chạy chương trình, ta có thể truyền dữ liệu cho hàm main. Giả sử ta sẽ
truyền cho hàm main 2 dliệu: tên nghề nghiệp, sau ó xuất ra màn hình 2 dữ liệu
này. Chương trình sẽ như sau public class Chao
{
public static void main(String args[])
{
System.out.println("Toi la: " + args[0]);
System.out.println("Nghe nghiep: " + args[1]);
} }
Chạy chương trình:
javac Chao.java java Chao
Teo Vosu hoặc java Chao Teo “Vo
su” Kết quả:
Toi la: Teo
Nghe nghiep: Vosu Lưu
ý:
- Trong chương trình trên, args[0] là dữ liệu thứ nhất, args[1] là dữ liệu
thứ nhất. Tương tự ta có thể có args[2], args[3],…
- Khi chạy chương trình, ta phải cung cấp ủ dữ liệu cho các args[i]. Dữ
liệu chuỗi có chứa khoảng trống cần rào bằng nháy kép.
3. Danh hiệu
Danh hiệu (identifier): tên biến, tên phương thức, tên lớp,…
Danh hiệu ược bắt ầu bằng chữ cái hoặc một ký tự gạch dưới hoặc ký tự ôla ($).
Các ký tự tiếp theo có thể là chữ cái, chữ số, ký tự $, ký tự ược gạch dưới.
Danh hiệu không ược sử dụng ký tự cách khoảng (space).
Trong danh hiệu, các ký tự hoa và thường là khác nhau.
Từ khoá/từ dành riêng (Keyword/Reserve Word): danh hiệu ã ược Java xác ịnh
trước. Chẳng hạn ‘class’, ‘import’ những tkhoá. Người lập trình không ược dùng
từ khóa làm danh hiệu cho những thứ khác.
4. Kiểu dữ liệu
Kiểu dữ liệu ược phân thành 2 loại:
- Kiểu dữ liệu nguyên thủy (primitive)
- Kiểu dữ liệu tham chiếu (reference)
Java có 3 kiểu dữ liệu tham chiếu: mảng, lớp, chuỗi.
Java có 8 kiểu dữ liệu nguyên thủy:
Kiểu
Kích thước
(bit)
Miền giá trị
Đặc iểm
boolean
1
2 giá trị true hoặc false
char
16
‘\u0000’ ến ’u\ffff ’
Ký tự
byte
8
-128 ến 127
Số nguyên
short
16
-32768 ến 32767
Số nguyên
int
32
-2,147,483,648 ến
+2,147,483,648
Số nguyên
long
64
-9,223,372,036’854,775,808 ến
+9,223,372,036’854,775,808
Số nguyên
float
32
1.4E-45
ến +3.40292347E+38
Số thực
double
64
4.9E-324
ến +1,79769313486231570E+308
Số thực
5. Biến và hằng
Biến ược sử dụng ể lưu trữ tạm dữ liệu trong quá trình hoạt ộng của CT.
Muốn sử dụng biến trong CT, ta phải khai báo biến khai báo trước khi sử dụng
nó.
Cú pháp khai báo biến:
- Khai báo mà không gán giá trị ban ầu cho biến:
Kiểudữliệu tênbiến;
- Khai báo và gán giá trị ban ầu cho biến: Kiểudữliệu tênbiến=trị;
VD: Khai báo biến so1 kiểu int.
int so1;
Kiểu dữ liệu cho biết biến có thể chứa những giá trị nào.
Tên biến : ược ặt theo quy tắc ặt danh hiệu.
Khai báo gộp : khai báo chung các biến cùng kiểu.
VD: float x, y; khai báo 2 biến x,y kiểu float.
Khai báo và gán trị ban ầu cho biến:
VD: char kt=‘a’; khai báo biến kt kiểu char và gán trị ban ầu cho nó là ‘a’
VD: int i=1, so1, so2, kq=0; khai báo 4 biến kiểu int. Biến i kq có trị ban ầu
là 1 và 0.
Vị trí khai báo biến : Một biến phạm vi hoạt ng trong toàn bộ khối lệnh
nó ược khai báo. Một khối lệnh ược bắt ầu bằng { và kết thúc bằng }.
♦ Nếu biến ược khai báo trong một cấu trúc iều khiển, biến ó có phạm vi hoạt
ộng trong khối lệnh tương ứng.
Nếu biến ược khai báo trong một phương thức (không nằm trong khối lệnh nào),
biến ó có phạm vi hoạt ộng trong phương thức tương ứng, có thể ược sử dụng trong tất
cả các khối lệnh của phương thức.
♦ Nếu biến ược khai báo trong một lớp (không nằm trong trong một phương thức
nào), biến ó có phạm vi hoạt ộng trong toàn bộ lớp tương ứng, có thể ược sử dụng trong
tất cả các phương thức của lớp.
Hằng là giá trị không thay ổi.
Khai báo tên hằng: final Kiểudữliệu tênhằng=trị;
VD: final double PI = 3.1415;
6. Phép toán
6.1. Toán tử nối chuỗi
+ là toán tử nối chuỗi
Ví dụ: "Trần Văn" + "Anh" "Trần VănAnh"
Ví dụ: "Trần Văn" + " " + "Anh" "Trần Văn Anh" Ví
dụ: "Tuoi: " + 1001 "Tuoi: 1001"
6.2. Toán tử số học
Các toán hạng của các toán tử số học là các số hạng.
Toán tử
Mô tả
+
Cộng
-
Trừ
*
Nhân
/
Chia
%
Giá trị trả về là phần dư của toán tử chia Ví
dụ: 10%3 1
Lưu ý: Toán tử / sẽ thực biện phép chia lấy phần nguyên nếu 2 số hạng ều là số
nguyên. Nếu có số hạng là số thực thì kết quả sẽ lấy cả phần thập phân. Ví dụ:
7/2 3
7/2.0 3.5
Ví dụ: Chương trình xuất kết quả tính toán của các biểu thức số học. class
Vidu
{
public static void main(String args[])
{ int
x=7; int
y=2;
System.out.println("Noi so:" + x + y); //Nối số x và y
System.out.println("Tong va noi so:" + (x+y)); //Tổng x và y
System.out.println("Chia du:" + x%y); //Phép chia lấy phần
System.out.println("Chia nguyen:" + x/y); //Phép chia lấy phần nguyên
System.out.println("Chia:" + (float)x/y); //Phép chia bình thường
System.out.println("Chia:" + x/(float)y); //Phép chia bình thường
System.out.println("Hieu:" + (x-y)); //phải bao ngoặc phép hiệu
}
}
Kết quả xuất:
Noi so:72
Tong va noi so:9
Chia du:1
Chia nguyen:3
Chia:3.5
Chia:3.5
Hieu:5
6.3. Toán tử quan hệ
Các toán tử quan hệ là các toán tử so sánh:
Toán tử
>
>=
<
<=
==
!=
Kết quả của phép toán là true hoặc false.
VD: 7>6 1
Chúng thường ược dùng trong biểu thức iều kiện.
VD:
class Vidu
{
public static void main(String args[])
{
boolean b;
int x=7;
int y=2;
System.out.println(x>y); //Xuất true
System.out.println(x<y); //Xuất false
System.out.println(x>y==true); //Xuất true
b = x>y; // b = true if(b==true)
System.out.println(b); //Xuất true
}
}
6.4. Toán tử luận lý
! là phép NOT (phủ ịnh). Nó cho kết quả true nếu toán hạng là false. Nó cho kết
quả false nếu toán hạng là true.
&& phép AND (và). cho kết quả true nếu cả 2 toán hạng ều là false. Ngược
lại nó cho kết quả false.
|| là phép OR (hoặc). Nó cho kết quả false nếu cả 2 toán hạng ều là false.
Ngược lại nó cho kết quả true.
Chúng thường ược dùng trong biểu thức iều kiện.
VD:
!(6>6) true
(6>5)&&(7<9) true
6.5. Toán tử gán
Cú pháp: Tênbiến = giátrị Gán
giá trị cho biến.
VD:
i = 5; i
= a+5;
Toán tử gán rút gọn: += , -= , *= , /= , %=
VD: i += 2; tương ương i = i+2;
VD: a = b = c = 1; // c = 1, b = 1, a = 1
6.6. Toán tử tăng/giảm 1
Thường áp dụng cho biến kiểu số nguyên.
i++ hoặc ++i ng giá trị của i thêm 1 i--
hoặc --i giảm giá trị của i bớt 1
Sự khác nhau giữa i++ và ++i là : (tương tự cho i----i)
Nếu dùng i++ trong lệnh gán thì giá trị cũ của i sẽ ược sử dụng, sau ó giá trị của
i ược tăng lên. Còn nếu dùng ++i trong lệnh gán thì giá trị của i sẽ ược tăng lên sau
ó giá trị mới của i ược sử dụng trong lệnh gán. Việc này cũng xảy ra tương tự trong phát
biểu print, println và các phát biểu khác.
VD: i=5; x=i++; x=5 và i=6
VD: i=5; x=++i; i=6 và x=6 Ví
dụ:
class Vidu
{
public static void main(String args[])
{ int
i=5;
System.out.println("i=" + i); //Xuất 5
System.out.println("i++ : " + i++); //Xuất 5
System.out.println("i="+i); //Xuất 6
System.out.println("++i : " + ++i); //Xuất 7
System.out.println("i="+i); //Xuất 7
}
}
6.7. Toán tử iều kiện
pháp: k?trị1:trị2
Nếu iều kiện k giá trị true thì trả ra trị1. Nếu iều kiện k giá trị false thì trả
ra trị2.
VD: x = y>=5?0:1; => Nếu y>=5 thì x=0, ngược lại x=1.
VD: System.out.println( y>=5? "Đậu":"Rớt"); => Nếu y>=5 thì xuất chuỗi
"Đậu", ngược lại xuất chuỗi "Rớt".
6.8. Đổi kiểu của giá trị
Toán tử ổi kiểu: (kiểu)giátrị
Dùng toán tử (kiểu) ổi kiểu của một giá trị.
VD: double a = 5.6; c
= (int)a;
=> c=5, toán tổi kiểu (int) cho kết quả là 5 ( ổi kiểu của giá trị 5.6 từ kiểu
double thành kiểu int, do ó 5.6 thành 5)
Lưu ý: Toán tử ổi kiểu không thay ổi giá trị của toán hạng. VD trên a vẫn bằng
5.6.
VD: double a=5.6, b=3.7, c; c = (int)a
+ b; a=5.6 , b=3.7, c=8.7 c = (int)(a+b);
a=5.6 , b=3.7, c=9 c = a + (int)b;
a=5.6 , b=3.7, c=8.6 VD: int a=9, b=2; double c;
c=a/b; c=4
c=(double)a/b; c=4.5
c=a/(double)b; c=4.5
c=(double)a/(double)b; c=4.5
c=(double)(a/b); c=4
Vidu:
class Vidu
{
public static void main(String args[])
{
//int i = 1.5; //Lỗi
float u;
//float t = 5.7; //Lỗi// Sử dụng float t = (float)5.7;
double a = 5.6; int c = (int)a;
System.out.println(c); //Xuất 5
System.out.println(2+3.5); //Xuất 5.5
}
}
6.9. Thứ tự ưu tiên của các toán tử
Thứ tự thực hiện của các toán tử trong Java:
Thứ tự
Toán tử
1
Toán tử ơn hạng như
- Dấu của số: + , - -
Tăng/ giảm 1: ++ , --
2
Toán tử số học: + , - , * , / , %
3
Toán tử quan hệ: > , < , >= , <= , == , !=
4
Toán tử luận lý: ! , && , ||
5
Toán tử gán: = , += , -= , *= , /= , %=
Thay ổi thứ tự ưu tiên: Biểu thức trong cặp ngoặc tròn ( ) ược thực hiện trước.
7. Hàm toán học
Các hàm toán học các phương thức thuộc lớp Math. Lớp Math thuộc i
java.lang. Ngầm ịnh, mỗi chương trình java ều import gói java.lang, do ó ta không cần
phải có chthị import gói java.lang này cho chương trình.
Các hàm của lớp Math ược sử dụng theo pháp Math.Tênhàm(các ốisố). Các
hàm thông dụng:
Math.abs(n) Trả ra trị tuyệt ối của số n. n có thể là kiểu int, long,
float, double. Kiểu dữ kiệu byte và short ược chuyển thành kiểu int.
Math.sqrt(n) Trả ra căn bậc 2 của số n.
Math.pow(a, n) Trả ra a
n
.
Math.ceil(n) Trả ra số nguyên gần với ối số lớn hơn hoặc bằng
ối số.
VD:
Math.ceil(7.02) 8
Math.ceil(7) 7
Math.ceil(-1.8) -1
Math.floor(n) Trả ra số nguyên gần với ối snhỏ hơn hoặc
bằng ối số.
VD:
Math.floor(-5.1) -6
Math.floor(-5) -5
Math.max(num1, num2) Trả ra số lớn nhất của num1 và num2. thể là kiểu
int, long, float, double.
Math.min(num1, num2) Trả ra số nhỏ nhất của num1 và num2. có thể kiểu
int, long, float, double.
Math.round(n) Trả ra số ược làm tròn ến hàng ơn vị của n.
VD: Math.round(34.5) 35
Math.random() Trả ra số ngẫu nhiên giữa 0.0 1.0 của kiểu double. Math.PI
Trả ra số pi.
Math.sin(n) Trả ra sin của n. n tính theo ơn vị radian.
Math.sin(Math.PI/2) 1.0
Math.cos(n) Trả ra cos của n. n tính theo ơn vị radian.
Math.tan(n) Trả ra tan của n. n tính theo ơn vị radian.
dụ:
class Vidu
{
public static void main(String a[])
{ int n
= 2;
double s;
s = Math.round( Math.pow( Math.abs( 1-Math.sqrt(n) ), 2));
System.out.println("Ket qua = " + s);
}
}
8. Nhập và Xuất dữ liệu 8.1.
Xuất dữ liệu
System.out.print(s): xuất giá trị của s ra màn hình, nhưng không xuống dòng.
System.out.println(s): xuất giá trị của s ra màn hình và có xuống dòng.
s có thể là kiểu chuỗi, kiểu số, kiểu boolean. Các ký tự ặc biệt:
Ký tự
Mô tả
\n
Xuống dòng
\r
Về ầu dòng
\t
Ký tự tab
\\
Ký tự \
\’
Ký tự nháy ơn
\”
Ký tự nháy kép
Ví dụ: Xuất chuỗi "Chao Ban" ra màn hình, giữa 2 chữ "Chao" và "Ban" có một
ký tự tab.
System.out.println("Chao\tBan");
Ví dụ: Xuất chuỗi "What’s your name?" ra màn hình.
System.out.println("What\’s your name?");
8.2. Nhập dữ liệu
Lớp Sanner cung cấp các phương thức nhập dữ liệu. Để gọi các phương thức nhập
dữ liệu của lớp Scanner, ta phải viết các mã chương trình sau:
- Đầu chương trình (dưới dòng khai báo tên gói nếu ) phải chỉ thị:
import java.util.Scanner;
- Trong main (hoặc trong phương thức khác), ta tạo ối tượng của lớp Scanner
như sau:
Scanner tên itượng = new Scanner(System.in); Với
tên ối tượng do ta ặt.
- Trong main (hoặc trong phương thức khác), ta sdụng các phương thức
nhập như sau:
biếnkiểuByte = tên ốitượng.nextByte(); nextByte phương thức cho
phép nhập dữ liệu kiểu byte vào biến kiểu byte.
biếnkiểuShort = tên ốitượng.nextShort(); nextShort là phương thức cho
phép nhập dữ liệu kiểu short vào biến kiểu short.
biếnkiểuInt = tên ốitượng.nextInt(); nextInt phương thức cho phép
nhập dữ liệu kiểu int vào biến kiểu int.
biếnkiểuLong = tên ốitượng.nextLong(); nextLong phương thức cho
phép nhập dữ liệu kiểu long vào biến kiểu long.
biếnkiểuFloat = tên ốitượng.nextFloat(); nextFloat phương thức cho
phép nhập dữ liệu kiểu float vào biến kiểu float.
biếnkiểuDouble = tên ốitượng.nextDouble(); nextDouble phương
thức cho phép nhập dữ liệu kiểu double vào biến kiểu double.
biếnkiểuBoolean = tên ốitượng.nextBoolean(); nextBoolean phương
thức cho phép nhập dữ liệu kiểu boolean vào biến kiểu boolean.
biếnkiểuString = tên ốitượng.nextLỉne(); nextLine phương thức cho
phép nhập dữ liệu kiểu String vào biến kiểu String.
Lưu ý: Nếu trước ó nhập dữ liệu số hoặc boolean và sau ó nhập dữ liệu kiểu
String thì cần phải gọi 2 lần NextLine.
Ví dụ: import
java.util.Scanner; class
Vidu
{
public static void main(String a[])
{
String holot, ten, noisinh;
boolean gioitinh; short
tuoi; int namvaodoan;
long hocbong; double
diemthi;
Scanner input = new Scanner(System.in);
System.out.print("Nhap Ho lot:"); holot
= input.nextLine();
System.out.print("Nhap Ten:"); ten =
input.nextLine();
System.out.print("Nhap Tuoi:");
tuoi = input.nextShort();
System.out.print("Nhap Gioitinh:");
gioitinh = input.nextBoolean();
System.out.print("Nhap noi sinh:");
noisinh = input.nextLine(); //loại bỏ enter của phát biểu trước ó
noisinh = input.nextLine();
System.out.print("Nhap nam vao Doan:");
namvaodoan = input.nextInt();
System.out.print("Nhap hoc bong:");
hocbong = input.nextLong();
System.out.print("Nhap diem thi:"); diemthi
= input.nextDouble();
System.out.println("Ho ten:" + holot + " " + ten + ", Tuoi:" + tuoi + ", Gioi
tinh:" + gioitinh + ", Noi sinh:" + noisinh);
System.out.println("Nam vao Doan:" + namvaodoan + ", Hoc bong:" +
hocbong + ", Diem thi:" + diemthi);
}
}
8.3. Nhập ký tự
Cách 1: import
java.util.Scanner; class
Vidu {
public static void main(String args[])
{
char kt = ' ';
String s;
Scanner input = new Scanner(System.in);
try
{
System.out.print("Nhap ky tu: ");
s = input.nextLine();
kt = s.charAt(0); //trước ó phải khởi tạo kt
}
catch (Exception e)
{
System.out.print("Loi nhap ky tu?");
}
System.out.println(kt);
}
} Cách 2:
class Vidu
{
public static void main(String args[])
{
char kt =' ';
try
{
System.out.print("Nhap ky tu: ");
kt = (char)System.in.read(); //trước ó phải khởi tạo kt
}
catch (Exception e)
{
System.out.println("Loi nhap ky tu?");
}
System.out.println(kt);
}
}
9. Thư viện
Java cung cấp một thư viện gồm nhiều gói sẵn dùng. Mỗi gói nhiều lớp tiện
ích.
Ví dụ: Gói java.util có lớp Scanner. Lớp Scanner cung cấp các phương thức nhập
dữ liệu như nextLine, nextByte,
Để sử dụng cả gói ta ghi chỉ thị import ở ầu chương trình:
import têngói.*;
Để sử dụng chỉ 1 lớp thuộc gói ta ghi chỉ thị import ở ầu chương trình:
import têngói.tênlớp;
Còn trong phương thức main (hoặc phương thức khác) ta tạo ối tượng của lớp
thuộc gói như sau:
tênlớp tên ốitượng = new tênlớp(các ối số);
Nếu ta không có chỉ thị import ở ầu chương trình, thì trong phương thức ta tạo
ối tượng của lớp thuộc gói như sau:
Têngói.tênlớp tên ốitượng = new Têngói.tênlớp(các ối số);
10. Gói java.lang
Các kiểu dữ liệu nguyên thủy int, char,… không là lớp, do ó chúng không có các
phương thức.
Lớp bao bọc (wrapper class) của kiểu nguyên thủy cung cấp thêm các phương
thức hu ích. Các lớp này thuộc gói java.lang. Ngầm ịnh, mỗi chương trình java ều
import gói java.lang, do ó ta không cần phải chthimport gói java.lang này cho
chương trình.
Sau ây là các kiểu nguyên thủy và các lớp bao bọc tương ứng:
Kiểu nguyên thủy
Lớp bao bọc
boolean
Boolean
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
Biến thuộc lớp ược gọi là ối tượng.
pháp khai báo và tạo các ối tượng (biến) của lớp bao bọc:
Tênlớp Tên ốitượng;
Tênlớp Tên ốitượng = giátr;
Để lấy giá trcủa ối tượng ta dùng tên ối tưng hoặc phương thức của ối tượng theo cú
pháp tên ốitượng.intValue().
Các lớp bao bọc kiểu số các phương thức tương ng parseByte(),
parseShort(), parseInt(),… thchuyển ổi dữ liệu chuỗi sang dữ liệu số. Các lớp này
cũng có phương thức valueOf() ể chuyển ổi dữ liệu chuỗi sang dữ liệu số.
Các lớp bao bọc kiểu số nguyên có thuộc tính MIN_VALUE và MAX_VALUE ể
cung cấp giá trnh nhất và lớn nhất của kiểu.
Ví dụ:
class Vidu
{
public static void main(String args[])
{
int s;
Boolean b = false;
Integer i = 3;

Preview text:

GIỚI THIỆU JAVA 1. Java là gì
Chương trình nguồn mà ược soạn thảo bằng ngôn ngữ lập trình cần ược biên dịch
hoặc thông dịch ể có thể chạy trên máy tính. Mỗi loại CPU cần có một trình biên dịch
riêng ể dịch chương trình nguồn. Để có trình biên dịch, ta thường phải tốn nhiều thời
gian và công sức ể xây dựng.
Java là một ngôn ngữ lập trình ược Sun Microsystems ưa ra vào năm 1995.
Chương trình Java chạy nhanh, hiệu quả và ộc lập thiết bị (chạy trên nhiều loại CPU)
không phụ thuộc vào hệ iều hành.
Chương trình Java vừa biên dịch vừa thông dịch. Trước tiên chương trình nguồn
ược biên dịch bằng công cụ JAVAC ể chuyển thành dạng bytecode. Sau ó chương trình
dạng bytecode ược thực thi trên mỗi loại máy nhờ chương trình thông dịch.
Java ược dùng rộng rãi ể viết các ứng dụng chạy ơn lẻ, ứng dụng mạng, ứng
dụng internet, ứng dụng iện thoại di ộng, … 2. Đặc iểm của Java
⚫ Java là ngôn ngữ mạnh mẽ.
⚫ Độc lập phần cứng và hệ iều hành
Chương trình ược viết tại một máy nhưng có thể chạy ược ở bất kỳ âu.
Ở mức mã nguồn: Kiểu dữ liệu của Java là nhất quán cho tất cả hệ iều hành và
phần cứng khác nhau. Chương trình Java ược viết trên một máy có thể dịch và chạy trên
các loại máy khác mà không cần phải viết lại.
Ở mức nhị phân: Chương trình ã ược biên dịch có thể chạy trên nền khác mà
không cần dịch lại. Tuy nhiên cần có phần mềm máy ảo Java hoạt ộng như một trình
thông dịch tại máy thực thi.
Trình biên dịch sẽ dịch chương trình C++ thành mã máy nhưng phụ thuộc vào
CPU. Do ó khi muốn chạy trên loại CPU khác, ta phải biên dịch lại chương trình.
Không giống như C hay C++, trình biên dịch của Java chuyển mã nguồn thành
dạng bytecode ộc lập với phần cứng mà có thể chạy trên bất kỳ CPU. Nhưng ể thực thi
chương trình dưới dạng bytecode, tại mỗi máy cần phải có trình thông dịch của Java hay
còn gọi là máy ảo Java. Máy ảo Java sẽ chuyển bytecode thành mã lệnh mà CPU thực thi ược.
⚫ Java là ngôn ngữ lập trình hướng ối tượng.
⚫ Java cung cấp khả năng xây dựng ứng dụng phân tán chạy trên mạng.
⚫ Java hỗ trợ a luồng (multithread) ể thực thi các công việc ồng thời.
⚫ Java hỗ trợ khả năng liên kết ộng.
⚫ Java cung cấp khả năng truy xuất cơ sở dữ liệu.
⚫ Java có các lớp kiểm tra bảo mật.
Lớp ầu tiên: Dữ liệu và các phương thức ược óng gói bên trong lớp. Chúng chỉ
ược truy xuất thông qua các giao diện mà lớp cung cấp. Java không hỗ trợ con trỏ vì vậy
không cho phép truy xuất bộ nhớ trực tiếp. Nó không cho phép truy xuất thông tin bên
ngoài mảng bằng kỹ thuật tràn. Nó cũng cung cấp kỹ thuật dọn rác trong bộ nhớ.
Lớp thứ hai: Trình biên dịch kiểm soát ể ảm bảo mã an toàn.
Lớp thứ ba: Trình thông dịch kiểm tra xem bytecode có an toàn trước khi thực thi.
Lớp thứ tư: kiểm soát việc nạp các lớp lên bộ nhớ ể giám sát việc vi phạm giới
hạn truy xuất trước khi nạp vào hệ thống. 3. Các loại ứng dụng 3.1. Console
Chương trình này ược chạy từ dấu nhắc lệnh và không sử dụng giao diện ồ họa.
3.2. Ứng dụng có giao diện ồ họa
Đây là ứng dụng thông dụng có giao diện cửa sổ, thực ơn, nút lệnh.
3.3. Ứng dụng cơ sở dữ liệu
Các ứng dụng sử dụng JDBC API ể kết nối tới cơ sở dữ liệu. Chúng có thể là
applet hay ứng dụng bình thường. 3.4. Applet
Đây là ứng dụng chạy trên Internet thông qua các trình duyệt hỗ trợ Java. Applet
ược nhúng bên trong trang Web. Khi trang Web ược hiển thị trong trình duyệt, Applet
sẽ ược nạp và ược thực thi. 3.5. Servlet
Ta có thể viết chương trình API chạy trên máy chủ ể giám sát các quá trình tại
máy chủ và trả lời các yêu cầu của máy trạm. Ứng dụng trên máy chủ ược gọi là Servlet
hoặc Applet tại máy chủ. 4. Máy ảo Java
Máy ảo JVM (Java Virtual Machine) là một phần mềm dựa trên cơ sở máy tính
ảo. Nó có tập các lệnh luận lý ể xác ịnh các hoạt ộng của máy tính. Nó ược như một hệ
iều hành thu nhỏ. Nó thiết lập các lớp trừu tượng cho: Phần cứng bên dưới, hệ iều hành, mã ã biên dịch.
Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không phụ
thuộc vào phần cứng cụ thể.
Máy ảo tạo ra một môi trường bên trong ể thực thi các lệnh bằng cách nạp các tập
tin .class. Tập tin .class cho phép chương trình Java ược viết một lần nhưng chạy ở bất
kỳ âu miễn là có máy ảo.
5. Bộ công cụ phát triển JDK
JDK (Java Development Kit) là bộ công cụ phát triển các ứng dụng Java do Sun Microsystem ưa ra.
Sử dụng công cụ thông qua dòng lệnh Command prompt hoặc thông qua các IDE.
Ta có thể xem thư mục program files ể kiểm tra có thư mục jdk chưa. Nếu có thì ã cài ặt công cụ jdk. 
Tải và cài ặt JDK: https://www.oracle.com/java/technologies/
Nhấp vào chọn bản Java SE: chẳng hạn Java SE 20.01 (20.01 là phiên bản của
jdk) hoặc vào thẳng url sau
Nhấp chọn Windows, nhấp chọn bản .zip hoặc .exe hoặc .msi.
Nên tải bản .exe hoặc .msi ể lấy tập tin chạy cài ặt tự ộng. Nếu lấy bản .zip, ta
phải giải nén, rồi sao chép thủ công thư mục jdk-20.0.1 vào thư mục Program Files,
rồi phải cài ặt biến môi trường
.
Sau khi cài ặt sẽ có thư mục chứa các công cụ của jdk:
C:\Program Files\Java\jdk-20.0.1
Ta có thể vào trang https://jdk.java.net ể tải phiên bản jdk mới nhất. Nhưng nó là bản cài ặt thủ công. 
JDK có các công cụ sau mà có thể sử dụng thông qua dòng lệnh Command prompt: 1) Trình biên dịch javac
javac [options] sourcecodename.java
2) Trình thông dịch java java [options] classname 3)
Trình dịch ngược javap javap [options] classname
4) Công cụ phát sinh tài liệu javadoc
javadoc [options] sourcecodename.java
5) Chương trình tìm lỗi (debug) jdb jdb
[options] sourcecodename.java hoặc
jdb -host -password [options] sourcecodename.java
6) Chương trình chạy applet
appletviewer [options] sourcecodename.java / url v.v,…
 IDE: Môi trường phát triển tích hợp (Integrated Development Environment) là
một ứng dụng tạo iều kiện ầy ủ ể lập trình. Nó cho phép soạn chương trình, biên dịch,
thông dịch (chạy) chương trình thông qua các lệnh trên giao diện cửa sổ. Các phần mềm cung cấp IDE:
- Jcreator: Phần mềm Lập trình Java rất nhỏ gọn.
- Eclipse: Phần mềm Lập trình Java ược yêu thích.
- NetBeans: Phần mềm lập trình Java tốt.
- IntelliJ IDEA: Phần mềm lập trình Java phổ biến. - v.v,…
Lưu ý: Các phần mềm này, a số sử sụng jdk, nên trước khi cài ặt các phần mềm
này, cần phải cài ặt jdk trước.
 Sử dụng Eclipse IDE for Java Developers - 2023-03 Tạo
project, sau ó tạo các thứ (lớp,…) trong project.
+ Tạo project: File \New \Java project
Đặt tên project, cũng là tên gói com.ht.mypackage1 (hoặc ơn giản là mypackage1).
+ Tạo lớp: File \New \Class
Đặt tên lớp là MyClass1. Nếu chọn public static void main thì nó sẽ phát sinh sẵn
cấu trúc phương thức main. Nếu không chọn thì sau ó ta tự soạn cấu trúc phương thức main.
CÁC THÀNH PHẦN CƠ BẢN CỦA CHƯƠNG TRÌNH
1. Cấu trúc của chương trình
Chương trình Java ược tổ chức thành các gói. Mỗi gói có thể có một hoặc nhiều lớp.
Đối với chương trình Java nhỏ và ơn giản, nó chỉ gồm một gói. Chương trình
thường có phương thức main. Đây là phương thức chính mà thực hiện và iều khiển chương trình.
Sau ây là cấu trúc của chương trình Java chỉ có một gói và một lớp:
//Các chỉ thị import nếu có class tênlớp {
public static void main(String args[]) {
//Các phát biểu của chương trình } }
VD: Chương trình xuất ra màn hình câu thông báo "CHAO BAN". class Chao {
public static void main(String args[]) {
System.out.println("CHAO BAN"); } }
Dòng ầu dùng từ khóa class ể khai báo tên lớp ược tạo. Tên lớp này do người
lập trình ặt. Tên lớp nên bắt ầu bằng chữ in hoa.
Phần thân lớp ược bao óng bằng cặp ngoặc {} ở dòng 2 và dòng cuối. Bên
trong thân lớp là phương thức main. Phương thức main ược khai báo:
public static void main(String args[])
Từ khoá public chỉ ịnh mức truy xuất của phương thức. Từ khoá static cho phép
phương thức main ược gọi mà không cần tạo ra một thể hiện của lớp. Từ khoá void cho
biết rằng phương thức sẽ không trả ra bất cứ giá trị nào khi thực thi chương trình. args
là tham số của phương thức main. Nó có thể nhận các giá trị vào main khi ta gọi chương
trình từ dấu nhắc lệnh.
System.out.println là phát biểu xuất một chuỗi ra màn hình.
Mỗi phát biểu ược kết thúc bởi dấu chấm phẩy.
Chương trình có phân biệt chữ hoa và chữ thường.
Chương trình còn có thể bao gồm các ghi chú. Khi dịch, chương trình dịch sẽ tự
loại bỏ các ghi chú này. Trước ghi chú ta dùng ký hiệu // nếu ghi chú chỉ gồm một dòng.
Nếu ghi chú gồm nhiều dòng thì ta bao óng bằng cặp ký hiệu /* và */.
2. Biên dịch và chạy chương trình
Cách 1: Soạn và chạy chương trình trong Eclipse (hoặc khác).
Cách 2: Chạy các lệnh sau trong Command prompt như sau Giả
sử JDK ược cài ặt ở thư mục C:\JDK1.5.0.
Ta soạn và lưu chương trình sau thành tập tin vd.java ở trong thư mục
c:\jdk1.5.0\bin. Để ý rằng kiểu của tập tin là .java. class Chao {
public static void main(String args[]) {
System.out.println("CHAO BAN"); } }
Ta biên dịch chương trình nguồn bằng trình biên dịch javac. Vào Start menu, gọi
chương trình Command Prompt. Ở dấu nhắc lệnh ta gõ 2 lệnh: cd\jdk.1.5.0\bin
C:\jdk1.5.0\bin>javac vd1.java
Trình biên dịch sẽ phát sinh thêm tập tin mới là Chao.class ở trong thư mục
c:\jdk1.5.0\bin. Tập tin này chứa mã bytecode. Để ý rằng tên tập tin mới sẽ trùng với tên lớp.
Để chạy chương trình ta sử dụng trình thông dịch java. Ở dấu nhắc lệnh ta gõ lệnh: C:\jdk1.5.0\bin>java Chao
Trên màn hình Command Prompt sẽ hiển thị kết quả chạy chương trình.
Nếu lớp có mức truy xuất là public thì tên lớp và tên tập tin phải giống nhau.
VD: Tên tập tin của chương trình sau phải là Chao.java. public class Chao {
public static void main(String args[]) {
System.out.println("CHAO BAN"); } }
 Truyền dữ liệu cho chương trình (thực hiện trong Command prompt)
VD: Khi chạy chương trình, ta có thể truyền dữ liệu cho hàm main. Giả sử ta sẽ
truyền cho hàm main 2 dữ liệu: tên và nghề nghiệp, sau ó xuất ra màn hình 2 dữ liệu
này. Chương trình sẽ như sau public class Chao {
public static void main(String args[]) {
System.out.println("Toi la: " + args[0]);
System.out.println("Nghe nghiep: " + args[1]); } }
Chạy chương trình: javac Chao.java java Chao
Teo Vosu hoặc java Chao Teo “Vo su” Kết quả: Toi la: Teo Nghe nghiep: Vosu Lưu ý: -
Trong chương trình trên, args[0] là dữ liệu thứ nhất, args[1] là dữ liệu
thứ nhất. Tương tự ta có thể có args[2], args[3],… -
Khi chạy chương trình, ta phải cung cấp ủ dữ liệu cho các args[i]. Dữ
liệu chuỗi có chứa khoảng trống cần rào bằng nháy kép. 3. Danh hiệu
Danh hiệu (identifier): tên biến, tên phương thức, tên lớp,…
Danh hiệu ược bắt ầu bằng chữ cái hoặc một ký tự gạch dưới hoặc ký tự ôla ($).
Các ký tự tiếp theo có thể là chữ cái, chữ số, ký tự $, ký tự ược gạch dưới.
Danh hiệu không ược sử dụng ký tự cách khoảng (space).
Trong danh hiệu, các ký tự hoa và thường là khác nhau.
Từ khoá/từ dành riêng (Keyword/Reserve Word): là danh hiệu ã ược Java xác ịnh
trước. Chẳng hạn ‘class’, ‘import’ là những từ khoá. Người lập trình không ược dùng
từ khóa làm danh hiệu cho những thứ khác. 4. Kiểu dữ liệu
Kiểu dữ liệu ược phân thành 2 loại:
- Kiểu dữ liệu nguyên thủy (primitive)
- Kiểu dữ liệu tham chiếu (reference)
Java có 3 kiểu dữ liệu tham chiếu: mảng, lớp, chuỗi.
Java có 8 kiểu dữ liệu nguyên thủy: Kiểu
Kích thước Miền giá trị Đặc iểm (bit) boolean 1
2 giá trị true hoặc false char 16
‘\u0000’ ến ’u\ffff ’ Ký tự byte 8 -128 ến 127 Số nguyên short 16 -32768 ến 32767 Số nguyên int 32 -2,147,483,648 ến Số nguyên +2,147,483,648 long 64
-9,223,372,036’854,775,808 ến Số nguyên +9,223,372,036’854,775,808 float 32 1.4E-45 Số thực ến +3.40292347E+38 double 64 4.9E-324 Số thực
ến +1,79769313486231570E+308 5. Biến và hằng
Biến ược sử dụng ể lưu trữ tạm dữ liệu trong quá trình hoạt ộng của CT.
Muốn sử dụng biến trong CT, ta phải khai báo biến và khai báo trước khi sử dụng nó. Cú pháp khai báo biến:
- Khai báo mà không gán giá trị ban ầu cho biến: Kiểudữliệu tênbiến;
- Khai báo và gán giá trị ban ầu cho biến: Kiểudữliệu tênbiến=trị;
VD: Khai báo biến so1 kiểu int. int so1;
Kiểu dữ liệu cho biết biến có thể chứa những giá trị nào.
Tên biến : ược ặt theo quy tắc ặt danh hiệu.
Khai báo gộp : khai báo chung các biến cùng kiểu.
VD: float x, y; → khai báo 2 biến x,y kiểu float.
Khai báo và gán trị ban ầu cho biến:
VD: char kt=‘a’; → khai báo biến kt kiểu char và gán trị ban ầu cho nó là ‘a’
VD: int i=1, so1, so2, kq=0; → khai báo 4 biến kiểu int. Biến i và kq có trị ban ầu là 1 và 0.
Vị trí khai báo biến : Một biến có phạm vi hoạt ộng trong toàn bộ khối lệnh mà
nó ược khai báo. Một khối lệnh ược bắt ầu bằng { và kết thúc bằng }.
♦ Nếu biến ược khai báo trong một cấu trúc iều khiển, biến ó có phạm vi hoạt
ộng trong khối lệnh tương ứng.
♦ Nếu biến ược khai báo trong một phương thức (không nằm trong khối lệnh nào),
biến ó có phạm vi hoạt ộng trong phương thức tương ứng, có thể ược sử dụng trong tất
cả các khối lệnh của phương thức.
♦ Nếu biến ược khai báo trong một lớp (không nằm trong trong một phương thức
nào), biến ó có phạm vi hoạt ộng trong toàn bộ lớp tương ứng, có thể ược sử dụng trong
tất cả các phương thức của lớp.
 Hằng là giá trị không thay ổi.
Khai báo tên hằng: final Kiểudữliệu tênhằng=trị; VD: final double PI = 3.1415; 6. Phép toán 6.1. Toán tử nối chuỗi
+ là toán tử nối chuỗi
Ví dụ: "Trần Văn" + "Anh" → "Trần VănAnh"
Ví dụ: "Trần Văn" + " " + "Anh" → "Trần Văn Anh" Ví
dụ: "Tuoi: " + 1001 → "Tuoi: 1001" 6.2. Toán tử số học
Các toán hạng của các toán tử số học là các số hạng. Toán tử Mô tả + Cộng - Trừ * Nhân / Chia %
Giá trị trả về là phần dư của toán tử chia Ví dụ: 10%3 → 1
Lưu ý: Toán tử / sẽ thực biện phép chia lấy phần nguyên nếu 2 số hạng ều là số
nguyên. Nếu có số hạng là số thực thì kết quả sẽ lấy cả phần thập phân. Ví dụ: 7/2 → 3 7/2.0 → 3.5
Ví dụ: Chương trình xuất kết quả tính toán của các biểu thức số học. class Vidu {
public static void main(String args[]) { int x=7; int y=2;
System.out.println("Noi so:" + x + y); //Nối số x và y
System.out.println("Tong va noi so:" + (x+y)); //Tổng x và y
System.out.println("Chia du:" + x%y); //Phép chia lấy phần dư
System.out.println("Chia nguyen:" + x/y); //Phép chia lấy phần nguyên
System.out.println("Chia:" + (float)x/y); //Phép chia bình thường
System.out.println("Chia:" + x/(float)y); //Phép chia bình thường
System.out.println("Hieu:" + (x-y)); //phải bao ngoặc phép hiệu } } Kết quả xuất: Noi so:72 Tong va noi so:9 Chia du:1 Chia nguyen:3 Chia:3.5 Chia:3.5 Hieu:5 6.3. Toán tử quan hệ
Các toán tử quan hệ là các toán tử so sánh: Toán tử Mô tả > Lớn hơn >= Lớn hơn hay bằng < Nhỏ hơn <= Nhỏ hơn hay bằng == Bằng != Không bằng / Khác
Kết quả của phép toán là true hoặc false. VD: 7>6 → 1
Chúng thường ược dùng trong biểu thức iều kiện. VD: class Vidu {
public static void main(String args[]) { boolean b; int x=7; int y=2;
System.out.println(x>y); //Xuất true
System.out.println(xSystem.out.println(x>y==true); //Xuất true
b = x>y; // b = true if(b==true)
System.out.println(b); //Xuất true } } 6.4. Toán tử luận lý
! là phép NOT (phủ ịnh). Nó cho kết quả true nếu toán hạng là false. Nó cho kết
quả false nếu toán hạng là true.
&& là phép AND (và). Nó cho kết quả true nếu cả 2 toán hạng ều là false. Ngược
lại nó cho kết quả false. ||
là phép OR (hoặc). Nó cho kết quả false nếu cả 2 toán hạng ều là false.
Ngược lại nó cho kết quả true.
Chúng thường ược dùng trong biểu thức iều kiện. VD: !(6>6) → true
(6>5)&&(7<9) → true 6.5. Toán tử gán
Cú pháp: Tênbiến = giátrị Gán giá trị cho biến. VD: i = 5; i = a+5;
Toán tử gán rút gọn: += , -= , *= , /= , %=
VD: i += 2; tương ương i = i+2;
VD: a = b = c = 1; // c = 1, b = 1, a = 1
6.6. Toán tử tăng/giảm 1
Thường áp dụng cho biến kiểu số nguyên.
i++ hoặc ++i → tăng giá trị của i thêm 1 i--
hoặc --i → giảm giá trị của i bớt 1
Sự khác nhau giữa i++ và ++i là : (tương tự cho i-- và --i)
Nếu dùng i++ trong lệnh gán thì giá trị cũ của i sẽ ược sử dụng, sau ó giá trị của
i ược tăng lên. Còn nếu dùng ++i trong lệnh gán thì giá trị của i sẽ ược tăng lên và sau
ó giá trị mới của i ược sử dụng trong lệnh gán. Việc này cũng xảy ra tương tự trong phát
biểu print, println và các phát biểu khác.
VD: i=5; x=i++; → x=5 và i=6
VD: i=5; x=++i; → i=6 và x=6 Ví dụ: class Vidu {
public static void main(String args[]) { int i=5;
System.out.println("i=" + i); //Xuất 5
System.out.println("i++ : " + i++); //Xuất 5
System.out.println("i="+i); //Xuất 6
System.out.println("++i : " + ++i); //Xuất 7
System.out.println("i="+i); //Xuất 7 } }
6.7. Toán tử iều kiện Cú pháp: k?trị1:trị2
Nếu iều kiện k có giá trị true thì trả ra trị1. Nếu iều kiện k có giá trị false thì trả ra trị2.
VD: x = y>=5?0:1; => Nếu y>=5 thì x=0, ngược lại x=1.
VD: System.out.println( y>=5? "Đậu":"Rớt"); => Nếu y>=5 thì xuất chuỗi
"Đậu", ngược lại xuất chuỗi "Rớt".
6.8. Đổi kiểu của giá trị
Toán tử ổi kiểu: (kiểu)giátrị
Dùng toán tử (kiểu) ể ổi kiểu của một giá trị. VD: double a = 5.6; c = (int)a;
=> c=5, vì toán tử ổi kiểu (int) cho kết quả là 5 ( ổi kiểu của giá trị 5.6 từ kiểu
double thành kiểu int, do ó 5.6 thành 5)
Lưu ý: Toán tử ổi kiểu không thay ổi giá trị của toán hạng. Ở VD trên a vẫn bằng 5.6. VD: double a=5.6, b=3.7, c; c = (int)a + b; → a=5.6 , b=3.7, c=8.7 c = (int)(a+b); → a=5.6 , b=3.7, c=9 c = a + (int)b; → a=5.6 , b=3.7, c=8.6 VD: int a=9, b=2; double c; c=a/b; → c=4 c=(double)a/b; → c=4.5 c=a/(double)b; → c=4.5
c=(double)a/(double)b; → c=4.5 c=(double)(a/b); → c=4 Vidu: class Vidu {
public static void main(String args[]) { //int i = 1.5; //Lỗi float u;
//float t = 5.7; //Lỗi// Sử dụng float t = (float)5.7;
double a = 5.6; int c = (int)a;
System.out.println(c); //Xuất 5
System.out.println(2+3.5); //Xuất 5.5 } }
6.9. Thứ tự ưu tiên của các toán tử
Thứ tự thực hiện của các toán tử trong Java: Thứ tự Toán tử 1 Toán tử ơn hạng như - Dấu của số: + , - - Tăng/ giảm 1: ++ , -- 2
Toán tử số học: + , - , * , / , % 3
Toán tử quan hệ: > , < , >= , <= , == , != 4
Toán tử luận lý: ! , && , || 5
Toán tử gán: = , += , -= , *= , /= , %=
Thay ổi thứ tự ưu tiên: Biểu thức trong cặp ngoặc tròn ( ) ược thực hiện trước. 7. Hàm toán học
Các hàm toán học là các phương thức thuộc lớp Math. Lớp Math thuộc gói
java.lang. Ngầm ịnh, mỗi chương trình java ều import gói java.lang, do ó ta không cần
phải có chỉ thị import gói java.lang này cho chương trình.
Các hàm của lớp Math ược sử dụng theo cú pháp Math.Tênhàm(các ốisố). Các hàm thông dụng: 
Math.abs(n) → Trả ra trị tuyệt ối của số n. n có thể là kiểu int, long,
float, double. Kiểu dữ kiệu byte và short ược chuyển thành kiểu int. 
Math.sqrt(n) → Trả ra căn bậc 2 của số n. 
Math.pow(a, n) → Trả ra an. 
Math.ceil(n) → Trả ra số nguyên gần với ối số mà lớn hơn hoặc bằng ối số. VD: Math.ceil(7.02) → 8 Math.ceil(7) → 7 Math.ceil(-1.8) → -1 
Math.floor(n) → Trả ra số nguyên gần với ối số mà nhỏ hơn hoặc bằng ối số. VD: Math.floor(-5.1) → -6 Math.floor(-5) → -5
Math.max(num1, num2) → Trả ra số lớn nhất của num1 và num2. có thể là kiểu int, long, float, double.
Math.min(num1, num2) → Trả ra số nhỏ nhất của num1 và num2. có thể là kiểu int, long, float, double.
Math.round(n) → Trả ra số ược làm tròn ến hàng ơn vị của n. VD: Math.round(34.5) → 35
Math.random()→ Trả ra số ngẫu nhiên giữa 0.0 và 1.0 của kiểu double. Math.PI → Trả ra số pi.
Math.sin(n) → Trả ra sin của n. n tính theo ơn vị radian. Math.sin(Math.PI/2) →1.0
Math.cos(n) → Trả ra cos của n. n tính theo ơn vị radian.
Math.tan(n) → Trả ra tan của n. n tính theo ơn vị radian. Ví dụ: class Vidu {
public static void main(String a[]) { int n = 2; double s;
s = Math.round( Math.pow( Math.abs( 1-Math.sqrt(n) ), 2));
System.out.println("Ket qua = " + s); } }
8. Nhập và Xuất dữ liệu 8.1. Xuất dữ liệu
System.out.print(s): xuất giá trị của s ra màn hình, nhưng không xuống dòng.
System.out.println(s): xuất giá trị của s ra màn hình và có xuống dòng.
s có thể là kiểu chuỗi, kiểu số, kiểu boolean. Các ký tự ặc biệt: Ký tự Mô tả \n Xuống dòng \r Về ầu dòng \t Ký tự tab \\ Ký tự \ \’ Ký tự nháy ơn \” Ký tự nháy kép
Ví dụ: Xuất chuỗi "Chao Ban" ra màn hình, giữa 2 chữ "Chao" và "Ban" có một ký tự tab.
System.out.println("Chao\tBan");
Ví dụ: Xuất chuỗi "What’s your name?" ra màn hình.
System.out.println("What\’s your name?"); 8.2. Nhập dữ liệu
Lớp Sanner cung cấp các phương thức nhập dữ liệu. Để gọi các phương thức nhập
dữ liệu của lớp Scanner, ta phải viết các mã chương trình sau: -
Đầu chương trình (dưới dòng khai báo tên gói nếu có) phải có chỉ thị: import java.util.Scanner; -
Trong main (hoặc trong phương thức khác), ta tạo ối tượng của lớp Scanner như sau:
Scanner tên ốitượng = new Scanner(System.in); Với
tên ối tượng do ta ặt. -
Trong main (hoặc trong phương thức khác), ta sử dụng các phương thức nhập như sau: 
biếnkiểuByte = tên ốitượng.nextByte(); → nextByte là phương thức cho
phép nhập dữ liệu kiểu byte vào biến kiểu byte. 
biếnkiểuShort = tên ốitượng.nextShort(); → nextShort là phương thức cho
phép nhập dữ liệu kiểu short vào biến kiểu short. 
biếnkiểuInt = tên ốitượng.nextInt(); → nextInt là phương thức cho phép
nhập dữ liệu kiểu int vào biến kiểu int. 
biếnkiểuLong = tên ốitượng.nextLong(); → nextLong là phương thức cho
phép nhập dữ liệu kiểu long vào biến kiểu long. 
biếnkiểuFloat = tên ốitượng.nextFloat(); → nextFloat là phương thức cho
phép nhập dữ liệu kiểu float vào biến kiểu float. 
biếnkiểuDouble = tên ốitượng.nextDouble(); → nextDouble là phương
thức cho phép nhập dữ liệu kiểu double vào biến kiểu double. 
biếnkiểuBoolean = tên ốitượng.nextBoolean(); → nextBoolean là phương
thức cho phép nhập dữ liệu kiểu boolean vào biến kiểu boolean. 
biếnkiểuString = tên ốitượng.nextLỉne(); → nextLine là phương thức cho
phép nhập dữ liệu kiểu String vào biến kiểu String.
Lưu ý: Nếu trước ó nhập dữ liệu số hoặc boolean và sau ó nhập dữ liệu kiểu
String thì cần phải gọi 2 lần NextLine. Ví dụ: import java.util.Scanner; class Vidu {
public static void main(String a[]) { String holot, ten, noisinh; boolean gioitinh; short tuoi; int namvaodoan; long hocbong; double diemthi;
Scanner input = new Scanner(System.in);
System.out.print("Nhap Ho lot:"); holot = input.nextLine();
System.out.print("Nhap Ten:"); ten = input.nextLine();
System.out.print("Nhap Tuoi:"); tuoi = input.nextShort();
System.out.print("Nhap Gioitinh:");
gioitinh = input.nextBoolean();
System.out.print("Nhap noi sinh:");
noisinh = input.nextLine(); //loại bỏ enter của phát biểu trước ó noisinh = input.nextLine();
System.out.print("Nhap nam vao Doan:"); namvaodoan = input.nextInt();
System.out.print("Nhap hoc bong:"); hocbong = input.nextLong();
System.out.print("Nhap diem thi:"); diemthi = input.nextDouble();
System.out.println("Ho ten:" + holot + " " + ten + ", Tuoi:" + tuoi + ", Gioi
tinh:" + gioitinh + ", Noi sinh:" + noisinh);
System.out.println("Nam vao Doan:" + namvaodoan + ", Hoc bong:" +
hocbong + ", Diem thi:" + diemthi); } } 8.3. Nhập ký tự Cách 1: import java.util.Scanner; class Vidu {
public static void main(String args[]) { char kt = ' '; String s;
Scanner input = new Scanner(System.in); try {
System.out.print("Nhap ky tu: "); s = input.nextLine();
kt = s.charAt(0); //trước ó phải khởi tạo kt } catch (Exception e) {
System.out.print("Loi nhap ky tu?"); } System.out.println(kt); } } Cách 2: class Vidu {
public static void main(String args[]) { char kt =' '; try {
System.out.print("Nhap ky tu: ");
kt = (char)System.in.read(); //trước ó phải khởi tạo kt } catch (Exception e) {
System.out.println("Loi nhap ky tu?"); } System.out.println(kt); } } 9. Thư viện
Java cung cấp một thư viện gồm nhiều gói sẵn dùng. Mỗi gói có nhiều lớp tiện ích.
Ví dụ: Gói java.util có lớp Scanner. Lớp Scanner cung cấp các phương thức nhập
dữ liệu như nextLine, nextByte, …
Để sử dụng cả gói ta ghi chỉ thị import ở ầu chương trình: import têngói.*;
Để sử dụng chỉ 1 lớp thuộc gói ta ghi chỉ thị import ở ầu chương trình: import têngói.tênlớp;
Còn trong phương thức main (hoặc phương thức khác) ta tạo ối tượng của lớp thuộc gói như sau:
tênlớp tên ốitượng = new tênlớp(các ối số);
Nếu ta không có chỉ thị import ở ầu chương trình, thì trong phương thức ta tạo
ối tượng của lớp thuộc gói như sau:
Têngói.tênlớp tên ốitượng = new Têngói.tênlớp(các ối số); 10. Gói java.lang
Các kiểu dữ liệu nguyên thủy int, char,… không là lớp, do ó chúng không có các phương thức.
Lớp bao bọc (wrapper class) của kiểu nguyên thủy cung cấp thêm các phương
thức hữu ích. Các lớp này thuộc gói java.lang. Ngầm ịnh, mỗi chương trình java ều
import gói java.lang, do ó ta không cần phải có chỉ thị import gói java.lang này cho chương trình.
Sau ây là các kiểu nguyên thủy và các lớp bao bọc tương ứng:
Kiểu nguyên thủy Lớp bao bọc boolean Boolean byte Byte short Short int Integer long Long float Float double Double char Character
Biến thuộc lớp ược gọi là ối tượng.
Cú pháp khai báo và tạo các ối tượng (biến) của lớp bao bọc: Tênlớp Tên ốitượng;
Tênlớp Tên ốitượng = giátrị;
Để lấy giá trị của ối tượng ta dùng tên ối tượng hoặc phương thức của ối tượng theo cú
pháp tên ốitượng.intValue().
Các lớp bao bọc kiểu số có các phương thức tương ứng là parseByte(),
parseShort(), parseInt(),… có thể chuyển ổi dữ liệu chuỗi sang dữ liệu số. Các lớp này
cũng có phương thức valueOf() ể chuyển ổi dữ liệu chuỗi sang dữ liệu số.
Các lớp bao bọc kiểu số nguyên có thuộc tính MIN_VALUE và MAX_VALUE ể
cung cấp giá trị nhỏ nhất và lớn nhất của kiểu. Ví dụ: class Vidu {
public static void main(String args[]) { int s; Boolean b = false; Integer i = 3;