ỦY BAN NHÂN DÂN TỈNH AN GIANG
TRƢỜNG CAO ĐẲNG NGHỀ AN GIANG
GIÁO TRÌNH
MƠ ĐUN: Lập Trình Java
NGÀNH/NGHỀ: LẬP TRÌNH MÁY TÍNH
TRÌNH ĐỘ: CAO ĐẲNG
(Ban hành theo Quyết định số:
/QĐ-CĐN, ngày
tháng
năm 20
của Hiệu trưởng trường Cao đẳng nghề An Giang)
An Giang, Năm ban hành:
TUYÊN BỐ BẢN QUYỀN
Tài liệu này thuộc loại sách giáo trình nên các nguồn thơng tin có thể đƣợc
phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo.
Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh
doanh thiếu lành mạnh sẽ bị nghiêm cấm.
LỜI GIỚI THIỆU
Ngôn ngữ lập trình java ra đời và đƣợc các nhà nghiên cứu của Công ty
Sun Microsystem giới thiệu vào năm 1995. Sau khi ra đời khơng lâu, ngơn
ngữ lập trình này đã đƣợc sử dụng rộng rãi và phổ biến đối với các lập trình
viên chuyên nghiệp cũng nhƣ các nhà phát triển phần mềm. Gần đây ngơn
ngữ lập trình, cơng nghệ java đã đƣợc đƣa vào giảng dạy ở các cơ sở đào tạo
lập trình viên chuyên nghiệp. Tài liệu này sẽ giúp chúng ta tìm hiểu về java và
cách viết một ứng dụng bằng ngôn ngữ này.
An Giang, ngày
tháng
năm 20…
Tham gia biên soạn
1. Ths. Vũ Trường Duy
2……………
3. ………….
2
MỤC LỤC
LỜI GIỚI THIỆU ...................................................................................................... 2
GIÁO TRÌNH MƠ ĐUN .......................................................................................... 5
BÀI 1: THIẾT LẬP MƠI TRƢỜNG LẬP TRÌNH JAVA ....................................... 8
I/ Cài đặt mơi trƣờng lập trình Java. ...................................................................... 8
II/ Biên dịch, chạy chƣơng trình. ........................................................................... 9
Bài tập: ................................................................................................................. 10
BÀI 2: JAVA CƠ BẢN ........................................................................................... 11
I/ Cấu trúc cơ bản một chƣơng trình viết bằng Java. ........................................... 11
II/ Hằng, biến, kiểu dữ liệu, tốn tử, từ khóa. ...................................................... 11
III/ Các cấu trúc điều khiển. ................................................................................. 15
IV/ Mảng và chuỗi trong Java. ............................................................................. 17
Bài tập: ................................................................................................................. 21
BÀI 3: HƢỚNG ĐỐI TƢỢNG TRONG JAVA ..................................................... 22
I/ Lớp trong Java .................................................................................................. 22
II/ Tính kế thừa..................................................................................................... 26
III/ Các ví dụ minh họa. ....................................................................................... 26
Bài tập: ................................................................................................................. 30
BÀI 4: LẬP TRÌNH GIAO DIỆN .......................................................................... 32
I/ Giới thiệu thiết kế giao diện trong Java............................................................ 32
II/ Các thành phần (Component).......................................................................... 32
III/ Các đối tƣợng khung chứa (Containers). ....................................................... 41
IV/ Các bộ quản lý trình bày (Layout managers). ............................................... 44
Bài tập: ................................................................................................................. 50
BÀI 5: LẬP TRÌNH SỰ KIỆN ............................................................................... 51
I/ Các ví dụ mở đầu. ............................................................................................. 51
II/ Mơ hình xử lý sự kiện trong Java .................................................................... 54
III. Các bộ lắng nghe sự kiện. .............................................................................. 56
IV. Các thành phần component nâng cao. ........................................................... 58
3
V/ Xử lý sự kiện chuột. ........................................................................................ 59
VI/ Xử lý sự kiện bàn phím.................................................................................. 59
Bài tập: ................................................................................................................. 60
BÀI 6: XỬ LÝ NGOẠI LỆ ..................................................................................... 61
I/ Xử lý lỗi trong Java. ......................................................................................... 61
II. Các lớp ngoại lệ (Exceptions). ........................................................................ 61
III/ Xây dựng một lớp ngoại lệ. ........................................................................... 62
Bài tập: ................................................................................................................. 63
BÀI 7: KẾT NỐI CƠ SỞ DỮ LIỆU ....................................................................... 64
I/ Các trình điều khiển JDBC. .............................................................................. 64
II/ Các bƣớc lập trình truy xuất cơ sở dữ liệu. ..................................................... 65
III/ Các đối tƣợng trong lập trình cơ sở dữ liệu. .................................................. 65
IV/ Xử lý và trình bày dữ liệu. ............................................................................. 66
Bài tập: ................................................................................................................. 68
CÁC THUẬT NGỮ CHUYÊN MÔN .................................................................... 70
4
GIÁO TRÌNH MƠ ĐUN
Tên mơ đun : LẬP TRÌNH JAVA
Mã mô đun: MĐ23
Thời gian thực hiện mô đun: 75 giờ (Lý thuyết: 20 giờ, thực hành, thí nghiệm,
thảo luận: 53giờ, bài tập: ..... giờ, kiểm tra: 2 giờ).
I. VỊ TRÍ, TÍNH CHẤT CỦA MƠ ĐUN
1. Vị trí: thuộc nhóm Mơ đun chun mơn nghề
2. Tính chất: Là Mơ đun chun mơn bắt buộc trong ngành lập trình máy tính
hệ Cao đẳng
3. Ý nghĩa và vai trị của mơ đun:
Mơ đun này cung cấp cho sinh viên các kiến thức cơ bản về lập trình Java,
bao gồm: các kiểu dữ liệu, các phép toán, các cấu trúc điều khiển, khái niệm về lập
trình hƣớng đối tƣợng, tạo và sử dụng lớp.
Mơ đun cũng bao gồm các kiến thức để viết các ứng dụng giao diện ngƣời
dùng, truy xuất cơ sở dữ liệu.
II. MỤC TIÊU CỦA MÔ ĐUN
1. Kiến thức:
+ Hiểu biết về ngơn ngữ lập trình Java, lập trình hƣớng đối tƣợng trong Java.
+ Trình bày đƣợc các mơ hình lập trình giao diện, xử lý sự kiện ừong Java.
+ Trình bày đƣợc các bƣớc lập trinh truy xuất cơ sở dữ liệu.
2. Kỹ năng:
+ Sử dụng đƣợc một ngôn ngữ lập trình hƣớng đối tƣợng cụ thể (Java).
+ Sử dụng đƣợc mơi trƣờng phát triển phần mềm tích họp (IDE) phục vụ cho
việc lập trình bang Java.
+ Có đƣợc các kỹ năng sử dụng ngơn ngữ Java để lập trình dịng lệnh, lập
trình giao diện đồ họa, lập trình sự kiện, lập trình truy xuất cơ sở dữ liệu.
3. Năng lực tự chủ và trách nhiệm.
+ Cẩn thận, tỉ mỉ, tự giác học tập và nghiên cứu.
III. NỘI DUNG MÔ ĐUN
Số
TT
1
Tên các bài trong mô đun
Tổng
số
Bài mở đầu:
Bài 1: Thiết lập mơi trƣờng lập
trình Java
1. Cài đặt mơi trƣờng lập trình
Java.
2. Biên dịch, chạy chƣơng
trình.
4
Thời gian (giờ)
Thực hành, thí
Lý
nghiệm, thảo
thuyết
luận, bài tập
1
Kiểm
tra
3
5
2
3
4
5
6
7
Bài 2: Java cơ bản
1. Cấu trúc cơ bản một chƣơng
trình viết bằng Java.
2. Hằng, biến, kiểu dữ liệu,
tốn tử, từ khóa.
3. Các cấu trúc điều khiển.
4. Mảng và chuỗi trong Java.
Bài 3: Hƣớng đối tƣợng trong
Java
1. Lớp trong Java.
2. Tính kế thừa.
3. Các ví dụ minh họa.
Bài 4: Lập trình giao diện
1. Giới thiệu thiết kế giao diện
trong Java.
2. Các thành phần (component).
3. Các đối tƣợng khung chứa
(containers).
4. Các bộ quản lý trình bày
(layout managers).
Bài 5: Lập trình sự kiện
1. Các ví dụ mở đầu.
2. Mơ hình xử lý sự kiện trong
Java
3. Các bộ lắng nghe sự kiện.
4. Các thành phần component
nâng cao.
5. Xử lý sự kiện chuột.
6. Xử lý sự kiện bàn phím.
Bài 6: Xử lý ngoại lệ
1. Xử lý lỗi trong Java.
2.
Các
lớp
ngoại
lệ
(exceptions).
3. Xây dựng một lớp ngoại lệ.
Bài 7: Kết nối cơ sở dữ liệu
1. Các trình điều khiển JDBC.
2. Các bƣớc lập trình truy xuất
cơ sở dữ liệu.
4. Các đối tƣợng trong lập trình
cơ sở dữ liệu.
12
3
9
12
3
9
16
4
12
16
4
11
4
1
3
8
3
4
1
1
5. Xử lý và trình bày dữ liệu.
6
8
Ôn tập
Cộng
3
1
2
75
20
53
2
7
BÀI 1: THIẾT LẬP MƠI TRƢỜNG LẬP TRÌNH JAVA
Mục tiêu:
- Cài đặt đƣợc mơi trƣờng lập trình Java.
- Biên dịch và chạy đƣợc một chƣơng trình Java.
Nội dung chính:
I/ Cài đặt mơi trƣờng lập trình Java.
1/ Các phần mềm cần chuẩn bị:
- JDK 1.6 (jdk-6u11-windows-i586-p)
- JDK DOC 1.6 (jdk-6u10-docs)
Tải về từ trang web: />- JCreator 4.5
Tải về từ trang web: />- Nếu không dùng một IDE nhƣ JCreator để soạn thảo, dịch và thực thi thì ta
có thể dùng trình soạn thảo văn bản nhƣ NotePad để soạn thảo.
2/ Trình tự cài đặt:
Nên cài đặt theo trình tự sau:
- Cài JDK 1.6
- Thiết lập biến môi trƣờng PATH, CLASPATH
- Cài JDK Doc 1.6
- JCreator 4.5
- Thiết lập cho JCreator chỉ vào bộ JDK Doc 1.6 đã cài đặt
Cài JDK 1.6
- Phần này hƣớng dẫn cài trong hệ điều hành Windows 7 (đối với các hệ điều
hành khác của hãng Microsoft thì cách cài cũng tƣơng tự).
- Tạo thƣ mục C:\Java để cài. Nếu khơng thì để JDK cài ngầm định vào
C:\Program Files\Java\jdk1.6.0_11
- Nhấp đúp vào source JDK 1.6 để cài.
- Thiết lập biến môi trƣờng PATH chỉ đến thƣ mục BIN của thƣ mục mà ta
mới cài JDK.
- Thiết lập biến môi trƣờng CLASSPATH chỉ đến thƣ mục chƣa các lớp của
ngƣời dùng. Từ bản JDK 1.4 về sau, ta không cần quan tâm đến biến
CLASSPATH nữa.
Thiết lập biến môi trƣờng Path
Trong Windows, nhấp Start/run gõ vào sysedit. Trong cửa sổ
AUTOEXEC.BAT gõ chuỗi “set PATH=“ chỉ đến thƣ mục BIN của JDK mới cài
đặt.
Ví dụ: set PATH=C:\Program Files\Java\jdk1.6.0_11\bin
Sau đó save và đóng cửa sổ sysedit lại rồi khởi động lại máy.
Cài đặt JDK DOC
JDK Doc là là tài liệu trợ giúp tra cứu các lớp và các phƣơng thức của Java.
JDK Doc cũng trợ giúp tra hàm và lớp khi soạn thảo trong JCreator. Source của
JDK Doc ở dạng file nén. Ta tiến hành giải nén nó vào cùng thƣ mục đã cài JDK.
Cài đặt JCreator 4.5
Sau khi download source JCreator và ta tiến hành cài đặt nó.
8
II/ Biên dịch, chạy chƣơng trình.
1/ Viết một chƣơng trình đơn giản
Dùng JCreator viết và thực thi chƣơng trình có tên là HelloWorldApp
Bƣớc 1: Tạo một empty project
Trên menu của JCreator chọn File/New/Project/Empty Project/Next
Đặt tên cho project ở ô Name.
Chọn thƣ mục chứa project ở ô Location. Nhấn Finish.
9
Bƣớc 3: Soạn thảo mã nguồn, dịch và thực thi
Bài tập:
Hãy cài đặt mơi trƣờng lập trình Java.
10
BÀI 2: JAVA CƠ BẢN
Mục tiêu:
- Trình bày đƣợc cấu trúc cơ bản của một chƣơng trình viết bằng Java.
- Mơ tả đƣợc hằng và biến dùng trong chƣơng trình.
- Sử dụng đƣợc quy tắc cú pháp của ngôn ngữ lập trình.
- Vận dụng đƣợc các cấu trúc điều khiển, cấu trúc lặp vào lập trình.
- Sử dụng đƣợc mảng và chuỗi trong lập trình Java.
Nội dung chính:
I/ Cấu trúc cơ bản một chƣơng trình viết bằng Java.
Phƣơng thức main(): là điểm bắt đầu thực thi một ứng dụng.
- Mỗi ứng dụng Java phải chứa một phƣơng thức main có dạng nhƣ sau:
public static void main(String[] args)
- Phƣơng thức main chứa ba bổ từ đặc tả sau:
public: chỉ ra rằng phƣơng thức main có thể đƣợc gọi bởi bất kỳ đối tƣợng
nào.
static: chỉ ra rằng phƣơng thức main là một phƣơng thức lớp.
void: chỉ ra rằng phƣơng thức main sẽ không trả về bất kỳ một giá trị nào.
II/ Hằng, biến, kiểu dữ liệu, toán tử, từ khóa.
1/ Từ khóa (keyword)
- Từ khóa cho các kiểu dữ liệu cơ bản: byte, short, int, long, float, double,
char, boolean.
- Từ khóa cho phát biểu lặp: do, while, for, break, continue.
- Từ khóa cho phát biểu rẽ nhánh: if, else, switch, case, default, break.
11
- Từ khóa đặc tả đặc tính một method: private, public, protected, final, static,
abstract, synchronized.
- Hằng (literal): true, false, null.
- Từ khóa liên quan đến method: return, void.
- Từ khố liên quan đến package: package, import.
- Từ khóa cho việc quản lý lỗi: try, catch, finally, throw, throws.
- Từ khóa liên quan đến đối tƣợng: new, extends, implements, class,
instanceof, this, super.
2/ Định danh (identifier)
- Định danh là dùng biểu diễn tên của biến, của phƣơng thức, của lớp.
- Trong Java, định danh có thể sử dụng ký tự chữ, ký tự số và ký tự dấu.
- Ký tự đầu tiên phải là ký tự chữ, dấu gạch dƣới (_), hoặc dấu dollar ($).
- Có sự phân biệt giữa ký tự chữ hoa và chữ thƣờng.
Ví dụ: Hello, _prime, var8, tvLang
3/ Biến (variable)
- 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.
- Tên biến thông thƣờng là một chuỗi các ký tự (Unicode), ký số.
- Tên biến phải bắt đầu bằng một chữ cái, một dấu gạch dƣới hay dấu dollar.
- Tên biến không đƣợc trùng với các từ khóa (xem lại các từ khóa trong java).
- Tên biến khơng có khoảng trắng ở giữa tên.
- Trong java, biến có thể đƣợc khai báo ở bất kỳ nơi đâu trong chƣơng trình.
- Cách khai báo
<kiểu_dữ_liệu> <tên_biến>;
<kiểu_dữ_liệu> <tên_biến> = <giá_trị>;
- Gán giá trị cho biến
<tên_biến> = <giá_trị>;
- Biến công cộng (tồn cục): là biến có thể truy xuất ở khắp nơi trong chƣơng
trình, thƣờng đƣợc khai báo dùng từ khóa public, hoặc đặt chúng trong một class.
- Biến cục bộ: là biến chỉ có thể truy xuất trong khối lệnh nó khai báo
4/ Kiểu dữ liệu (data type)
Gồm các kiểu dữ liệu sau:
• Kiểu dữ liệu cơ sở (Primitive data type)
• Kiểu dữ liệu tham chiếu hay dẫn xuất (reference data type)
• Kiểu dữ liệu cơ sở của Java bao gồm các nhóm sau: số nguyên, số thực, ký
tự, kiểu luận lý (logic)
• Kiểu dữ liệu tham chiếu là các kiểu dữ liệu đối tƣợng. Ví dụ nhƣ: String,
Byte, Character, Double, Boolean, Integer, Long, Short, Font,… và các lớp do
ngƣời dùng định nghĩa.
- Kiểu dữ liệu cơ sở
Kiểu số nguyên
• Bốn kiểu số nguyên khác nhau là: byte, short, int, long
• Kiểu mặc định của các số nguyên là kiểu int
• Khơng có kiểu số ngun khơng dấu
12
• Không thể chuyển biến kiểu int và kiểu boolean nhƣ trong ngơn ngữ C/C++
Ví dụ:
int x = 0;
long y=100;
int a=1,b,c;
Kiểu dấu chấm động:
• Kiểu float có kích thƣớc 4 byte và giá trị mặc định là 0.0f
• Kiểu double có kích thƣớc 8 byte và giá trị mặc định là 0.0d
• Khai báo và khởi tạo giá trị cho các biến kiểu dấu chấm động:
Ví dụ:
float x = 100.0/7;
double y = 1.56E6;
Kiểu ký tự
• Biểu diễn các ký tự trong bộ mã Unicode
• 216 = 65536 ký tự khác nhau : từ '\u0000' đến '\uFFFF'
Kiểu luận lý (boolean)
• Hai giá trị: true hoặc false
• Giá trị mặc định: false
• Khơng thể chuyển thành kiểu ngun và ngƣợc lại
- Tốn tử ép kiểu:
<tên biến> = (kiểu_dữ_liệu) <tên_biến>;
Ví dụ:
float fNum = 2.2;
int iCount = (int) fNum
• Ép kiểu rộng (widening conversion): từ kiểu nhỏ sang kiểu lớn (không mất
mát thơng tin)
• Ép kiểu hẹp (narrow conversion): từ kiểu lớn sang kiểu nhỏ (có khả năng
mất mát thơng tin)
4/ Hằng (literal)
- Hằng là một giá trị bất biến trong chƣơng trình
- Tên hằng đƣợc đặt theo qui ƣớc giống nhƣ tên biến
- Tiếp vĩ ngữ: l, L, f, F, d, D
Ví dụ:
int i=1;
long i=1L;
- Hằng ký tự: là một ký tự đơn nằm giữa 2 dấu nháy đơn.
- Hằng chuỗi: là tập hợp các ký tự đƣợc đặt giữa hai dấu nháy kép “”. Một
hằng chuỗi khơng có ký tự nào là một hằng chuỗi rỗng.
Ví dụ: “Hello Wolrd”
5/ Toán tử (operator)
- Toán tử số học
13
Toán tử
+
*
/
%
++
--
Ý nghĩa
Cộng
Trừ
Nhân
Chia nguyên
Chia dƣ
Tăng 1
Giảm 1
- Toán tử quan hệ & logic
Toán tử
==
!=
>
<
>=
<=
||
&&
!
Ý nghĩa
So sánh bằng
So sánh khác
So sánh lớn hơn
So sánh nhỏ hơn
So sánh lớn hơn hay bằng
So sánh nhỏ hơn hay bằng
OR (biểu thức logic)
AND (biểu thức logic)
NOT (biểu thức logic)
- Tốn tử gán (assignment)
Tốn tử
Ví dụ
Giải thích
=
int c=3, d=5, c=4;
+=
c+=7
c=c+7
-=
d-=4
d=d-4
*=
e*=5
e=e*5
/=
f/=3
f=f/3
%=
g%=9
g=g%9
- Tốn tử điều kiện
<điều kiện> ? <biểu thức 1> : < biểu thức 2>
14
Ví dụ:
int x = 10;
int y = 20;
int Z = (x
III/ Các cấu trúc điều khiển.
1/ Mệnh đề if – else
if (<biểu thức boolean>) {
// khối lệnh này đƣợc thực thi
// nếu (<biểu thức boolean>) = true
} else {
// khối lệnh này đƣợc thực thi
// nếu condition = false
}
Ví dụ:
public class Test {
public static void main(String[] args) {
int number = 13;
if (number % 2 == 0) {
System.out.println("Số " + number + " là số chẵn.");
} else {
System.out.println("Số " + number + " là số lẻ.");
}
}
}
2/ Mệnh đề switch - case
switch (bieu_thuc) {
case gia_tri_1:
// Khối lệnh 1
break; //tùy chọn
case gia_tri_2:
// Khối lệnh 2
break; //tùy chọn
......
case gia_tri_n:
// Khối lệnh n
break; //tùy chọn
default:
// Khối lệnh này đƣợc thực thi
// nếu tất cả các điều kiện trên khơng thỏa mãn
}
Ví dụ:
import javax.swing.JOptionPane;
15
public class TestSwitch
{
public static void main(String[] args)
{
char c;
String str=JOptionPane.showInputDialog(null,"Nhap vao ky tu?");
c = str.charAt(0);
switch(c)
{
case 'a': case 'e': case 'i': case 'o': case 'u':
System.out.println("Ky tu nay la nguyen am");
break;
default:
System.out.println("Ky tu nay la phu am");
}
System.exit(0); // kết thúc chƣơng trình
}
}
3/ Vịng lặp while
while (<biểu thức boolean>)
<khối lệnh>;
Ví dụ:
// Tính tổng các số lẻ từ 1 đến 100
int tong = 0, i = 1;
while (i<=100)
{
tong+=i; i+=2;
}
System.out.println(tong);
4/ Vòng lặp do-while
do
{
<khối lệnh>;
} while <biểu thức boolean>;
Ví dụ:
// Tính tổng các số lẻ từ 1 đến 100
int tong = 0, i=1;
do
{
tong+=i; i+=2;
16
} while (i<=100);
System.out.println(tong);
5/ Vòng lặp for
for(<khởi tạo>; <điều kiện lặp>; <bƣớc nhảy>)
<khối lệnh>;
Ví dụ:
public class TestFor
{
public static void main(String[] args)
{
int tong = 0;
for(int i=1; i<=100; i+=2)
tong+=i;
System.out.println(tong);
}
}
IV/ Mảng và chuỗi trong Java.
1/ Mảng
Mảng là tập hợp nhiều phần tử có cùng tên, cùng kiểu dữ liệu và mỗi phần tử
trong mảng đƣợc truy xuất thơng qua chỉ số của nó trong mảng.
Khai báo mảng:
<kiểu dữ liệu> <tên mảng>[];
<kiểu dữ liệu>[] <tên mảng>;
Ví dụ:
int arrInt[];
int[] arrInt;
int[] arrInt1, arrInt2, arrInt3;
Khởi tạo mảng:
Chúng ta có thể khởi tạo giá trị ban đầu cho các phần tử của mảng khi nó
đƣợc khai báo.
Ví dụ:
int arrInt[] = {1, 2, 3};
char arrChar[] = {„a‟, „b‟, „c‟};
String arrString[] = {“ABC”, “EFG”, „GHI‟};
Truy cập mảng:
- Chỉ số mảng trong Java bắt đầu từ 0. Vì vậy phần tử đầu tiên có chỉ số là 0,
và phần tử thứ n có chỉ số là n-1. Các phần tử của mảng đƣợc truy xuất thơng qua
chỉ số của nó đƣợc đặt giữa cặp dấu ngoặc vng [].
Ví dụ 1:
int arrInt[] = {1, 2, 3};
int x = arrInt[0]; // x sẽ có giá trị là 1.
int y = arrInt[1]; // y sẽ có giá trị là 2.
int z = arrInt[2]; // z sẽ có giá trị là 3.
Ví dụ 2: Nhập và xuất giá trị các phần tử của một mảng các số nguyên:
17
class ArrayDemo
{
public static void main(String args[])
{
int arrInt[] = new int[10];
int i;
for(i = 0; i < 10; i = i+1)
arrInt[i] = i;
for(i = 0; i < 10; i = i+1)
System.out.println("This is arrInt[" + i +"]: " + arrInt[i]);
}
}
Ví dụ 3: Tìm phần tử có giá trị nhỏ nhất (Min) và lớn nhất (Max) trong một
mảng.
class MinMax2
{
public static void main(String args[])
{
int nums[] = { 99, -10, 100123, 18, -978, 5623, 463, -9, 287, 49 };
int min, max;
min = max = nums[0];
for(int i=1; i < 10; i++)
{
if(nums[i] < min) min = nums[i];
if(nums[i] > max) max = nums[i];
}
System.out.println("Min and max: " + min + " " + max);
}
}
Ví dụ 4: Nhập và xuất giá trị của các phần tử trong một mảng hai chiều.
class TwoD_Arr
{
public static void main(String args[])
{
int t, i;
int table[][] = new int[3][4];
for(t=0; t < 3; ++t)
{
for(i=0; i < 4; ++i)
{
table[t][i] = (t*4)+i+1;
System.out.print(table[t][i] + “ ");
18
}
System.out.println();
}
}
}
2/ Chuỗi trong java (string)
- Trong những ngôn ngữ lập trình khác (C chẳng hạn), một chuỗi đƣợc xem
nhƣ một mảng các ký tự.
- Trong java thì khác, java cung cấp một lớp String để làm việc với đối tƣợng
dữ liệu chuỗi cùng các thao tác trên đối tƣợng dữ liệu này.
- Tạo đối tƣợng chuỗi
class StringDemo
{
public static void main(String args[])
{
// Tao chuoi bang nhieu cach khac nhau
String str1 = new String("Chuoi trong java la nhung Objects.");
String str2 = "Chung duoc xay dung bang nhieu cach khac nhau.";
String str3 = new String(str2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
- Minh họa một số thao tác cơ bản trên chuỗi
// Chuong trinh minh hoa cac thao tac tren chuoi ky tu
class StrOps
{
public static void main(String args[])
{
String str1 = "Java la chon lua so mot cho lap trinh ung dung Web.";
String str2 = new String(str1);
String str3 = "Java ho tro doi tuong String de xu ly chuoi";
int result, idx;
char ch;
System.out.println("str1:" + str1);
System.out.println("str2:" + str2);
System.out.println("str3:" + str3);
System.out.println("Chieu dai cua chuoi str1 la:" + str1.length());
// Hien thi chuoi str1, moi lan mot ky tu.
System.out.println();
for(int i=0; i < str1.length(); i++)
System.out.print(str1.charAt(i));
System.out.println();
19
if(str1.equals(str2))
System.out.println("str1 == str2");
else
System.out.println("str1 != str2");
if(str1.equals(str3))
System.out.println("str1 == str3");
else
System.out.println("str1 != str3");
result = str1.compareTo(str3);
if(result == 0)
System.out.println("str1 = str3 ");
else
if(result < 0)
System.out.println("str1 < str3");
else
System.out.println("str1 > str3");
// Tao chuoi moi cho str4
String str4 = "Mot Hai Ba Mot";
idx = str4.indexOf("Mot");
System.out.println("str4:" + str4);
System.out.println(
"Vi tri xuat hien dau tien cua chuoi con 'Mot' trong str4: "
+ idx);
idx = str4.lastIndexOf("Mot");
System.out.println("Vi tri xuat hien sau cung cua
chuoi con 'Mot' trong str4:" + idx);
}
}
- Lấy chuỗi con của một chuỗi
class SubStr
{
public static void main(String args[])
{
String orgstr = "Mot Hai Ba Bon";
// Lay chuoi con dung ham
// public String substring(int beginIndex, int
// endIndex)
String substr = orgstr.substring(4, 7);
System.out.println("Chuoi goc: " + orgstr);
System.out.println("Chuoi con: " + substr);
}
}
- Mảng các chuỗi
class StringArray
{
20
public static void main(String args[])
{
String str[] = {"Mot", "Hai", "Ba", "Bon" };
System.out.print("Mang goc: ");
for(int i=0; i < str.length; i++)
System.out.print(str[i] + " ");
System.out.println("\n");
// Thay doi chuoi
str[0] = "Bon"; str[1] = "Ba";
str[2] = "Hai"; str[3] = "Mot";
System.out.print("Mang thay doi:");
for(int i=0; i < str.length; i++)
System.out.print(str[i] + " ");
System.out.print("\n");
}
}
Bài tập:
1/ Viết chƣơng trình giải phƣơng trình bậc nhất.
2/ Viết chƣơng trình giải phƣơng trình bậc hai
3/ Viết chƣơng trình tìm số lớn nhất giữa hai số.
4/ Viết chƣơng trình tính: 1+2+3+N
5/ Viết chƣơng trình tính:1+3+5+7…+21
6/ Viết chƣơng trình xuất N N-1 N-2…1
7/ Viết chƣơng trình tính 1*2*3*4*N
8/ Viết chƣơng trình tính 1+1/2+1/3+….+1/N
9/ Viết chƣơng trình tính 12+22+32….+N2; (1*1+ 2*2 + 3*3)
10/ Viết chƣơng trình nhập và xuất mảng số ngun.
11/ Viết chƣơng trình tính tổng các số trong mảng.
12/ Viết chƣơng trình tính tổng các số chẵn trong mảng.
13/ Viết chƣơng trình đếm các số lớn hơn 100 có trong mảng.
14/ Viết chƣơng trình tính trung bình cộng các số thực trong mảng.
15/ Viết chƣơng trình thay thế các số 10 trong mảng thành 100.
21
BÀI 3: HƢỚNG ĐỐI TƢỢNG TRONG JAVA
Mục tiêu:
- Trình bày đƣợc các đặc trƣng cơ bản hƣớng đối tƣợng trong Java.
- Phân tích, cài đặt và xây dựng đƣợc chƣơng trình theo phƣơng pháp hƣớng
đối tƣợng trên ngơn ngữ lập trình Java.
Nội dung chính:
I/ Lớp trong Java
1/ Khái niệm
- Lớp đƣợc xem nhƣ một khuôn mẫu (template) của đối tƣợng (Object).
- Trong lớp bao gồm các thuộc tính của đối tƣợng (properties) và các phƣơng
thức (methods) tác động lên các thuộc tính.
- Đối tƣợng đƣợc xây dựng từ lớp nên đƣợc gọi là thể hiện của lớp (class
instance).
2/ Khai báo lớp
class <ClassName>
{
<kiểu dữ liệu> <field_1>;
<kiểu dữ liệu> <field_2>;
constructor
method_1
method_2
}
- class: là từ khóa của java
- ClassName: là tên chúng ta đặt cho lớp
- field_1, field_2: các thuộc tính (các biến, hay các thành phần dữ liệu của
lớp)
- constructor: là phƣơng thức xây dựng, khởi tạo đối tƣợng của lớp.
- method_1, method_2: là các phƣơng thức (có thể gọi là hàm) thể hiện các
thao tác xử lý, tác động lên các thuộc tính của lớp.
3/ Thuộc tính của lớp
- Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp đƣợc khai báo bên
trong lớp nhƣ sau:
class <ClassName>
// khai báo những thuộc tính của lớp
<tiền tố> <kiểu dữ liệu> field1;
// …
}
- Để xác định quyền truy xuất của các đối tƣợng khác đối với vùng dữ liệu
của một lớp ngƣời ta thƣờng dùng 3 tiền tố sau:
public: có thể truy xuất từ tất cả các đối tƣợng khác
private: một lớp không thể truy xuất vùng private của một lớp khác.
protected: vùng protected của một lớp chỉ cho phép bản thân lớp đó và
những lớp dẫn xuất từ lớp đó truy cập đến.
22
Ví dụ:
public class xemay
{
public String nhasx;
public String model;
private float chiphisx;
protected int thoigiansx;
// so luong so cua xe may: 3, 4
protected int so;
// sobanhxe là biến tĩnh có giá trị là 2 trong tất cả
// các thể hiện tạo ra từ lớp xemay
public static int sobanhxe = 2;
}
Thuộc tính “nhasx”, “model” có thể đƣợc truy cập đến từ tất cả các đối
tƣợng khác.
Thuộc tính “chiphisx” chỉ có thể truy cập đƣợc từ các đối tƣợng có kiểu
“xemay”
Thuộc tính “thoigiansx”, so có thể truy cập đƣợc từ các đối tƣợng có kiểu
“xemay” và các đối tƣợng của các lớp con dẫn xuất từ lớp “xemay”
4/ Phƣơng thức (method) của lớp
- Hàm hay phƣơng thức (method) trong Java là khối lệnh thực hiện các chức
năng, các hành vi xử lý của lớp lên vùng dữ liệu.
- Khai báo phƣơng thức:
<Tiền tố> <kiểu trả về> <Tên phƣơng thức> (<danh sách đối số>)
{
<khối lệnh>;
}
- Để xác định quyền truy xuất của các đối tƣợng khác đối với các phƣơng
thức của lớp ngƣời ta thƣờng dùng các tiền tố sau:
public, protected, private, static, final, abstract, synchronized
<kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp.
<Tên phƣơng thức>: đặt theo qui ƣớc giống tên biến.
<danh sách thông số>: có thể rỗng
• public: phƣơng thức có thể truy cập đƣợc từ bên ngồi lớp khai báo.
• protected: có thể truy cập đƣợc từ lớp khai báo và những lớp dẫn xuất từ nó.
• private: chỉ đƣợc truy cập bên trong bản thân lớp khai báo.
• static: phƣơng thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa
là phƣơng thức đó có thể đƣợc thực hiện kể cả khi khơng có đối tƣợng của lớp
chứa phƣơng thức đó.
• final: phƣơng thức có tiền tố này khơng đƣợc khai báo chồng ớ các lớp dẫn
xuất.
• abstract: phƣơng thức khơng cần cài đặt (khơng có phần source code), sẽ
đƣợc hiện thực trong các lớp dẫn xuất từ lớp này.
23
• synchoronized: dùng để ngăn các tác động của các đối tƣợng khác lên đối
tƣợng đang xét trong khi đang đồng bộ hóa. Dùng trong lập trình miltithreads.
Ví dụ:
public class xemay
{
public String nhasx;
public String model;
private float chiphisx;
protected int thoigiansx;
// so luong so cua xe may: 3, 4 so
protected int so;
// là biến tĩnh có giá trị là 2 trong tất cả các thể hiện tạo ra từ lớp xemay
public static int sobanhxe = 2;
public float tinhgiaban() { return 1.5 * chiphisx; }
}
Lƣu ý:
• Thơng thƣờng trong một lớp các phƣơng thức nên đƣợc khai báo dùng từ
khóa public, khác với vùng dữ liệu thƣờng là dùng tiền tố private vì mục đích an
tồn.
• Những biến nằm trong một phƣơng thức của lớp là các biến cục bộ (local)
và nên đƣợc khởi tạo sau khi khai báo.
5/ Khởi tạo một đối tƣợng
- Constructor thật ra là một loại phƣơng thức đặc biệt của lớp.
- Constructor dùng gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng
để khởi gán những giá trị măc định.
- Các constructor khơng có giá trị trả về, và có thể có tham số hoặc khơng có
tham số.
- Constructor phải có cùng tên với lớp và đƣợc gọi đến khi dùng từ khóa new.
- Nếu một lớp khơng có constructor thì Java sẽ cung cấp cho lớp một
constructor mặc định (default constructor). Những thuộc tính, biến của lớp sẽ đƣợc
khởi tạo bởi các giá trị mặc định (số: thƣờng là giá trị 0, kiểu luận lý là giá trị false,
kiểu đối tƣợng giá trị null, …)
Lƣu ý: thơng thƣờng để an tồn, dễ kiểm sốt và làm chủ mã nguồn chƣơng
trình chúng ta nên khai báo một constructor cho lớp.
Ví dụ:
public class xemay
{ // …
public xemay() { }
public xemay(String s_nhasx, String s_model,
f_chiphisx, int i_thoigiansx, int i_so);
{
nhasx = s_nhasx;
model = s_model;
chiphisx = f_chiphisx;
thoigiansx = i_thoigiansx;
so = i_so;
24
// hoặc
// this.nhasx = s_nhasx;
// this.model = s_model;
// this.chiphisx = f_chiphisx;
// this.thoigiansx = i_thoigiansx;
// this.so = i_so;
}
}
- Biến this
Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ Java. Một
class trong Java luôn tồn tại một biến this.
Biến this đƣợc sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó
Ví dụ:
<tiền tố> class A
{
<tiền tố> int <field_1>;
<tiền tố> String <field_2>;
// Contructor của lớp A
public A(int par_1, String par_2)
{
this.field_1 = par_1;
this.field_2 = par_2;
}
<tiền tố> <kiểu trả về> <method_1>()
{ // …}
<tiền tố> <kiểu trả về> <method_2>()
{
this.method_1()
// …
}
}
6/ Khai báo chồng phƣơng thức
Việc khai báo trong một lớp nhiều phƣơng thức có cùng tên nhƣng khác tham
số (khác kiểu dữ liệu, khác số lƣợng tham số) gọi là khai báo chồng phƣơng thức
(overloading method).
Ví dụ:
public class xemay
{
// khai báo fields …
public float tinhgiaban()
{
return 2 * chiphisx;
}
public float tinhgiaban(float huehong)
25