JavaJava
FundamentalsFundamentals
@uit.edu.vn
Khoa Mạng máy tính và Truyền thôngKhoa Mạng máy tính và Truyền thông
Đại học Công nghệ Thông tinĐại học Công nghệ Thông tin
Nội dungNội dung
Giới thiệu JavaGiới thiệu Java
Ứng dụng JavaỨng dụng Java
OOP trong JavaOOP trong Java
Wrapper ClassesWrapper Classes
StringString
Exception HandlingException Handling
Nhập/xuất dữ liệuNhập/xuất dữ liệu
Giới thiệu Java [1]Giới thiệu Java [1]
Ngôn ngữ lập trình hướng đối tượngNgôn ngữ lập trình hướng đối tượng
Ngôn ngữ thông dịchNgôn ngữ thông dịch
Độc lập hệ nền (MultiĐộc lập hệ nền (Multi--platform / Platformplatform / Platform--
Independent)Independent)Independent)Independent)
Giới thiệu Java [2]Giới thiệu Java [2]
Ngôn ngữ giống C/C++Ngôn ngữ giống C/C++
Không có khái niệm con trỏKhông có khái niệm con trỏ
Hủy đối tượng tự độngHủy đối tượng tự động
Biến môi trường CLASSPATH: chỉ đến Biến môi trường CLASSPATH: chỉ đến
thư mục / zip file / jar file chứa các class thư mục / zip file / jar file chứa các class
thư việnthư viện
Java Development KitJava Development Kit
Bộ công cụ phát triển Java (Windows)Bộ công cụ phát triển Java (Windows)
Thư mục <j2sdk_home>/binThư mục <j2sdk_home>/bin
javac.exejavac.exe: Java Compiler: Java Compiler
javac <java_source_file.java>javac <java_source_file.java> javac <java_source_file.java>javac <java_source_file.java>
java.exejava.exe: Java Interpreter: Java Interpreter
java <java_class_file.class>java <java_class_file.class>
Thực thi ứng dụng JavaThực thi ứng dụng Java
CompileCompile
Java Source FileJava Source File
(.java)(.java)
Ứng dụng JavaỨng dụng Java
Java APIJava API
Máy ảo JavaMáy ảo Java (JVM)(JVM)
Hệ thống phần cứng máy tínhHệ thống phần cứng máy tính
Java Class FileJava Class File
(.class)(.class)
InterpretInterpret
Ứng dụng JavaỨng dụng Java
HelloWorldApp.javaHelloWorldApp.java
public class HelloWorldApp{public class HelloWorldApp{
public static void main(String[] args){public static void main(String[] args){
System.out.println(“HelloWorld”);System.out.println(“HelloWorld”);System.out.println(“HelloWorld”);System.out.println(“HelloWorld”);
}}
}}
Kiểu dữ liệuKiểu dữ liệu
Primitive TypesPrimitive Types
bytebyte
charchar
booleanboolean
Reference TypesReference Types
arrayarray
classclass
interfaceinterfacebooleanboolean
shortshort
intint
longlong
floatfloat
doubledouble
interfaceinterface
Chuyển đổi kiểu dữ liệu [1]Chuyển đổi kiểu dữ liệu [1]
Một kiểu dữ liệu được chuyển đổi sang Một kiểu dữ liệu được chuyển đổi sang
một kiểu dữ liệu khácmột kiểu dữ liệu khác
Ví dụVí dụ
float c = 34.89675f;float c = 34.89675f;float c = 34.89675f;float c = 34.89675f;
int b = (int)c + 10;int b = (int)c + 10;
c = b;c = b;
Có hai cách chuyển đổi kiểu dữ liệu: tự Có hai cách chuyển đổi kiểu dữ liệu: tự
động và ép kiểuđộng và ép kiểu
Chuyển đổi kiểu dữ liệu [2]Chuyển đổi kiểu dữ liệu [2]
Khi dữ liệu ,với một kiểu dữ liệu cho Khi dữ liệu ,với một kiểu dữ liệu cho
trước, được gán cho một biến có kiểu dữ trước, được gán cho một biến có kiểu dữ
liệu khác, quá trình chuyển đổi kiểu dữ liệu khác, quá trình chuyển đổi kiểu dữ
liệu tự động thực hiện nếu thõa các điều liệu tự động thực hiện nếu thõa các điều liệu tự động thực hiện nếu thõa các điều liệu tự động thực hiện nếu thõa các điều
kiện sau:kiện sau:
Hai kiểu dữ liệu tương thích nhauHai kiểu dữ liệu tương thích nhau
Kiểu dữ liệu đích lớn hơn kiểu dữ liệu nguồnKiểu dữ liệu đích lớn hơn kiểu dữ liệu nguồn
Ép kiểu dữ liệu là sự chuyển đổi dữ liệu Ép kiểu dữ liệu là sự chuyển đổi dữ liệu
tường minh. Nó có thể làm mất thông tintường minh. Nó có thể làm mất thông tin
Các luật mở rộng kiểu dữ liệu Các luật mở rộng kiểu dữ liệu
Tất cả các giá trị kiểu Tất cả các giá trị kiểu bytebyte and and shortshort
được mở rộng thành kiểu được mở rộng thành kiểu intint
NếuNếu mộtmột toántoán hạnghạng cócó kiểukiểu longlong,, kiểukiểu dữdữ
liệuliệu củacủa toàntoàn biểubiểu thứcthức sẽsẽ đượcđược mởmở rộngrộng
thànhthành kiểukiểu longlongthànhthành kiểukiểu longlong
NếuNếu mộtmột toántoán hạnghạng cócó kiểukiểu floatfloat,, kiểukiểu
dữdữ liệuliệu củacủa toàntoàn biểubiểu thứcthức sẽsẽ đượcđược mởmở
rộngrộng thànhthành kiểukiểu floatfloat
NếuNếu mộtmột toántoán hạnghạng cócó kiểukiểu doubledouble,, kiểukiểu
dữdữ liệuliệu củacủa toàntoàn biểubiểu thứcthức sẽsẽ đượcđược mởmở
rộngrộng thànhthành kiểukiểu doubledouble
BiếnBiến
Khai báo (giống C/C++)Khai báo (giống C/C++)
kiểukiểu--dữdữ--liệu tênliệu tên--biến[=giábiến[=giá--trị];trị];
Ví dụVí dụ
double d = 5.5;double d = 5.5;double d = 5.5;double d = 5.5;
MảngMảng
Khai báoKhai báo
kiểukiểu--dữdữ--liệu tênliệu tên--biến[];biến[];
kiểukiểu--dữdữ--liệu tênliệu tên--biến[]=biến[]=
newnew kiểu_dữ_liệu[số_pt];kiểu_dữ_liệu[số_pt];
kiểukiểu--dữdữ--liệu tênliệu tên--biến[]=biến[]=
{gtrị1, gtrị2, ...};{gtrị1, gtrị2, ...};
Ví dụVí dụ
int a[];int a[];
int a[] = new int [10];int a[] = new int [10];
float af[] = {5.3, 7.6, 8.9, 3.0};float af[] = {5.3, 7.6, 8.9, 3.0};
Cấu trúc điều khiểnCấu trúc điều khiển
Cấu trúc rẽ nhánhCấu trúc rẽ nhánh
ifif--elseelse
switchswitch--casecase
Cấu trúc lặpCấu trúc lặp Cấu trúc lặpCấu trúc lặp
while while
dodo--while while
forfor
Class và ObjectClass và Object
Lớp (class) định nghĩa một kiểu dữ liệu Lớp (class) định nghĩa một kiểu dữ liệu
mớimới
Đối tượng (object) thuộc một lớp trong Đối tượng (object) thuộc một lớp trong
Java luôn được cấp phát động, sử dụng từ Java luôn được cấp phát động, sử dụng từ
khóa khóa newnewkhóa khóa newnew
Biến có kiểu dữ liệu là lớp có thể tham Biến có kiểu dữ liệu là lớp có thể tham
chiếu đến một đối tượng thuộc lớpchiếu đến một đối tượng thuộc lớp
Ví dụVí dụ
My_Class object;My_Class object;
object = new My_Class();object = new My_Class();
My_ClassMy_Class
objectobject
ClassClass
Khai báoKhai báo
accessaccess--specifier modifier specifier modifier
classclass <tên<tên--class>class>
[[extendsextends <tên<tên--supersuper--class>] class>]
[[implementsimplements <d/s<d/s--interface>] {interface>] {[[implementsimplements <d/s<d/s--interface>] {interface>] {
/* /*
* class body* class body
*/*/
}}
accessaccess--specifier:specifier:
public, public,
none (default)none (default)
modifier:modifier:
abstractabstract
finalfinal
Thuộc tínhThuộc tính
Khai báoKhai báo
accessaccess--specifier modifier specifier modifier
<khai<khai--báobáo--biến>;biến>;
accessaccess--specifier:specifier:
publicpublic
protectedprotected
none (default)none (default)
privateprivate
modifier:modifier:
staticstatic
finalfinal
Phương thức [1]Phương thức [1]
KhaiKhai báobáo
accessaccess--specifier modifier specifier modifier
kiểukiểu--dữdữ--liệu tênliệu tên--phươngphương--thức(thức(
danhdanh--sáchsách--thamtham--số) {số) {
}}
accessaccess--specifier:specifier:
publicpublic
protectedprotected
none (default)none (default)
privateprivate
modifier:modifier:
staticstatic
finalfinal
abstractabstract
Phương thức [2]Phương thức [2]
Nguyên tắc truyền tham số:Nguyên tắc truyền tham số:
Kiểu dữ liệu là kiểu cơ sở: truyền bằng tham số trịKiểu dữ liệu là kiểu cơ sở: truyền bằng tham số trị
Kiếu dữ liệu là kiểu tham chiếu: truyền bằng tham Kiếu dữ liệu là kiểu tham chiếu: truyền bằng tham
chiếuchiếu
OverloadingOverloading: các phương thức trong : các phương thức trong
cùng một class có cùng tên nhưng khác cùng một class có cùng tên nhưng khác
danh sách tham số.danh sách tham số.
OOverriding:verriding: các phương thức giống các phương thức giống
nhau nhưng được khai báo trong các lớp nhau nhưng được khai báo trong các lớp
khác nhau có quan hệ kế thừa.khác nhau có quan hệ kế thừa.
Phương thức [3]Phương thức [3]
Ví dụVí dụ
void f(int i) { … }void f(int i) { … }
void g(My_Class o) { … }void g(My_Class o) { … }
Truyền tham trịTruyền tham trị
int k=5;int k=5;int k=5;int k=5;
f(5);f(5);
f(k);f(k);
Truyền tham chiếuTruyền tham chiếu
My_Class obj = new My_Class();My_Class obj = new My_Class();
g(obj);g(obj);
ConstructorConstructor
Có cùng tên với tên lớp và không có kiểu Có cùng tên với tên lớp và không có kiểu
trả vềtrả về
Được tự động gọi thực hiện ngay khi đối Được tự động gọi thực hiện ngay khi đối
tượng thuộc lớp được tạo ratượng thuộc lớp được tạo ra
Phương thức khởi tạoPhương thức khởi tạo
Không tham số: phương thức khởi tạo mặc Không tham số: phương thức khởi tạo mặc
địnhđịnh
Có tham sốCó tham số
Tùy thuộc vào cách khởi tạo đối tượng mà Tùy thuộc vào cách khởi tạo đối tượng mà
phương thức khởi tạo tương ứng được gọi phương thức khởi tạo tương ứng được gọi
thực hiệnthực hiện
Kế thừaKế thừa
NHANVIENNHANVIEN
String maNV;String maNV;
String hotenNV;String hotenNV;
……
double tinhLuong();double tinhLuong();
NVHDNVHD
int ngaycong;int ngaycong;
……
……
NVBCNVBC
Lớp dẫn xuất kế thừa tập các thuộc tính, Lớp dẫn xuất kế thừa tập các thuộc tính,
phương thức được khai báo trong lớp cơ phương thức được khai báo trong lớp cơ
sởsở
double tinhLuong();double tinhLuong();
……
NVBCNVBC
int hsluong;int hsluong;
……
……
Kế thừa & ConstructorKế thừa & Constructor
Lệnh gọi thực thi phương thức khởi tạo Lệnh gọi thực thi phương thức khởi tạo
của lớp cơ sở phải là câu lệnh đầu tiên của lớp cơ sở phải là câu lệnh đầu tiên
trong hàm khởi tạo của lớp dẫn xuấttrong hàm khởi tạo của lớp dẫn xuất
Nếu trong phương thức khởi tạo của lớp Nếu trong phương thức khởi tạo của lớp Nếu trong phương thức khởi tạo của lớp Nếu trong phương thức khởi tạo của lớp
dẫn xuất không gọi (tường minh) phương dẫn xuất không gọi (tường minh) phương
thức khởi tạo của lớp cơ sở thì phương thức khởi tạo của lớp cơ sở thì phương
thức khởi tạo mặc định của lớp cơ sở luôn thức khởi tạo mặc định của lớp cơ sở luôn
được tự động gọi thực hiệnđược tự động gọi thực hiện
Ví dụVí dụ
class A {class A {
A () {A () {
}}
class B extends A {class B extends A {
B () {B () {
[super();][super();]
......
}}
B (int i, int j) {B (int i, int j) {
}}
A (int i) {A (int i) {
}}
}//end class A}//end class A
super(i);super(i);
......
}}
B (int k) {B (int k) {
......
}}
}//end class B}//end class B
Overriding & Phạm vi truy cậpOverriding & Phạm vi truy cập
Phạm vi truy cập của các phương thức Phạm vi truy cập của các phương thức
overriding trong lớp dẫn xuất phải bằng overriding trong lớp dẫn xuất phải bằng
hoặc rộng hơn trong lớp cơ sởhoặc rộng hơn trong lớp cơ sở
Thứ tự truy xuấtThứ tự truy xuất Thứ tự truy xuấtThứ tự truy xuất
publicpublic
protectedprotected
none (default)none (default)
privateprivate
rộngrộng
hẹphẹp