Bài giảng Lập trình Java - Huỳnh Công Pháp

Giới thiệu

• Sự phát triển của Java

• Hƣớng tới ngƣời dùng

• Giống với C / C++Các đặc trƣng của Java

Đơn giản

Hướng đối tượng

Độc lập phần cứng

Mạnh

Bảo mật

Phân tán

Đa luồng

Động

pdf 239 trang phuongnguyen 9140
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java - Huỳnh Công Pháp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình Java - Huỳnh Công Pháp

Bài giảng Lập trình Java - Huỳnh Công Pháp
BÀI GIẢNG LẬP TRÌNH JAVA 
GV : HUỲNH CÔNG PHÁP 
KHOA : CNTT-ĐHBK 
Chƣơng 1 
Giới thiệu ngôn ngữ 
lập trình Java 
Giới thiệu 
• Sự phát triển của Java 
• Hƣớng tới ngƣời dùng 
• Giống với C / C++ 
Các đặc trƣng của Java 
■ Đơn giản 
■ Hướng đối tượng 
■ Độc lập phần cứng 
■ Mạnh 
■ Bảo mật 
■ Phân tán 
■ Đa luồng 
■ Động 
Các chƣơng trình dịch 
truyền thống 
Chƣơng trình dịch Java 
CÁC LOẠI CHƢƠNG TRÌNH JAVA 
■ Applets 
■ Ứng dụng độc lập (console Application) 
■ Ứng dụng giao diện (GUI Application) 
■ Servlet 
■ Ứng dụng cơ sở dữ liệu 
Máy ảo Java 
• Là một phần mềm dựa trên cơ sở máy tính ảo 
• Là tập hợp các lệnh logic để xác định hoạt 
động của máy tính 
• Đƣợc xem nhƣ là một hệ điều hành thu nhỏ 
• Nó thiết lập 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 
Quá trình dịch chƣơng trình 
Java 
• Trình biên dịch chuyển mã nguồn thành tập 
các lệnh không phụ thuộc vào phần cứng cụ 
thể 
• Trình thông dịch trên mỗi máy chuyển tập 
lệnh này thành chƣơng trình thực thi 
• Máy ảo tạo ra một môi trƣờng để thực thi các 
lệnh bằng cách: 
– Nạp các file .class 
– Quản lý bộ nhớ 
– Dọn “rác” 
Trình dịch Java 
Java Development Kit 
• Java 1.0 - Sử dụng lần đầu vào năm 
1995 
• Java 1.1 – Đƣa ra năm 1997 
• Java 2 – Phiên bản mới nhất 
Bộ công cụ JDK 
• Trình biên dịch, 'javac' 
– javac [options] sourcecodename.java 
• Trình thông dịch, 'java' 
– java [options] classname 
• Trình dịch ngƣợc, 'javap' 
– javap [options] classname 
• Công cụ sinh tài liệu, 'javadoc' 
– javadoc [options] sourcecodename.java 
• Chƣơng trình tìm lỗi - Debug, 'jdb„ 
– jdb [options] sourcecodename.java 
 OR 
