l Mọi chương trình Java phải có ít nhất một lớp chứa phương thức main.. Tên lớp chứa phương thức main phải trùng với tên tệp chương trình.. l Cấu trúc chung của một chương trình Java: im
Trang 1PHẦN I
CƠ BẢN VỀ LẬP TRÌNH JAVA
GV Ngô Công Thắng
Bộ môn Công nghệ phần mềm
Khoa Công nghệ thông tin
Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 2
Chương 1: Giới thiệu về Java
1 Lịch sử hình thành và phát triển
2 Các đặc điểm của Java
3 Các phiên bản của Java
4 Các bước viết và chạy thử một chương trình Java
5 Các thành phần của chương trình Java
6 Cấu trúc chung của một chương trình Java
1 Lịch sử hình thành và phát triển
l Java là một ngôn ng lập trình hướng đối được đang
được ưa chuộng
l Java là một ngôn ngữ mạnh ngang tầm với C++ So với
C++, Java “mềm dẻo và tao nhã” hơn.
l Java được công bố vào năm 1990, tác giả là James
Gosling và Sun Microsystems.
l Tên ban đầu là Oak (cây sồi)
l Java, 20/05/1995, Sun World
l HotJava: Trình duyệt Web hỗ trợ Java đầu tiên
l JDK Evolutions
l J2SE, J2ME, and J2EE
2 Các đặc điểm của Java
thông dịch mạnh mẽ bảo mật không phụ thuộc HĐH khả chuyển
hiệu quả cao
đa luồng linh động
Trang 2Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 5
3 Các phiên bản của Java
l Java Standard Edition (J2SE)
J2SE có thể được dùng để phát triển các ứng dụng hoặc các applet độc lập phía client (client-side).
l Java Enterprise Edition (J2EE)
J2EE có thể được dùng để phát triển các ứng dụng phía server (server-side) như các Java servlet và Java ServerPages
l Java Micro Edition (J2ME)
J2ME có thể được sử dụng để phát triển các ứng dụng cho các thiết bị di động như ĐTDĐ.
l Các chương trình ví dụ trong môn học Lập trình Java viết trên J2SE.
4 Các bước viết và chạy thử một
chương trình Java
soạn thảo text hoặc trong IDE.
Quá trình tạo và chạy một chương trình java
bytecode
Tạo/Sửa Source Code
Compile Source Code vd: javac Welcome.java
Run Bytecode vd: java Welcome Bytecode Source Code
Nếu có lỗi
Trang 3Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 9
Một chương trình Java đơn giản
// Chuong trinh dua ra dong chu Welcome to Java!
l Chú ý: Đặt tên tệp phải trùng với tên lớp, khi gõ
lệnh biên dịch từ DOS thì tên tệp phải giống hệt
tên lớp (cả hoa và thường).
Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 10
Tạo, biên dịch, chạy chương trình
trên DOS
l Soạn thảo chương trình:
l Soạn thảo chương trình (Notepad, Wordpad…)
l Ghi tệp với tên có đuôi java
Ví dụ: Ghi tệp Welcome.java vào thư mục C:\javapro
Thiết lập biến môi trường
Java từ bất kỳ thư mục nào trong DOS ta
phải thiết lập biến môi trường PATH như
sau:
l Kích phải chuột vào My Computer ->
Properties -> Advanced -> Environment
Variables
l Chọn biến Path -> Edit -> Gõ thêm đường
dẫn tới thư mục Bin của JDK Ví dụ:
C:\Program Files\Java\jdk1.6.0_02\bin
Thiết lập biến môi trường
Trang 4Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 13
Thiết lập biến môi trường
Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 14
5 Các thành phần của một chương trình Java
l Comments (Chú giải, như C++)
l Reserved words (Từ khóa)
l Modifiers (Như C++, ví dụ: public, private, static)
l Statements (Câu lệnh, như C++)
l Blocks (Khối lệnh, như C++)
method, nó là điểm khởi đầu khi thực hiện
chương trình.
public static void main(String[ ] args)
l Trình thông dịch Java coi chương trình Java như một lớp.
l Mọi chương trình Java phải có ít nhất một lớp chứa phương thức main Tên lớp chứa phương thức main phải trùng với tên tệp chương trình.
l Cấu trúc chung của một chương trình Java:
import Thư viện lớp (package);//#include của C++
public class TenLop //Ten lop nay la ten tep ctrinh {
public static void main(String[] args) {
//Các lệnh của chương trình Java để ở đây }
//Dinh nghia cac phuong thuc khac }
Trang 5Bài giảng LT JAVA - Phần 1,Chươ ng 1 GV Ngô Công Thắng 17
6 Cấu trúc chung của
sẵn trong hệ thống Java để có thể tái sử dụng.
JOptionPane.showMessageDialog(null, "Welcome
to Java!", "Example 1.2 Output",
JOptionPane.INFORMATION_MESSAGE);
Trang 6Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 1
Chương 2 Các kiểu dữ liệu cơ bản
I Các kiểu dữ liệu cơ bản
II Khai báo biến và hằng
III Biểu thức
IV Chuyển đổi kiểu dữ liệu
V Vào/Ra dữ liệu với Java
Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 2
Chương 2 Các kiểu dữ liệu cơ bản
I Các kiểu dữ liệu cơ bản
Giống các kiểu dữ liệu số của C++
I.1 Các kiểu dữ liệu số
Trang 7Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 5
I.2 Kiểu ký tự
l Giống như C++, được định nghĩa với từ khóa
char
l Kiểu char có kích thước 2 byte Một biến char có
thể chứa cả ký tự ASCII và ký tự Unicode.
l Kiểu char có thể dùng như kiểu số.
l Hằng ký tự là một ký tự đặt giữa 2 dấu phẩy
trên Ví dụ: ‘A’
l Hằng xâu ký tự là một dãy ký tự bất kỳ đặt giữa
hai dấu nháy kép Ví dụ: “DHNN1”
Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 6
I.3 Kiểu logic (boolean)
logic được định nghĩa với tên chuẩn là
boolean, chỉ có 2 giá trị là true và false.
C++.
I.4 Kiểu xâu ký tự
l Khác với C++, Java đưa vào kiểu dữ liệu xâu ký
tự Kiểu xâu ký tự được định nghĩa với tên chuẩn là String Thực ra kiểu xâu ký tự là một lớp đối tượng xâu có sẵn trong Java.
l Khi khai báo biến xâu ký tự có thể khởi tạo bằng một hằng xâu ký tự.
String st = “DHNN1”;
l Có thể dùng phép toán + và += để ghép nhiều xâu ký tự, ghép xâu ký tự với dữ liệu không phải xâu ký tự (dữ liệu số).
Trang 8Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 9
Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 10
II Khai báo biến và hằng
cho biến giống như C++ Ví dụ:
int a=100;
thể Cú pháp khai báo hằng như sau:
final TenKieu TenHang = GiaTri;
Ví dụ: final double PI=3.14159;
III Biểu thức
C++.
phép toán trong một biểu thức giống C++.
IV Chuyển đổi kiểu dữ liệu
động, quy tắc chuyển đổi kiểu tự động giống C++.
Trang 9Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 13
V Vào/Ra dữ liệu với Java
1 Lấy dữ liệu vào từ bàn phím
2 Đưa dữ liệu ra màn hình
3 Ví dụ:
Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 14
V.1 Lấy dữ liệu vào từ bàn phím
phương thức showInputDialog() của lớp JOptionPane, phương thức này cho phép
ta nhập dữ liệu qua hộp thoại.
tự => dùng biến xâu để chứa dữ liệu nhập vào, sau đó chuyển xâu ký tự thành kiểu
V.1 Lấy dữ liệu vào từ bàn phím
giá trị số nguyên ta dùng phương thức parseInt của lớp Integer.
int intV = Integer.parseInt(intString);
giá trị số thực ta dùng phương thức parseDouble của lớp Double.
double doubleV = Double.parseDouble(doubleString);
Trang 10Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 17
V.2 Đưa dữ liệu ra màn hình
phương thức showMessageDialog() của
lớp JOptionPane, phương thức này cho
phép ta đưa dữ liệu qua hộp thoại.
phép + hoặc += để nối xâu ký tự các các
giá trị kiểu dữ liệu cơ bản.
V.2 Đưa dữ liệu ra màn hình
l Để định dạng dữ liệu đưa ra màn hình ta dùng
phương thức format() của lớp String, phương
thức này định dạng các dữ liệu thành xâu ký tự
và trả về xâu ký tự đã định dạng đó.
String st = String.format ( Hằng xâu chứa các tác tử định dạng, Các dữ liệu );
l Các tác tử định dạng bắt đầu bằng dấu % theo
sau là các chữ cái biểu thị loại dữ liệu sẽ định
dạng Ví dụ: %b định dạng giá trị logic thành
false hoặc true, %d định dạng các số nguyên,…
V.2 Đưa dữ liệu ra màn hình
“Ha Noi” Xâu ký tự
%b
Ví dụ Loại dữ liệu định dạng
Tác tử định dạng
Trang 11Bài giảng LT JAVA - Phần 1,Chương 2 GV Ngô Công Thắng 21
V.2 Đưa dữ liệu ra màn hình
l Có thể xác định độ rộng và độ chính xác ngay
sau dấu %, giữa độ rộng và độ chính xác có một
dấu chấm Độ rộng là số khoảng trống dành cho
dữ liệu, mỗi khoảng trống chứa được một ký tự
rộng của nó, để căn trái ta thêm dấu trừ ngay sau dấu % Ví dụ %-10d => Số nguyên có độ rộng 10, được căn trái.
V.3 Ví dụ
hình chữ nhật biết hai cạnh a, b.
Trang 12Bài giảng LT JAVA - Phần 1,Chương 3 GV Ngô Công Thắng 1
Chương 3 Các lệnh điều khiển
II.1 Lệnh lặp với số lần lặp xác định for
II.2 Lệnh với số lần lặp không xác định
II.2.1 Lệnh lặp kiểm tra điều kiện trước while
II.2.2 Lệnh lặp kiểm tra điều kiện sau do-while
III Lệnh break và continue
Bài giảng LT JAVA - Phần 1,Chương 3 GV Ngô Công Thắng 2
Chương 3 Các lệnh điều khiển
chấm Nhãn lệnh được đặt trước câu lệnh Người ta thường đánh nhãn cho các lệnh lặp.
Chương 3 Các lệnh điều khiển
Trang 13Bài giảng LT JAVA - Phần 1,Chương 3 GV Ngô Công Thắng 5
Chương 3 Các lệnh điều khiển
chương trình
xếp 3 số này theo chiều tăng dần.
năm dương lịch Cho biết tháng trong năm đó có
bao nhiêu ngày.
theo công thức:
1 2
1 )
1
( 7
1 5
1 3
1 1
− + +
− +
Bài giảng LT JAVA - Phần 1,Chương 3 GV Ngô Công Thắng 6
Chương 3 Các lệnh điều khiển
Trang 14Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 1
Chương 4 Phương thức (Method)
4.1 Giới thiệu về phương thức
Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 2
4.1 Giới thiệu về phương thức
l Tất cả các chương trình con trong Java đều thuộc một lớp nào đó, chúng được gọi là các phương thức (hàm thành viên trong C++).
l Khác với C++, các phương thức trong Java phải
đị nh nghĩa ngay trong khai báo lớp.
l Cú pháp định nghĩa phương thức giống định nghĩa hàm thành viên trong C++.
l Cú pháp gọi phương thức giống cú pháp gọi hàm thành viên trong C++.
4.2 Tạo phương thức
so với C++ ở chỗ là có thể có thêm các từ
khóa modifier trước kiểu trả về.
Modifier KieuTraVe TenPThuc(DS cac tham so)
else return num2;
Trang 15Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 5
4.3 Sử dụng phương thức
phương thức.
số hình thức hay gọi tắt là tham số.
các tham số được gọi tham số thực sự
hay đối số.
Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 6
4.3 Sử dụng phương thức
chứa định nghĩa phương thức thì lời gọi phương thức chỉ có tên phương thức cùng các đối số đặt trong ngoặc tròn.
cú pháp gọi như sau:
TenDoiTuong.TenPThuc(Cac doi so) Hoặc
TenLop.TenPThuc(Cac doi so) //nếu PThuc là tĩnh
4.4 Truyền đối số theo giá trị
phương thức chỉ có một kiểu là truyền đối
số theo giá trị.
4.5 Chồng phương thức
hàm trong C++: Các phương thức có tên giống nhau nhưng danh sách các tham số khác nhau.
trình biên dịch dựa vào kiểu đối số để xác định hàm được gọi.
Trang 16Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 9
4.6 Biến cục bộ
trong phương thức (giống biến tự động
phương thức của lớp Math.
phương thức tĩnh (static) nên lời gọi phương thức phải gắn với tên lớp Ví dụ:
4.7 Các phương thức của lớp
Math
sin(x) Cho sinx
cos(x) Cho cosx
tan(x) Cho tgx
asin(x) Cho arcsinx
acos(x) Cho arccosx
atan(x) Cho arctgx
toRadians(degrees) Đổi độ sang rad
toDegrees(radians) Đổi rad sang độ
Trong đó x có đơn vị là radian.
sqrt(x) Căn bậc 2 của x
l Các hàm làm tròn gồm có:
ceil(x) Làm tròn x lên số nguyên gần nhất floor(x) Làm tròn x xuống số nguyên gần nhất rint(x) Làm tròn x tới số nguyên gần nhất, nếu x ở
giữa hai số nguyên thì làm tròn thành số chẵn round(x) Làm tròn x
Trang 17Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 13
ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ
hơn 1 Để có số ngẫu nhiên nằm giữa a
và a+b (trừ a + b) ta dùng công thức sau:
l Phân tán phần mềm thuận tiện
l Bảo vệ các thành viên của lớp
4.8.1 Quy ước đặt tên gói
l Trong các gói có thể lại chứa các gói khác.
Ví dụ: java.lang.Math cho biết lớp Math nằm
trong gói lang, gói lang nằm trong gói java Tổ
chức các gói theo kiểu này sẽ đảm bảo các tên
gói không bị trùng nhau.
l Nếu muốn đóng gói các lớp để đưa lên Internet
cho mọi người sử dụng thì phải chọn một tên
duy nhất, người ta thường lấy đảo ngược của
tên miền Internet làm tiền tố của tên gói.
Ví dụ: Tên miền của ĐHNN1 là hau1.edu.vn thì
đặt tên gói là vn.edu.hau1.TenGoi
l Theo quy ước đặt tên gói dùng chữ thường.
4.8.2 Thư mục chứa các gói
l Java yêu cầu cấu trúc thư mục chứa gói phải tương ứng với tên gói.
Ví dụ: với tên gói là vn.edu.hau1.mypackage thì phải tạo cấu trúc thư mục là \vn\edu\hau1\mypackage
l Để Java tìm được nơi đặt cây thư mục gói thì biến môi trường classpath phải xác định thư mục chứa cậy thư mục gói.
Ví dụ: nếu cây thư mục gói đặt trong thư mục c:\javapro thì classpath = ;c:\javapro
Dấu xác định thư mục hiện tại luôn ở trong classpath.
Trang 18Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 17
4.8.3 Đặt các lớp vào trong các gói
dịch.
package tengoi;
package vn.edu.hau1.mypackage;
Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 18
4.8.3 Đặt các lớp vào trong các gói
l Các lớp phải được khái báo là puplic để các chương trình khác có thể dùng được Nếu muốn chứa nhiều lớp trong một gói thì phải
để mỗi lớp trên một file riêng vì trên một file chỉ được phép có một lớp public.
l Các file class có thể nén thành một file, để sử dụng các lớp trong file nén này thì trong classpath phải chứa đường dẫn tới file nén.
1
2 1 2
Trang 19Bài giảng LT JAVA - Phần 1,Chương 4 GV Ngô Công Thắng 21
Bài tập chương 4
chữ số trong một số nguyên Ví dụ: số
nguyên 234 có tổng các chữ số bằng 2 + 3 + 4 = 9.
Trang 20Bài giảng LT JAVA - Phần 1,Chương 5 GV Ngô Công Thắng 1
Bài giảng LT JAVA - Phần 1,Chương 5 GV Ngô Công Thắng 2
5.1 Khai báo và định nghĩa
biến mảng
5.1.1 Khai báo biến mảng 5.1.2 Tạo mảng (định nghĩa mảng) 5.1.3 Kích thước và giá trị mặc định của mảng
5.1.4 Truy nhập phần tử mảng
5.1.1 Khai báo biến mảng
l Cú pháp khai báo biến mảng:
KieuDuLieu[ ] TenBienMang;
l Khác với C++, việc khai báo biến mảng trong
Java không tạo ra mảng, tức là không cấp phát
vùng nhớ cho mảng, nó chỉ tạo ra một biến mà
sau này có thể dùng để tham chiếu tới mảng.
l Biến mảng thực chất là biến tham chiếu Về bản
chất biến tham chiếu giống như con trỏ.
l Ví dụ: double[ ] a;
5.1.2 Tạo mảng (định nghĩa mảng)
tử new để tạo ra mảng (giống cấp phát mảng động trong C++) theo cú pháp sau:
TenBienMang = new KieuDuLieu[KichThuoc];
Ví dụ: a = new double[10];
phần tử và gán tham chiếu tới TenBienMang.
Trang 21Bài giảng LT JAVA - Phần 1,Chương 5 GV Ngô Công Thắng 5
5.1.2 Tạo mảng (định nghĩa mảng)
phát bộ nhớ động => Mảng trong Java
luôn là mảng động.
giải phóng các vùng nhớ không còn được
tham chiếu được thực hiện tự động bởi
JVM Người lập trình không phải lo việc
giải phóng các vùng nhớ được cấp phát
động bởi toán tử new
Bài giảng LT JAVA - Phần 1,Chương 5 GV Ngô Công Thắng 6
5.1.2 Tạo mảng (định nghĩa mảng)
tạo mảng và gán tham chiếu tới biến mảng trong một lệnh:
KieuDuLieu[ ] TenBienMang = new KieuDuLieu[KichThuoc];
Ví dụ: double[ ] myList = new double[10];
double[] myList = new double[5];
reference
myList
Trang 22Bài giảng LT JAVA - Phần 1,Chương 5 GV Ngô Công Thắng 9
5.1.3 Kích thước và giá trị
mặc định của mảng
có một biến cho biết kích thước của mảng:
TenBienMang.length
Ví dụ: myList.length cho biết kích thước của
mảng myList là 5
ban đầu bằng 0 đối với mảng số, bằng
‘\u0000’ đối mảng char và bằng false đối
với mảng boolean.
Bài giảng LT JAVA - Phần 1,Chương 5 GV Ngô Công Thắng 10
5.1.4 Truy nhập phần tử mảng
biến mảng ta có thể truy nhập trực tiếp các phần tử của mảng thông qua tên biến mảng và chỉ số truy nhập đặt trong ngoặc vuông (giống như C++).
đến KichThuoc - 1
5.2 Copy mảng
cho nhau, tuy nhiên khi gán hai biến mảng
chỉ có giá trị tham chiếu được gán còn nội
dung mảng không được gán Do đó, sau
lệnh gán, cả hai biến mảng cùng tham