– jdb -host -password [options] 
sourcecodename.java 
• Chƣơng trình xem Applet , 
'appletviewer„ 
– appletviewer [options] 
sourcecodename.java / url 
Các gói chuẩn của Java 
• java.lang 
• java.applet 
• java.awt 
• java.io 
• java.util 
• java.net 
• java.awt.event 
• java.rmi 
• java.security 
• java.sql 
Các đặc trƣng mớI của 
Java2 
• Swing 
• Kéo và thả 
• Java 2D API 
• Âm thanh 
• RMI 
Chƣơng 2 
Các phần tử cơ bản ngôn ngữ Java 
Cấu trúc một 
chƣơng trình Java 
• Xác lập thông tin môi trƣờng 
• Khai báo lớp đối tƣợng (Class) 
• Các thành phần (Tokens): 
– Định danh 
– Từ khóa / từ dự phòng 
– Ký tự phân cách 
– Nguyên dạng (Literals) 
– Toán tử 
Ví dụ một chƣơng trình Java 
mẫu 
// This is a simple program called “Ex1.java” 
class Ex1 
{ 
 public static void main(String args[]) 
 { 
 System.out.println(“My first program in Java”); 
 } 
} 
Biên dịch chƣơng trình java 
• ..\jdk\bin>javac Ex1.java 
• ..\jdk\bin>java Ex1 
• Kết quả: 
My first program in Java 
Truyền đối số trong dòng lệnh 
class Pass 
{ 
 public static void main(String parameters[]) 
 { 
 System.out.println("This is what the main method 
 received"); 
 System.out.println(parameters[0]); 
 System.out.println(parameters[1]); 
 System.out.println(parameters[2]); 
 } 
} 
Truyền đối số trong dòng lệnh 
(Tiếp theo) 
Các phần tử cơ bản củangôn ngữ 
Java 
• Lớp và phƣơng thức (Classes & 
Methods) 
• Kiểu dữ liệu 
• Biến số 
• Toán tử 
• Cấu trúc điều khiển 
Lớp trong Java 
• Cú pháp khai báo lớp (Class) 
class Classname 
{ 
 var_datatype variablename; 
 : 
 met_datatype methodname(parameter_list) 
 : 
} 
Lớp mẫu 
Các lớp lồng nhau (Nested 
Classes) 
■ Việc định nghĩa một lớp bên trong một lớp 
khác được gọi là “xếp lồng” (Nesting) 
■ Các kiểu xếp lồng: 
■ Tĩnh (Static) 
■ Động (Non-static) 
Kiểu dữ liệu 
■ Kiểu dữ liệu cơ sở (Primitive Data Types) 
■ Kiểu dữ liệu tham chiếu (Reference data types) 
Kiểu dữ liệu cơ sở 
• byte 
• char 
• boolean 
• short 
• int 
• long 
• float 
• double 
Kiểu dữ liệu tham chiếu 
• Mảng (Array) 
• Lớp (Class) 
• Interface 
Ép kiểu (Type Casting) 
• Kiểu dữ liệu này đƣợc chuyển đổi sang 
một kiểu dữ liệu khác 
• Ví dụ 
float c = 34.89675f; 
int b = (int)c + 10; 
Biến số 
• Khai báo biến số gồm 3 thành phần: 
– Kiểu dữ liệu của biến số 
– Tên biến 
– Giá trị ban đầu của biến (không bắt 
buộc) 
• Cú pháp 
datatype identifier [=value][, 
identifier[=value]...]; 
Những từ khóa của Java 
Khai báo mảng 
• Ba cách để khai báo mảng: 
– datatype identifier [ ]; 
– datatype identifier [ ] = new 
datatype[size]; 
– datatype identifier [ ]= 
{value1,value2,.valueN}; 
Phƣơng thức 
(Methods in Classes) 
• Phƣơng thức đƣợc định nghĩa nhƣ là 
một hành động hoặc một tác vụ thật sự 
của đối tƣợng 
• Cú pháp 
access_specifier modifier datatype 
method_name(parameter_list) 
{ 
//body of method 
} 
Ví dụ về sử dụng phƣơng thức 
class Temp { 
 static int x = 10; // variable 
 public static void show( ) { // method 
 System.out.println(x); 
 } 
 public static void main(String args[ ]) { 
 Temp t = new Temp( ); // object 1 
 t.show( ); // method call 
 Temp t1 = new Temp( ); // object 2 
 t1.x = 20; 
 t1.show( ); 
 } 
} 
Access specifiers 
• public 
• private 
• protected 
Method Modifiers 
• static 
• abstract 
• final 
• native 
• synchronized 
• volatile 
Những phƣơng thức đƣợc nạp chồng : 
(Methods Overloading) 
• Những phƣơng thức đƣợc nạp chồng : 
– Cùng ở trong một lớp 
– Có cùng tên 
– Khác nhau về danh sách tham số 
• Những phƣơng thức đƣợc nạp chồng là 
một hình thức đa hình (polymorphism) 
trong quá trình biên dịch (compile time) 
Ghi đè phƣơng thức 
(Methods Overriding) 
• Những phƣơng thức đƣợc ghi đè: 
– Có mặt trong lớp cha (superclass) cũng 
nhƣ lớp kế thừa (subclass) 
– Đƣợc định nghĩa lại trong lớp kế thừa 
(subclass) 
• Những phƣơng thức đƣợc ghi đè là một 
hình thức đa hình (polymorphism) trong 
quá trình thực thi (Runtime) 
Phƣơng thức khởi tạo 
(Class Constructors) 
• Là một phƣơng thức đặc biệt dùng để khởi 
tạo giá trị cho các biến thành viên của lớp 
đối tƣợng 
• Có cùng tên với tên lớp và không có giá trị 
trả về 
• Đƣợc gọi khi đối tƣợng đƣợc tạo ra 
• Có 2 loại: 
– Tƣờng minh (Explicit constructors) 
– Ngầm định (Implicit constructors) 
Phƣơng thức khởi tạo của lớp dẫn xuất 
(Derived class constructors) 
• Có cùng tên với lớp dẫn xuất (subclass) 
• Mệnh đề gọi constructor của lớp cha 
(superclass) phải là mệnh đề đầu tiên 
trong constructor của lớp dẫn xuất 
(subclass) 
Các toán tử 
• Các loại toán tử: 
– Toán tử số học (Arithmetic operators) 
– Toán tử dạng Bit (Bitwise operators) 
– Toán tử so sánh (Relational operators) 
– Toán tử logic (Logical operators) 
– Toán tử điều kiện (Conditional operator) 
– Toán tử gán (Assignment operator) 
Toán tử số học 
Arithmetic Operators 
+ Addition (Phép cộng) 
- Subtraction (Phép trừ) 
* Multiplication (Phép nhân) 
/ Division (Phép chia) 
% Modulus (Lấy số dƣ) 
++ Increment (Tăng dần) 
-- Decrement (Giảm dần) 
+= Phép cộng và gán 
-= Phép trừ và gán 
*= Phép nhân và gán 
/= Phép chia và gán 
%= Phép lấy số dƣ và gán 
Toán tử Bit 
(Bitwise Operators) 
~ Phủ định (NOT) 
& Và (AND) 
| Hoặc (OR) 
^ Exclusive OR 
>> Dịch sang phải (Shift right) 
<< Dịch sang trái (Shift left) 
Toán tử so sánh 
(Relational Operators) 
== So sánh bằng 
!= So sánh khác 
< Nhỏ hơn 
> Lớn hơn 
<= Nhỏ hơn hoặc bằng 
>= Lớn hơn hoặc bằng 
Toán tử Logic 
(Logical Operators ) 
&& Logical AND 
|| Logical OR 
! Logical unary NOT 
Toán tử điều kiện 
(Conditional Operator) 
• Cú pháp 
 Biểu thức 1 ? Biểu thức 2 : Biểu thức 3; 
• Biểu thức 1 
 Điều kiện kiểu Boolean trả về giá trị True 
hoặc False 
• Biểu thức 2 
 Trả về giá trị nếu kết quả của mệnh đề 1 là 
True 
• Biểu thức 3 
 Trả về giá trị nếu kết quả của mệnh đề 1 là 
False 
Toán tử gán 
(Assignment Operator) 
= Assignment (Phép gán) 
Giá trị có thể đƣợc gán cho nhiều biến số 
• Ví dụ 
a = b = c = d = 90; 
Thứ tự ƣu tiên của các toán tử 
■ Thứ tự của các toán tử có thể được thay đổi bằng 
cách sử dụng các dấu ngoặc đơn trong mệnh đề 
trong ngoặc tính trước 1. 
Các toán tử gán như =,*=,/=,+=,-= 5. 
Các toán tử logic và Bit như &&,II,&,I,^ 5. 
Các toán tử quan hệ như >,=,<=,= =,!= 4. 
Các toán tử số học và các toán tử dịch như 
*,/,+,-,> 
3. 
Các toán tử đơn như +,-,++,-- 2. 
Toán tử Thứ tự 
Các kí tự định dạng xuất dữ liệu 
 (Escape Sequences) 
In dấu nháy kép (’’) \’’ 
In dấu nháy đơn (’) \’ 
In dấu \ \\ 
Chuyển con trỏ đến vị trí dừng Tab kế tiếp 
(ký tự Tab) 
\t 
Chuyển con trỏ đến đầu dòng hiện hành \r 
Xuống dòng mới \n 
Mô tả 
Escape 
Sequence 
Các lệnh điều khiển 
• Điều khiển rẻ nhánh: 
– Mệnh đề if-else 
– Mệnh đề switch-case 
• Vòng lặp (Loops): 
– Vòng lặp while 
– Vòng lặp do-while 
– Vòng lặp for 
Lệnh if-else 
• Cú pháp 
if (condition) 
{ 
 action1 statements; 
} 
else 
{ 
 action2 statements; 
} 
Lệnh switch-case 
• Cú pháp 
 switch (expression) 
 { 
 case 'value1': action1 statement(s); 
 break; 
 case 'value2': action2 statement(s); 
 break; 
 : 
 : 
 case 'valueN': actionN statement(s); 
 break; 
 default: default_action statement(s); 
 } 
Lệnh lặp while 
■ Cú pháp 
 while(condition) 
 { 
 action statements; 
 : 
 : 
 } 
Lệnh lặp do-while 
• Cú pháp 
 do 
 { 
 action statements; 
 : 
 : 
 } while(condition); 
Vòng lặp for 
• Cú pháp 
 for(initialization statements; condition; 
increment statements) 
 { 
 action statements; 
 : 
 : 
 } 
Chƣơng 3 
Gói & Interface 
(Packages & Interfaces) 
Giới thiệu 
• Những thành phần cơ bản của 1 chƣơng 
trình Java: 
– Gói (Packages) 
– Giao diện (Interfaces) 
• Những phần của một chƣơng trình Java: 
– Lệnh khai báo gói(package ) 
– Lệnh chỉ định gói đƣợc dùng (Lệnh import) 
– Khai báo lớp public (một file java chỉ chứa 1 lớp 
public class) 
– Các lớp khác (classes private to the package) 
• Tập tin nguồn Java có thể chứa tất cả hoặc 
một vài trong số các phần trên. 
Interfaces 
• Chƣơng trình Java chỉ có thể kế thừa từ 
1 lớp duy nhất trong cùng một thời 
điểm, nhƣng có thể dẫn xuất cùng lúc 
nhiều Interfaces 
• Không đƣợc phép có những phƣơng 
thức cụ thể (concrete methods) 
• interface cần phải đƣợc hiện thực 
(implements). 
Các bƣớc tạo interface 
• Định nghĩa Interface 
• Biên dịch Interface 
• Hiện thực Interface 
• Tính chất của interface: 
– Tất cả phƣơng thức trong interface phải là 
public. 
– Các phƣơng thức phải đƣợc định nghĩa 
trong lớp dẫn xuất giao diện đó. 
Sử dụng Interface 
• Không thể dẫn xuất từ lớp khác, nhƣng có 
thể dẫn xuất từ những interface khác 
• Nếu một lớp dẫn xuất từ một interface mà 
interface đó dẫn xuất từ các interface khác 
thì lớp đó phải định nghĩa tất cả các phƣơng 
thức có trong các interface đó 
• Khi định nghĩa một interface mới thì một kiểu 
dữ liệu tham chiếu cũng đƣợc tạo ra. 
Gói (Packages) 
• Tƣơng tự nhƣthƣ mục lƣu trữ những 
lớp, interface và các gói con khác. Đó 
là những thành viên của gói 
• Những ƣu điểm khi dùng gói (Package): 
– Cho phép tổ chức các lớp vào những đơn 
vị nhỏ hơn 
– Giúp tránh đƣợc tình trạng trùng lặp khi 
đặt tên. 
– Cho phép bảo vệ các lớp đối tƣợng 
– Tên gói (Package) có thể đƣợc dùng để 
nhận dạng chức năng của các lớp. 
• Những lƣu ý khi tạo gói: 
– Mã nguồn phải bắt đầu bằng lệnh „package‟ 
– Mã nguồn phải nằm trong cùng thƣ mục mang tên 
của gói 
– Tên gói nên bắt đầu bằng ký tự thƣờng (lower case) 
để phân biệt giữa lớp đối tƣợng và gói 
– Những lệnh khác phải viết phía dƣới dòng khai báo 
gói là mệnh đề import, kế đến là các mệnh đề định 
nghĩa lớp đối tƣợng 
– Những lớp đối tƣợng trong gói cần phải đƣợc biên 
dịch 
– Để chƣơng trình Java có thể sử dụng những gói 
này, ta phải import gói vào trong mã nguồn 
• Import gói (Importing packages): 
– Xác định tập tin cần đƣợc import trong gói 
– Hoặc có thể import toàn bộ gói 
Các bƣớc tạo ra gói 
(Package) 
• Khai báo gói 
• Import những gói chuẩn cần thiết 
• Khai báo và định nghĩa các lớp đối 
tƣợng có trong gói 
• Lƣu các định nghĩa trên thành tập tin 
.java, và biên dịch những lớp đối tƣợng 
đã đƣợc định nghĩa trong gói. 
Sử dụng những gói do ngƣời dùng định 
nghĩa (user-defined packages) 
• Mã nguồn của những chƣơng trình này phải ở 
cùng thƣ mục của gói do ngƣời dùng định 
nghĩa. 
• Để những chƣơng trình Java khác sử dụng 
những gói này, import gói vào trong mã nguồn 
• Import những lớp đối tƣợng cần dùng 
• Import toàn bộ gói 
• Tạo tham chiếu đến những thành viên của gói 
Xác lập CLASSPATH 
• Là danh sách các thƣ mục, giúp cho 
việc tìm kiếm các tập tin lớp đối tƣợng 
tƣơng ứng 
• Nên xác lập CLASSPATH trong lúc 
thực thi (runtime), vì nhƣ vậy nó sẽ xác 
lập đƣờng dẫn cho quá trình thực thi 
hiện hành 
Gói và điều khiển truy xuất 
(Packages & Access Control) 
Gói java.lang 
• Mặc định thì bất cứ chƣơng trình Java 
nào cũng import gói java.lang 
• Những lớp Wrapper (bao bọc) cho các 
kiểu dữ liệu nguyên thủy: 
Lớp String 
• Phƣơng thức khởi tạo (Constructor): 
– String str1 = new String(); 
– String str2 = new String(“Hello World”); 
– char ch[ ] = {“A”,”B”,”C”,”D”,”E”}; 
– String str3 = new String(ch); 
– String str4 = new String(ch,0,2); 
String Pool 
• „String Pool‟ đại diện cho tất cả các ký 
tự đƣợc tạo ra trong chƣơng trình 
• Khái niệm „String Pool‟ 
NHỮNG PHƢƠNG THỨC CỦA LỚP 
STRING 
• charAt( ) 
• startsWith() 
• endsWith( ) 
• copyValueOf( ) 
• toCharArray( ) 
• indexOf( ) 
• toUpperCase( ) 
• toLowerCase( ) 
• trim( ) 
• equals( ) 
Lớp StringBuffer 
• Cung cấp những phƣơng thức khác nhau để 
thao tác trên đối tƣợng string (chuỗi ký tự) 
• Những đối tƣợng của lớp này khá linh hoạt 
• Cung cấp những phƣơng thức khởi tạo 
(constructor) đã đƣợc nạp chồng 
(overloaded) 
• Những phƣơng thức của lớp StringBuffer: 
– append( ) 
– insert( ) 
– charAt( ) 
– setCharAt( ) 
– setLength( ) 
– getChars( ) 
– reverse( ) 
LỚP JAVA.LANG.MATH 
• abs() 
• ceil() 
• floor() 
• max() 
• min() 
• round() 
• random() 
• sqrt() 
• sin() 
• cos() 
• tan() 
Lớp Runtime 
• Đóng gói (Encapsulates) môi trƣờng thực thi 
• Dùng để quản lý bộ nhớ, và thi hành những 
tiến trình cộng thêm 
• Phƣơng thức: 
– exit(int) 
– freeMemory( ) 
– getRuntime( ) 
– gc( ) 
– totalMemory( ) 
– exec(String) 
Lớp System 
• Cung cấp những hạ tầng chuẩn nhƣ nhập 
(Input), xuất (Output) và các luồng lỗi(Error 
Streams) 
• Cung cấp khả năng truy xuất đến những 
thuộc tính của hệ thống thực thi Java, và 
những thuộc tính môi trƣờng nhƣ phiên bản, 
đƣờng dẫn, nhà cung cấp 
• Phƣơng thức: 
– exit(int) 
– gc() 
– getProperties() 
– setProperties() 
– currentTimeMillis() 
– arraCopy(Object, int, Object, int, int) 
Lớp Class 
• Thể hiện (Instance) của lớp này che 
giấu tình trạng thực thi của đối tƣợng 
trong một ứng dụng Java 
• Đối tƣợng hoặc thể hiện của lớp này có 
thể tạo ra bằng 1 trong 3 cách sau: 
– Sử dụng phƣơng thức getClass( ) của đối tƣợng 
– Sử dụng phƣơng thức tĩnh forName( ) của lớp để 
tạo ra một thể hiện của lớp đó trong lúc đặt tên 
cho lớp 
– Sử dụng đối tƣợng ClassLo ... ục mà các lớp tập tin 
cung cấp 
Lớp FileDescriptor 
• Cung cấp việc truy cập tới các tập tin 
mô tả 
• Không cung cấp bất kỳ tính rõ nét nào 
tới thông tin mà hệ điều hành duy trì. 
• Cung cấp chỉ một phƣơng thức gọi là 
„valid( )‟ 
Lớp FileInputStream 
• Cho phép đầu vào đọc từ một tập tin 
trong một mẫu của một dòng 
• Các đối tƣợng đƣợc tạo ra sử dụng 
chuỗi tên tập tin, tập tin, đối tƣợng 
FileDescriptor nhƣ một tham số. 
• Các phƣơng thức nạp chồng của lớp 
InputStream. nó cung cấp phƣơng thức 
„finalize( )‟ và „getFD( )‟ 
Lớp FileOutputStream 
• Cho phép kết xuất để ghi ra một luồng 
tập tin 
• Các đối tƣợng cũng tạo ra sử dụng một 
chuỗi tên tập tin, tạp tin, hay đối tƣợng 
FileDescriptor nhƣ một tham số. 
• Lớp này nạp chồng các phƣơng thức 
của lớp OutputStream và cung cấp 
phƣơng thức „finalize( )‟ và „getFD( )‟ 
Nhập xuất lọc 
• Lọc: 
– Là kiểu luồng sửa đổi cách điều quản một luồng 
hiện có. 
– về cơ bản đƣợc sử dụng để thích ứng các luồng 
theo các nhu cầu của chƣơng trình cụ thể. 
– Bộ lọc nằm giữa luồng nhập và luồng xuất. 
– Thực hiện một số tiến trình đặt biệt trên các byte 
đƣợc chuyển giao từ đầu vào đến kết xuất. 
– Có thể phối hợp để thực hiện một dãy các tuỳ 
chọn lọc. 
Lớp FilterInputStream 
• Là lớp trừu tƣợng. 
• Là cha của tất cả các lớp luồng nhập đã lọc. 
• Cung cấp khả năng tạo ra một luồng từ 
luồng khác. 
• Một luồng có thể đọc và cung cấp cung cấp 
dƣới dạng kết xuất cho luồng khác. 
• duy trì một dãy các đối tƣợng của lớp 
„InputStream‟ 
• Cho phép tạo ra nhiều bộ lọc kết xích 
(chained filters 
• ). 
Lớp FilterOutputStream 
• Là dạng bổ trợ cho lớp 
„FilterInputStream‟. 
• Là cha của tất cả các lớp luồng kết 
xuất. 
• Duy trì đối tƣợng của lớp 
„OutputStream‟ nhƣ là một biến „out‟. 
• Dữ liệu ghi ra lớp này có thể sửa đổi để 
thực hiện các thao tác lọc, và sau đó 
phản hồi đến đối tƣợng „OutputStream‟. 
Vùng đệm nhập/xuất 
• Vùng đệm: 
– Là kho lƣu trữ dữ liệu. 
– Có thể cung cấp dữ liệu thay vì quay trợ lại nguồn 
dữ liệu gốc ban đầu. 
– Java sử dụng vùng đệm nhập và kết xuất để tạm 
thời lập cache dữ liệu đƣợc đọc hoặc ghi vào một 
luồng. 
• Trong khi thực hiện vùng đệm nhập: 
– Số lƣợng byte lớn đƣợc đọc cùng thời điểm, và 
lƣu trữ trong một vùng đệm nhập. 
– Khi chƣơng trình đọc luồng nhập, các byte nhập 
đƣợc đọc vào vùng đệm nhập. 
Vùng đệm nhập/xuất (tt) 
• Trong trƣờng hợp vùng đệm kết xuất, một 
chƣơng trình ghi ra một luồng. 
• Dữ liệu kết xuất đựơc lƣu trữ trong một vùng 
đệm kết xuất. 
• Dữ liệu đƣợc lƣu trữ cho đến khi vùng đệm 
trợ nên đầy, hay luồng kết xuất đƣợc xả 
trống. 
• Kết thúc, vùng đệm kết xuất đƣợc chuyển gửi 
đến đích của luồng xuất. 
Lớp BufferedInputStream 
• Tự động tạo ra và duy trì vùng đệm để hổ trợ 
vùng đệm nhập. 
• bởi lớp „BufferedInputStream‟ là một bộ đệm, 
nó có thể áp đụng cho một số các đối tƣợng 
nhất định của lớp „InputStream‟. 
• Cũng có thể phối hợp các tập tin đầu vào 
khác. 
• Sử dụng vài biến để triển khai vùng đệm 
nhập. 
Lớp BufferedInputStream 
(Contd) 
• Định nghĩa hai phƣơng thức thiết lập: 
– Một chó phép chỉ định kích thƣớc của vùng đệm 
nhấp. 
– phƣơng thức kia thì không. 
• Cả hai phƣơng thức thiết lập đều tiếp nhận 
một đối tƣợng của lớp „InputStream‟ nhƣ một 
tham số. 
• Nạp chồng các phƣơng thức truy cập mà 
InputStream cung cấp, và không đƣa vào bất 
kỳ phƣơng thức mới nào. 
Lớp BufferedOutputStream 
• Thực hiện vùng đệm kết xuất theo cách 
tƣơng ứng với lớp „BufferedInputStream‟. 
• Định nghĩa hai phƣơng thức thiết lập. Nó 
cho phép chúng ta ấn định kích thƣớc của 
vùng đệm xuất trong một phƣơng thức thiết 
lập, cũng giống nhƣ cung cấp kích thƣớc 
vùng đệm mặc định. 
• Nạp chồng tất cả phƣơng thức của lớp 
„OutputStream‟ và không đƣa vào bất kỳ 
phƣơng thức nào. 
Lớp Reader và Writer 
• Là các lớp trừu tƣợng. 
• Chúng nằm tại đỉnh của hệ phân cấp 
lớp, hỗ trợ việc đọc và ghi các luồng ký 
tự unicode. 
Lớp Reader 
• Hỗ trợ các phƣơng thức sau: 
– read( ) 
– reset( ) 
– skip( ) 
– mark( ) 
– markSupported( ) 
– close( ) 
– ready( ) 
Lớp Writer 
• Hỗ trợ các phƣơng thức sau : 
– write( ) 
– flush( ) 
– close( ) 
Nhập/xuất chuỗi và mảng ký 
tự 
• Hỗ trợ nhập và xuất từ các vùng đệm 
bộ nhớ 
• Hỗ trợ 8 bít ký tự nhập và kết xuất 
• Lớp „CharArrayReader‟ không bổ sung 
phƣơng thức mới vào các phƣơng 
thức mà lớp „Reader‟ cung cấp. 
Nhập/xuất chuỗi và mảng ký tự 
(tt) 
• Lớp „CharArrayWriter‟ bổ sung phƣơng 
thức sau đây vào phƣơng thức của lớp 
„Writer‟ cung cấp: 
– reset( ) 
– size( ) 
– toCharArray( ) 
– toString( ) 
– writeTo( ) 
Nhập/xuất chuỗi và mảng ký tự 
(tt) 
• Lớp „StringReader‟ trợ giúp đọc các ký tự đầu 
vào từ sâu chuỗi. 
• Nó không bổ sung bất kỳ phƣơng thức nào 
mà lớp Reader cung cấp. 
• Lớp „StringWriter‟ trợ giúp để ghi luồng kết 
xuất ký tự ra một đối tƣợng „StringBuffer‟. 
• Lớp này bổ sung thêm các phƣơng thức sau: 
– getBuffer( ) 
– toString( ) 
Lớp PrinterWriter 
• Thực hiện một kết xuất. 
• Lớp này có phƣơng thức bổ sung , trợ giúp 
in các kiểu dữ liệu cơ bản . 
• Lớp PrintWriter thay thế lớp „PrintStream‟ 
• Thực tế cải thiện lớp „PrintStream‟; lớp này 
dùng một dấu tách dòng phụ thuộc nền tảng 
điểm các dòng thay vì ký tự „\n‟. 
• Cung cấp phần hỗ trợ cho các ký tự unicode 
so với PrintStream. 
• Các phƣơng thức: 
– checkError( ) 
– setError( ) 
Giao diện DataInput 
• Đƣợc sử dụng để đọc các byte từ luồng nhị 
phân, và 
• Is used to read bytes from a binary stream, 
and xây dựng lại dữ liệu trong một số kiểu dữ 
liệu nguyên thuỷ. 
• Cho phép chúng ta chuyển đổi dữ liệu từ từ 
khuôn dạng UTF-8 đƣợc sửa đổi Java đến 
dạng chuỗi 
• Định nghiã số phƣơng thức, bao gồm các 
phƣơng thức để đọc các kiểu dữ liệu nguyên 
thuỷ. 
NHỮNG PHƢƠNG THỨC GIAO 
DIỆN DATAINPUT 
• boolean readBoolean( 
) 
• byte readByte( ) 
• char readChar( ) 
• short readShort( ) 
• long readLong( ) 
• float readFloat( ) 
• int readInt( ) 
• double readDouble( ) 
• String readUTF( ) 
• String readLine( ) 
Giao diện DataOutput 
• Đƣợc sử dụng để xây dựng lại dữ liệu một số 
kiểu dữ liệu nguyên thuỷ vào trong dãy các 
byte 
• Ghi các byte dữ liệu vào luồng nhị phân 
• Cho phép chúng ta chuyển đổi một chuỗi vào 
khuôn dạng UTF-8 đƣợc sửa đổi Java và viết 
nó vào trong một dãy. 
• Định nghĩa một số phƣơng thức và tất cả 
phƣơng thức kích hoạt IOException trong 
trƣờng hợp lỗi. 
Các phƣơng thức giao diện 
DataOutput 
• void writeBoolean(boolean b) 
• void writeByte( int value) 
• void writeChar(int value) 
• void writeShort(int value) 
• void writeLong(long value) 
• void writeFloat(float value) 
• void writeInt(int value) 
• void writeDouble(double value) 
• void writeUTF(String value) 
Lớp RandomAccessFile 
• Cung cấp khả năng thực hiện I/O theo các vị 
trí cụ thể bên trong một tập tin. 
• dữ liệu có thể đọc hoặc ghi ngẫu nhiên ở 
những vị trí bên trong tập tin thay vi một kho 
lƣu trữ thông tin liên tục. 
• phƣơng thức „seek( )‟ hỗ trợ truy cập ngẫu 
nhiên. 
• Thực hiện cả đầu vào và đầu ra dữ liệu. 
• Hỗ trợ các cấp phép đọc và ghi tập tin cơ 
bản. 
• Kế thừa các phƣơng thức từ các lớp 
„DataInput‟ và „DataOutput‟ 
Các phƣơng thức của lớp 
RandomAccessFile 
• seek( ) 
• getFilePointer( ) 
• length( ) 
Gói java.awt.print 
• Gồm có các giao diện 
– Pageable: 
• Định nghĩa các phƣơng thức dùng để các đối tƣợng biểu 
thị các trang sẽ đƣợc in. 
• Chỉ định số trang đã đƣợc in, và trang hiện tại hay là 
tranh giới trang đã đƣợc in 
– Printable: 
• Chi định phƣơng thức „print( )‟ sử dụng để in một trang 
trên đối tƣợng „Graphics‟ 
– PrinterGraphics: 
• Cung cáp khả năng truy cập đối tƣợng „PrinterJob‟ 
• Giao diê n „PrinterGraphics‟ cung cấp các lớp 
sau: 
– Paper 
– Book 
– PageFormat 
– PrinterJob 
• Gói „java.awt.print‟ kích hoạt các ngoại lệ: 
– PrinterException 
– PrinterIOException 
– PrinterAbortException 
Chƣơng IX 
KẾT NỐI CSDL 
Java Database Connectivity 
Tổng quan 
• JDBC cung cấp tập các lớp và interface 
cho phép chƣơng trình Java có thể nói 
chuyện đƣợc với hệ CSDL 
• Tập các lớp của JDBC 
có thể làm việc đƣợc với 
mọi hệ csdl. 
• Có 3 bƣớc chính để kết nối CSDL. 
– Nạp database drivers 
– Tạo nối kết, Tạo đối tƣợng Connection 
– Tạo đối tƣợng Statement để thực thi các 
lệnh sql.. 
Ví dụ 
try{ 
 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
 Connection con=DriverManager.getConnection("jdbc:odbc:ATM"); 
 Statement stmt = con.createStatement(); 
 : 
 : 
 : 
 : 
Database URL 
• Database URL là một chuổi đƣợc dùng 
để kết nối csdl. 
• cú pháp : 
• jdbc:subprotocol name:other_stuff 
• The subprotocol name đƣợc dùng tuỳ 
vào loại driver sử dụng để kết nối csdl. 
• ví dụ : subprotocol name là odbc nếu 
driver là cầu nối jdbcodbc 
• Other_stuff cũng phụ thuộc vào loại 
driver nào đƣợc sử dụng. ví dụ nếu 
driver là cầu nối jdbcodbc thì thành 
phần này là tên của đối tƣợng ODBC 
Database Driver 
• Bảo đảm ứng dụng java tƣơng tác với mọi 
csdl dƣới một cách thức chuẩn và duy nhất. 
• Bảo đảm những yêu cầu từ chƣơng trình sẽ 
đƣợc biểu diễn trong csdl dƣới một ngôn ngữ 
mà csdl hiểu đƣợc 
• nhận các yêu cầu từ client, chuyển nó nó vào 
định dạng mà csdl có thể hiểu đƣợc và thể 
hiện trong csdl. 
• Nhận các phản hồi, chuyển nó ngƣợc lại định 
dạng dữ liệu java và thể hiện trong ứng dụng. 
Nạp Driver 
• Lớp DriverManager chịu trách nhiệm nạp driver 
và tạo kết nối đến csdl. 
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); 
• hoặc 
Class.forName(String); 
– This returns the object associated with the class with 
the given string name. 
– Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”); 
• Equivalent to: 
new sun.jdbc.odbc.JdbcOdbcDriver(); 
 If you have a driver from another vendor, then 
find out the class name of that driver and load it 
instead. 
JDBC Driver 
• Có 4 loại JDBC Driver 
– Loại 1: JDBC/ODBC 
– Loại 2: Native-API 
– Loại 3: Open Protocol-Net 
– Loại 4: Proprietary-Protocol-Net 
• Loại 2,3,4 nói chung đƣợc viết bởi nhà 
cung cấp csdl. hiệu quả hơn loại 1 
nhƣng thực hiện phức tạp hơn. 
Loại I JDBC/ODBC 
• jdk hỗ trợ cầu nối jdbc-odbc (jdbc-odbc 
bridge). 
• Mềm dẻo nhƣng không hiệu quả. 
Database 
Network Interface 
Server 
Aplication 
JDBC Driver 
ODBC Driver 
Network Interface 
Disk 
Client 
Loại 2: Native-API 
• Tốt hơn loại 1, loại này cho phép JDBC giao 
tiếp trực tiếp với các driver hay các hàm API 
của CSDL. 
Database 
Network Interface 
Server 
Aplication 
JDBC Driver 
Native Database Library 
Network Interface 
Disk 
Client 
Loại 3: Open Protocol-Net 
• Drivers 
– Có thể chuyển các yêu cầu đến các csdl nằm ở 
xa. 
– Có thể giao tiếp với nhiều loại CSDL. 
– Không phải của nhà cung cấp csdl 
– Tất cả bằng mã java 
Database 
Network Interface 
Server 
Aplication 
JDBC Driver Client 
Network Interface 
Disk 
Client 
JDBC Driver Server 
Native Database Library 
Loại 4: Proprietary-Protocol Net 
• 100% java 
• Có khả năng giao tiếp trực tiếp với hệ 
CSDL không cần chuyển đổi 
Database 
Network Interface 
Server 
Aplication 
JDBC Driver 
Network Interface 
Disk 
Client 
Gói Java.sql 
• Cung cấp tập hợp các lớp và interface dùng 
để trao đổi với CSDL. 
• Các lớp 
– DriverManager 
– Date, Time 
– Timestamp 
– Types 
• Các Interfaces 
■ Driver 
■ Connection 
■ DatabaseMetaData 
■ Statement 
■ PreparedStatement 
■ CallableStatement 
■ ResultSet 
■ ResultSetMetaData 
Đối tƣợng Statement 
• Đối tƣợng Connection chứa liên kết 
trực tiếp đến csdl. 
• Sử dụng đối tƣợng Connection để tạo 
đối tƣợng Statement. 
– Statement s = con.createStatement(); 
• Đối tƣợng này có nhiệm vụ gửi các câu 
lệnh sql đến csdl. 
• executeQuery(String) or 
executeUpdate(String) method 
• Cùng một đối tƣợng Statement có thể 
sử dụng cho nhiều câu lệnh sql khác 
nhau. 
• Có 3 phƣơng thức thực thi 
– executeQuery() 
– executeUpdate() 
– execute() 
• The executeQuery() 
– Nhận câu lệnh SQL (select) làm đối số, trả lại đối 
tƣợng ResultSet 
• ResultSet rs = s.executeQuery(“SELECT * 
FROM Books”); 
• Phƣơng thức executeUpdate() 
– Nhận các câu lệnh sql dạng cập nhật 
– Trả lại số nguyên biểu thị số hàng đƣợc 
cập nhật. 
– UPDATE, INSERT, or DELETE. 
• Phƣơng thức execute() 
– Đƣợc áp dụng cho trƣờng hợp không rõ 
loại sql nào đƣợc thựƣc hiện. 
– Đƣợc áp dụng cho trƣờng hợp câu lệnh 
sql đwocj tạo ra tự động bởi chƣơng trình. 
ResultSet 
• Chứa một hoặc nhiều hàng dữ liệu từ việc 
thực hiện câu lệnh truy vấn. 
• Có thể lấy dữ liệu từng hàng dữ liệu một 
trong ResultSet. 
• Sử dụng phƣơng thức next() để di chuyển 
đến hàng dữ liệu tiếp theo trong ResultSet. 
• Hàm next() trả lại true chỉ rằng hàng chứa dữ 
liệu, trả lại false hàng cuối không chứa dữ 
liệu. 
• Thực hiện 
while (rs.next()){ 
// examine a row from the results 
} 
• Để lấy dữ liệu ở các cột trên mỗi hàng 
của ResultSet, ta dùng các phƣơng 
thức. 
– get type(int | String) 
• Đối số là chỉ số cột tính từ 1. 
• Áp dụng cho các cột có kiểu dữ liệu là int, float, 
Date..... 
– Ví dụ : 
• String isbn = rs.getString(1); // Column 1 
• float price = rs.getDouble(“Price”); 
ResultSet Metadata 
• Đối tƣợng này cho biết thông tin về ResultSet 
• ResultSet rs = stmt.executeQuery(SQLString); 
ResultSetMetaData rsmd = rs.getMetaData(); 
int numberOfColumns = rsmd.getColumnCount(); 
• getColumnName(int column) 
Prepared Statements 
• To execute a Statement object many times, it 
will reduce execution time to use 
PreparedStatement object 
• PreparedStatement object 
– unlike a Statement object, it is given an SQL 
statement when it is created. 
– The advantage to this is that in most cases, this 
SQL statement will be sent to the DBMS right 
away, where it will be compiled. 
– As a result, the PreparedStatement object 
contains not just an SQL statement, but an SQL 
statement that has been precompiled. 
– This means that when the PreparedStatement is 
executed, the DBMS can just run the 
PreparedStatement 's SQL statement without 
having to compile it first 
Các đối tƣợng Statement 
khác 
• Prepared Statements 
• Callable Statement 
Database Metadata 
• Đối tƣợng này cho biết thông tin về 
csdl. 
Chƣơng trình mẫu 
import java.sql.*; 
class JDBCDemo1 { 
 public static void main(String[] args) { 
 try{ 
 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
 Connection con=DriverManager.getConnection("jdbc:odbc:Accserver"); 
 Statement stmt = con.createStatement(); 
 ResultSet rs = stmt.executeQuery(args[0]); 
 ResultSetMetaData rsmd = rs.getMetaData(); 
 int numberOfColumns = rsmd.getColumnCount(); 
 for(int j=1; j<=numberOfColumns;j++) { 
 System.out.println(rsmd.getColumnLabel(j)); 
 } 
 while(rs.next()) { 
 for(int i=1; i<=numberOfColumns;i++){ 
 System.out.println(rs.getObject(i)); 
 }} 
 rs.close(); 
 stmt.close(); 
 } catch(Exception e){ System.out.println("Error " + e); 
 } 
 } 
} 

File đính kèm:

  • pdfbai_giang_lap_trinh_java_huynh_cong_phap.pdf