Tin học: STGT lập trình Java 2
Chia sẻ bởi Trần Việt Thao |
Ngày 30/04/2019 |
21
Chia sẻ tài liệu: Tin học: STGT lập trình Java 2 thuộc Hóa học 9
Nội dung tài liệu:
GIÁO TRÌNH BÀI GIẢNG
MÔN HỌC : LẬP TRÌNH JAVA
MỞ ĐẦU
GI?I THI?U SO LU?C L?P TRÌNH HU?NG D?I TU?NG
Mục Tiêu Bài Học
Thế nào là lập trình hướng đối tượng
Tìm hiểu về trừu tượng dữ liệu
Định nghĩa lớp và đối tượng
Constructor và Destructor
Tìm hiểu về tính lưu trữ, bao bọc dữ liệu, tính kế thừa và đa hình
Các ưu điểm của phương pháp lập trình hướng đối tượng
L?p Trình Hu?ng D?i Tu?ng
Lấy đối tượng làm nền tảng cơ sở của phương pháp lập trình
Phương pháp thiết kế và thực hiện bằng các hệ phần mềm
Tr?u Tu?ng D? Li?u
Là tiến trình xác định và tập hợp các tính chất và các hành động của một thực thể có liên quan đến ứng dụng
Lợi ích :
Tập trung vào vấn đề
Xác định những tính chất và hành động thiết yếu
Loại trừ những chi tiết không cần thiết
Tr?u Tu?ng D? Li?u
Các tính chất của một đối tượng Người
Tên
Địa chỉ
Tuổi
Chiều cao
Màu tóc
Các tính chất của một đối tượng Khách hàng
Tên
Địa chỉ
Tr?u Tu?ng D? Li?u (ti?p theo)
Lớp
Lớp là một nhóm các đối tượng có chung những tính chất và hành động
Đối Tượng
Đối tượng là một thể hiện của lớp
Toàn
Anh
Tuấn
Đối Tượng ( tiếp theo )
Thuộc tính
Tính chất mô tả một đối tượng
Hành động
Dịch vụ mà đối tượng có thể đáp ứng
Phương thức
Đặc tả cách đáp ứng bằng hành động khi được yêu cầu
Thông điệp
Yêu cầu một hành động
Biến cố
Sự kích thích từ đối tượng này gởi sang đối tượng khác
Lớp Và Đối Tượng
Lớp là một thực thể, còn đối tượng là một thực thể thực tế
Lớp là một mô hình ý niệm định rõ các tính chất và các hành động được quy định bởi một đối tượng, còn đối tượng là một mô hình thực sự
Lớp là khuôn mẫu từ đó đối tượng được tạo ra
Tất cả các đối tượng trong cùng một lớp có các tính chất và các hành động như nhau
Constructor
Tiến trình tạo ra một đối tượng được gọi là Constructor
Một Constructor:
Cấp phát vùng nhớ
Khởi gán những thuộc tính (nếu có)
Cho phép truy cập những thuộc tính và phương thức
Destructor
Tiến trình hủy một đối tượng gọi là Destructor
Một Destructor:
Giải phóng bộ nhớ
Cấm truy cập thuộc tính và phương thức
Tính Luu Tr?
Tính lưu trữ là khả năng của đối tượng có thể lưu lại dữ liệu của nó sau khi đã bị hủy
Tính Bao B?c D? Li?u
Tiến trình che dấu những chi tiết hiện thực một đối tượng được gọi là tính bao bọc
Ưu điểm:
Tất cả những thuộc tính và phương thức cần thiết đều được tạo
Một lớp có thể có nhiều tính chất và phương thức nhưng chỉ một số trong đó được hiển thị cho người dùng
Tính K? Th?a
Tính K? Th?a (ti?p theo)
Tính K? Th?a ( ti?p theo )
+
=
Tính K? Th?a ( ti?p theo )
Tính Thừa kế
Là cơ chế cho phép một lớp chia sẻ những thuộc tính và những hành động đã định nghĩa trong một hoặc nhiều lớp khác
Lớp con
Là lớp thừa kế từ lớp khác
Lớp cha
Là lớp từ đó một lớp khác thừa kế các ứng xử của nó
Đa thừa kế
Khi một lớp con thừa kế từ hai hoặc nhiều lớp
Tính Đa Hình
Tính đa hình là thuộc tính cho phép một hành động ứng xử khác nhau trên các lớp khác nhau
Các ưu điểm của phương pháp hướng đối tượng
Chia sẻ trong phạm vi một ứng dụng
Đẩy mạnh sự dùng lại của các đối tượng khi hiện thực những ứng dụng mới
Về lâu dài, chi phí giảm đáng kể
Giảm lỗi và rắc rối trong bảo trì
Điều chỉnh nhanh hơn
TỔNG KẾT
Tiếp cận hướng đối tượng đưa ra một giải pháp toàn diện cho một bài toán cụ thể
Trừu tượng dữ liệu là một tiến trình xác định và tập hợp các tính chất và các hành động có quan hệ với một thực thể cụ thể
Lớp mô tả một thực thể, còn đối tượng là một thực thể thực tế
Constructor và Destructor
Tính lưu trữ, bao bọc dữ liệu, tính kế thừa và đa hình
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
28
Java Translation and Execution
Java source
code
Machine
code
Java
bytecode
Java
interpreter
Bytecode
compiler
Java
compiler
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 –
..............
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 – General support
java.applet - Creating applets for the web
java.awt - Graphics and graphical user interfaces
java.io
java.util – Utilities(tien-ich)
java.net - Network communication
java.awt.event
java.rmi
java.security
java.sql
Chương 2
Các kiến thức cơ bản - Cấu trúc chương trình của 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
Hằng (Literals)
Toán tử
38
Java Program Structure
public class MyProgram
{
}
public static void main (String[] args)
{
}
// comments about the class
// comments about the method
method header
method body
Ví dụ một chương trình Java mẫu
// This is a simple program called “Ex1.java”
// import java.lang.*;
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
..jdkin>javac Ex1.java
..jdkin>java Ex1
Kết quả:
My first program in Java
Truyền đối số dòng lệnh
class Ex2
{
public static void main(String parameters[])
{
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ủa ngô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
44
Lớp trong Java
public class MyProgram
{
}
// comments about the class
class header
class body
Comments can be added almost anywhere
Lớp trong Java
Cú pháp khai báo lớp (Class)
class tênlớp
{
kiểu tênbiến;
:
met_datatype tênphươngthức(dsthamsố)
:
}
Các lớp nội (Nested Classes)
Một lớp được định nghĩa bên trong một lớp khác. Lớp đó được gọi là “lớp nội” (Nesting)
Các kiểu lớp nội:
Static
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 cơ sở
4 kiểu integers:
byte, short, int, long
2 kiểu số thực:
float, double
1 kiểu characters:
char
1 kiểu boolean :
boolean
Kiểu dữ liệu cơ sở
51
Characters
Character literals are delimited by single quotes:
`a` `X` `7` `$` `,` ` `
The ASCII characters :
52
Boolean
A boolean value represents a true or false condition
A boolean can also be used to represent any two states, such as a light bulb being on or off
The reserved words true and false are the only valid values for a boolean type
boolean done = false;
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ố
Cú pháp
datatype identifier [=value][, identifier[=value]...];
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)
Bộ 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 Ex3 {
int x = 10; // variable
public void show( ) { // method
System.out.println(x);
}
public static void main(String args[ ]) {
Ex3 t = new Ex3( ); // tao doi tuong t
t.show( ); // method call
Ex3 t1 = new Ex3( ); // tao doi tuong t1
t1.x = 20;
t1.show( );
}
}
Các chỉ định truy xuất của phương thức (Access specifiers)
Công cộng (public)
Riêng tư (private)
Bảo vệ (protected)
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 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 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)
Nếu ở lớp dẫn xuất muốn gọi hàm constructor của lớp cơ sở thì câu lệnh gọi hàm constructor của lớp cơ sở phải là câu lệnh đầu tiên trong hàm constructor của lớp dẫn xuất - dùng từ khoá super
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 (XOR)
>> 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 đề
Operator Precedence
What is the order of evaluation in the following expressions?
a + b + c + d + e
1
4
3
2
a - b / c + d * e
3
2
4
1
a / (b + c) - d % e
2
3
4
1
a / (b * (c + (d - e)))
4
1
2
3
Assignment Revisited
The assignment operator has a lower precedence than the arithmetic operators
First the expression on the right hand
side of the = operator is evaluated
Then the result is stored in the
variable on the left hand side
answer = sum / 4 + MAX * lowest;
1
4
3
2
Assignment Revisited
The right and left hand sides of an assignment statement can contain the same variable
First, one is added to the
original value of count
Then the result is stored back into count
(overwriting the original value)
count = count + 1;
Các kí tự định dạng xuất dữ liệu
(Escape Sequences)
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
Interface chính là lớp abstract thuần tuý
Khai báo những phương thức mà lớp sử dụng
Trong Java 1 lớp chỉ có thể dẫn xuất từ 1 lớp duy nhất tại cùng một thời điểm, nhưng có thể dẫn xuất cùng lúc nhiều Interface
Trong Interface không chứa những phương thức cụ thể (concrete methods)
interface cần phải được implements.
Các bước tạo interface
Định nghĩa Interface
Biên dịch Interface
Implements 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 interface đó.
Sử dụng Interface
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 đó. Nếu không lớp đó trở thành lớp abstract
Khi định nghĩa một interface mới có nghĩa là một kiểu dữ liệu tham chiếu mới được tạo ra.
Gói (Packages)
Gói được xem tương tự như thư mục lưu trữ những lớp, những interfaces và các gói con khác.
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 lớp, tên interfaces .
Cho phép bảo vệ các lớp.
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 tên lớp đối tượng và tên 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 lệ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):
Có 2 cách:
Xác định lớp hoặc interface của gói cần được import.
- Hoặc có thể import toàn bộ gói
vd : import java.util.Vector;
import java.util.*;
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 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. Nếu không ta phải thiết lập đường dẫn.
Để 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
Thiết lập đường dẫn - 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
Gói java.lang được import mặc định.
Những lớp Wrapper 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( ) // noi chuoi
insert( ) //chen
charAt( )// ktra ky tu ko?
setCharAt( ) //thietlapktu
setLength( )
getChars( )
reverse( ) //dao chuoi
Lớp java.lang.Math
abs()
ceil()// lam tron tren
floor()// lam tron duoi
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 luồ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
Đối tượng của lớp này che giấu trạng thái thực thi của đối tượng trong một ứng dụng Java
Đối tượng 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 đối tượng của lớp đó trong lúc đặt tên cho lớp
Sử dụng đối tượng ClassLoader để nạp một lớp mới
Lớp Object
Là lớp cha tối cao của tất cả các lớp
Phương thức:
equals(Object)
finalize()
notify()
notifyAll()
toString()
wait()
Gói java.util
Cung cấp phần lớn những lớp Java hữu dụng và thường xuyên cần đến trong hầu hết các ứng dụng
Giới thiệu những lớp trừu tượng sau:
Hashtable
Random
Vector
StringTokenizer
Lớp Hashtable
Dẫn xuất từ lớp trừu tượng Dictionary
Dùng để nối kết những khóa vào những giá trị cụ thể
Phương thức khởi tạo Hashtable:
Hashtable(int)
Hashtable(int, float)
Hashtable( )
Những phương thức của lớp Hashtable
clear()
done()
contains(Object)
containsKey(Object)
elements()
get(Object key)
isEmpty()
keys()
put(Object, Object)
rehash()
remove(Object key)
size()
toString()
Lớp Random
Những phương thức nhận giá trị ngẫu nhiên:
nextDouble( )
nextFloat( )
nextGaussian( )
nextInt( )
nextLong( )
Phương thức khởi tạo (Constructors):
random()
random(long)
Những phương thức của lớp Random
nextDouble()
nextFloat()
nextGaussian()
nextInt()
nextLong()
setSeed(long)
Lớp Vector
Cung cấp khả năng co giản cho mảng khi thêm phần tử vào mảng
Lưu trữ những thành phần của kiểu Object
Một Vector riêng rẽ có thể lưu trữ những phần tử khác nhau, đó là những instance của những lớp khác nhau
Phương thức khởi tạo (Constructors):
Vector(int)
Vector(int, int)
Vector()
Những phương thức của lớp Vector
addElement(Object)
capacity( )
clone( )
contains(Object)
copyInto(Object [ ])
elementAt(int)
elements( )
ensureCapacity(int)
firstElement( )
indexOf(Object)
indexOf(Object, int)
insertElementAt(Object, int)
isEmpty( )
lastElement( )
lastIndexOf(Object)
lastIndexOf(Object, int)
removeAllElements( )
removeElement(Object)
removeElementAt(int)
setElementAt(Object, int)
setSize(int)
size( )
toString( )
trimToSize( )
Lớp StringTokenizer
Có thể được dùng để tách một chuỗi thành những thành phần cấu thành của nó (constituent tokens)
Ký tự phân cách có thể được chỉ định khi một đối tượng StringTokenizer được khởi tạo
Phương thức khởi tạo (Constructors):
StringTokenizer(String)
StringTokenizer(String, String)
StringTokenizer(String, String, Boolean)
Lớp StringTokenizer sử dụng giao diện liệt kê (enumeration interface)
Những phương thức của lớp StringTokenizer
countTokens( )
hasMoreElements( )
hasMoreTokens( )
nextElement( )
nextToken( )
nextToken(String)
Chương 4
Xử lý biệt lệ
Giới thiệu về biệt lệ
Là một kiểu lỗi đặc biệt
Nó xảy ra trong thời gian thực thi đoạn lệnh
Thông thường các điều kiện thực thi chương trình gây ra biệt lệ
Nếu các điều kiện này không được xử lý, thì việc thực thi có thể kết thúc đột ngột
Mục đích của việc xử lý biệt lệ
Giảm thiểu việc kết thúc bất thường của hệ thống và của chương trình.
Ví dụ, thao tác xuất/nhập trong một tập tin, nếu việc chuyển đổi kiểu dữ liệu không thực hiện đúng, một biệt lệ sẽ xảy ra và chương trình bị hủy mà không đóng tập tin. Lúc đó tập tin sẽ bị hư hại và các nguồn tài nguyên được cập phát cho tập tin không được thu hồi lại cho hệ thống.
Xử lý biệt lệ
Khi một biệt lệ xảy ra, đối tượng tương ứng với biệt lệ đó sẽ được tạo ra.
Đối tượng này sau đó được truyền tới phương thức nơi mà biệt lệ xảy ra.
Đối tượng này chứa các thông tin chi tiết về biệt lệ. Thông tin này có thể nhận được và xử lý.
Lớp ’throwable’ mà Java cung cấp là lớp trên nhất của lớp biệt lệ.
Mô hình xử lý biệt lệ
Mô hình được biết đến là mô hình ‘catch and throw’
Khi một lỗi xảy ra, biệt lệ sẽ đuợc chặn và được vào một khối.
Từ khóa để xử lý biệt lệ:
try
catch
throw
throws
finally
Cấu trúc của mô hình xử lý biệt lệ
Cú pháp
try { …. }
catch(Exception e1) { …. }
catch(Exception e2) { …. }
catch(Exception eN) { …. }
finally { …. }
Mô hình ‘Catch and Throw’ nâng cao
Người lập trình chỉ quan tâm tới các lỗi khi cần thiết.
Một thông báo lỗi có thể được cung cấp trong exception-handler.
Khối ‘try’ và ‘catch’
Được sử dụng để thực hiện trong mô hình ‘catch and throw’ của xử lý biệt lệ.
Khối lệnh ‘try’ gồm tập hợp các lệnh thực thi
Một hoặc nhiều khối lệnh ‘catch’ có thể tiếp theo sau một khối lệnh ‘try’
Các khối lệnh ‘catch’ này bắt biệt lệ trong khối lệnh ‘try’.
Khối lệnh ‘try’ và ‘catch’ (tt)
Để bắt bất kỳ loại biệt lệ nào, ta có thể chỉ ra kiểu biệt lệ là ‘Exception’
catch(Exception e)
Khi biệt lệ bị bắt không biết thuộc kiểu nào, chúng ta có thể sử dụng lớp ‘Exception’ để bắt biệt lệ đó.
Lỗi sẽ được truyền thông qua khối lệnh ‘try catch’ cho tới khi chúng bắt gặp một ‘catch’ tham chiếu tới nó, nếu không chương trình sẽ bị kết thúc
Khối lệnh chứa nhiều Catch
Các khối chứa nhiều ‘catch()’ xử lý các kiểu biệt lệ khác nhau một cách độc lập.
Ví dụ
try
{ doFileProcessing(); displayResults();
} catch(LookupException e)
{ handleLookupException(e);
}
catch(Exception e)
{ System.err.println(“Error:”+e.printStackTrace()); }
Khối lệnh chứa nhiều Catch (tt)
Khi sử dụng các ‘try’ lồng nhau, khối ‘try’ bên trong được thực thi trước.
Bất kỳ biệt lệ nào bị chặn trong khối lệnh ‘try’ sẽ bị bắt trong khối lệnh ‘catch’ tiếp ngay sau.
Nếu khối lệnh ‘catch’ thích hợp không được tìm thấy, thì các khối ‘catch’ của khối ‘try’ bên ngoài sẽ được xem xét
Ngược lại, Java Runtime Environment sẽ xử lý biệt lệ.
Khối ‘finally’
Thực hiện tất cả các việc thu dọn khi biệt lệ xảy ra
Có thể sử dụng kết hợp với khối ‘try’
Chứa các câu lệnh thu hồi tài nguyên về cho hệ thống hay lệnh in ra các câu thông báo:
Đóng tập tin
Đóng lại bộ kết quả (được sử dụng trong chương trình cơ sở dữ liệu)
Đóng lại các kết nối được tạo trong cơ sở dữ liệu.
Khối ‘finally’ (tt)
Ví dụ
try
{
doSomethingThatMightThrowAnException( );
}
finally
{
cleanup( );
}
Khối ‘finally’ (tt)
Khối này tùy chọn có hoặc không có
Được đặt sau khối ‘catch’ cuối cùng.
Khối ‘finally’ bảo đảm lúc nào cũng được thực hiện bất chấp biệt lệ có xảy ra hay không.
Các biệt lệ được định nghĩa với lệnh ‘throw’ và ‘throws’
Các biệt lệ ném ra với sự trợ giúp của từ khoá throw.
Throw là một đối tượng của một lớp biệt lệ.
Ví dụ của lệnh ‘throw’
try{
if (flag < 0)
{
throw new MyException( ) ;// user-defined
}
}
Các biệt lệ được định nghĩa với lệnh ‘throw’ và ‘throws’(tt)
Lớp ‘Exception’ implements interface ‘Throwable’ và cung cấp các tính năng hữu dụng để phân phối cho các biệt lệ.
Một lớp con của lớp Exception là một biệt lệ mới.
Danh sách các biệt lệ
RuntimeException
ArithmeticException
IllegalAccessException
IllegalArgumentException
ArrayIndexOutOfBoundsException
NullPointerException
SecurityException
ClassNotFoundException
Danh sách các biệt lệ (tt)
NumberFormatException
AWTException
IOException
FileNotFoundException
EOFException
NoSuchMethodException
InterruptedException
Chương V
LẬP TRÌNH GIAO DIỆN VỚI AWT
AWT viết tắt của Abstract Windowing Toolkit
AWT là tập hợp các lớp Java cho phép chúng ta tạo một GUI
Cung cấp các thành phần khác nhau để tạo chương trình GUI như:
Containers
Components
Layout managers
Graphics và drawing capabilities
Fonts
Events
GIỚI THIỆU VỀ AWT
AWT bao gồm các lớp, interfaces và các gói khác
Components
Tất cả các thành phần cấu tạo nên chương trình GUI được gọi là component.
Ví dụ
Containers,
textfields, labels, checkboxes, textareas
scrollbars, scrollpanes, dialog
Containers
Là thành phần mà có thể chứa các thành phần khác
Có các frames, panes,latches, hooks
Java.awt chứa một lớp có tên là Container. Lớp này được 2 lớp dẫn xuất trực tiếp và không trực tiếp gồm:
Frames
Panels
Frames
Là các cửa sổ
Là lớp con của lớp Windows
Được hiển thị trong một cửa sổ và có đường viền
Panels
Là các vùng chứa trong một cửa sổ.
Hiển thị trong một cửa sổ mà trình duyệt hoặc appletviewer cung cấp và không có đường viền.
Được sử dụng để nhóm một số các thành phần
Một panel không thể nhìn thấy vì thế chúng ta cần phải thêm nó vào frame.
Dialog
Là một lớp con của lớp Window
Đối tượng dialog được cấu trúc như sau :
Frame myframe = new Frame(“My frame”);
String title = “Title”;
boolean modal = true;
Dialog dlg = new Dialog( myframe, title, modal);
Các Components khác
Ví dụ
textfields, labels, checkboxes, textareas
scrollbars, scrollpanes, dialog
Label
Được dùng để hiển thị chuỗi (String)
Các hàm tạo dựng:
Label( )
Label(String labeltext)
Label(String labeltext, int alignment)
Các phương thức:
setFont(Font f)
setText(String s)
getText( )
TextField
Là điều khiển text, cho phép hiển thị text hoặc cho user nhập dữ liệu vào.
Các hàm dựng:
TextField( )
TextField(int columns)
TextField(String s)
TextField(String s, int columns)
Các phương thức:
setEchoChar(char)
setText(String s)
getText( )
setEditable(boolean)
isEditable( )
TextArea
Được dùng khi chuỗi hiển thị có từ hai dòng trở lên.
TextArea (tt…)
Các hàm dựng:
TextArea( )
TextArea(int rows, int cols )
TextArea(String text)
TextArea(String text, int rows, int cols)
Các phương thức của TextArea
setText(String)
getText( )
setEditable(boolean)
isEditable( )
insertText(String, int)
replaceText(String, int, int)
Button
Các nút ấn là cách dễ nhất để lấy các sự kiện của người dùng.
Các hàm tạo dựng:
Button( )
Button(String text)
Checkboxes và RadioButtons
Checkboxes cho phép người dùng đưa ra nhiều chọn lựa
Radiobuttons chỉ cho phép người dùng duy nhất một chọn lựa
Các hàm dựng để tạo checkbox:
Checkbox( )
Checkbox(String text)
Để tạo radiobutton, ta phải tạo đối tượng CheckBoxGroup trước khi tạo button
Choice
Lớp ‘Choice’ cho phép ta tạo danh sách có nhiều chọn lựa
Ví dụ
Choice colors=new Choice( );
colors.addItem(“Red”);
colors.addItem(“Green”);
Layout Manager
Các loại layout manager khác nhau:
Flow Layout
Border Layout
Card Layout
Grid Layout
GridBag Layout
Layout manager được thiết lập bằng cách gọi phương thức ‘setLayout( )’
FlowLayout
FlowLayout là layout manager mặc định cho các applet và các panel
Với FlowLayout các component sẽ được sắp xếp từ góc trái trên đến góc phải dưới của màn hình theo từng hàng.
Các constructor:
FlowLayout mylayout = new FlowLayout();
FlowLayout exLayout = new flowLayout(FlowLayout.RIGHT);
BorderLayout
BorderLayout mặc định cho Window, Frame và Dialog
Trình quản lý này có thể bố trí container thành 5 vùng, NORTH, EAST, SOUTH, WEST và CENTER.
Ví dụ: Để thêm một thành phần vào vùng North của container
Button b1= new Button(“North Button”);
setLayout(new BorderLayout( ));
add(b1, BorderLayout.NORTH);
CardLayout
Có thể lưu trữ một danh sách các kiểu layout khác nhau
Mỗi layout được xem như một thẻ (card)
Thẻ thường là đối tượng Panel
Một thành phần độc lập như button sẽ điều khiển các thẻ được đặt ở phía trên nhất
Các bước để tạo CardLayout:
Bố trí layout của panel chính là CardLayout
Lần lượt thêm các panel khác vào panel chính
GridLayout
Hỗ trợ việc chia container thành một lưới
Các thành phần được bố trí trong các ô của lưới.
Một ô lưới nên chứa ít nhất một thành phần
Kiểu layout này được sử dụng khi tất cả các components có cùng kích thước
Hàm constructor
GridLayout gl = new GridLayout(no. of rows, no. of columns);
GridBagLayout
Bố trí các thành phần một cách chính xác
Các thành phần không cần có cùng kích thước
Các thành phần được sắp xếp trong một lưới chứa các dòng và các cột
Thứ tự đặt các thành phần không tuân theo hướng từ trái-sang-phải và trên-xuống-dưới
Hàm constructor
GridBagLayout gb = new GridBagLayout( );
GridBagLayout
Để sử dụng layout này, bạn cần phải biết thông tin về kích cỡ và cách bố trí của các thành phần
Lớp ‘GridBagLayoutConstraints’ lưu trữ tất cả các thông tin mà lớp GridLayout yêu cầu: Vị trí và kích thuớc mỗi thành phần
Các lớp quản lý cách tổ chức các thành phần giao diện
Các phương pháp thiết kế layout
Để biết layout hay để đặt lại layout cho chương trình ứng dụng, chúng ta có thể sử dụng hai hàm của lớp Container:
LayoutManager getLayout();
void setLayout(LayoutManager mgr);
Các thành phần giao diện sau khi đã được tạo ra thì phải được đưa vào một phần tử chứa nào đó. Hàm add() của lớp Container được nạp chồng để thực hiện nhiệm vụ đưa các thành phần vào phần tử chứa.
Component add(Component comp)
Component add(Component comp, int index)
Component add(Component comp, Object constraints)
Component add(Component comp, Object constraints, int index)
Trong đó, đối số index được sử dụng để chỉ ra vị trí của ô cần đặt thành phần giao diện comp vào. Đối số constraints xác định các hướng để đưa comp vào phần tử chứa.
Ngược lại, khi cần loại ra khỏi phần tử chứa một thành phần giao diện thì sử dụng các hàm sau:
void remove(int index)
void remove(Component comp)
void removeAll()
Lớp FlowLayout
Lớp FlowLayout có các hàm tạo lập để sắp hàng các thành phần giao diện:
FlowLayout()
FlowLayout(int aligment)
FlowLayout(int aligment, int horizongap, int verticalgap)
public static final int LEFT
public static final int CENTER
public static final int RIGHT
Lớp GridLayout
Lớp GridLayout cung cấp các hàm tạo lập để sắp hàng các thành phần giao diện:
GridLayout()
GridLayout(int rows, int columns)
GridLayout(int rows, int columns, int hoiongap, int verticalgap)
Tạo ra một lưới hình chữ nhật có rows columns ô có khoảng cách giữa các hàng các cột là horizongap, verticalgap. Một trong hai đối số rows hoặc columns có thể là 0, nhưng không thể cả hai, GridLayout(1,0) là tạo ra lưới có một hàng.
Ví dụ: Mô tả cách sử dụng GridLayout
import java.awt.*;
import java.applet.*;
public class GridLayoutApplet extends Applet {
public void init() {
//Cread a list of colors
Label xLabel = new Label("X coordinate: ");
Label yLabel = new Label("Y coordinate: ");
TextField xInput = new TextField(5);
TextField yInput = new TextField(5);
// Tạo ra lưới hình chữ nhật có 4 ô và đặt layout để sắp xếp các thành phần // xLabel, xInput, yLabel, yInput
setLayout(new GridLayout(2,2));
add(xLabel); // Đặt xLabel vào ô thứ nhất
add(xInput); // Đặt xInput vào ô thứ hai
add(yLabel); // Đặt yLabel vào ô thứ ba
add(yInput); // Đặt yInput vào ô thứ tư
}
}
Lớp BorderLayout
Lớp BorderLayout cho phép đặt một thành phần giao diện vào một trong bốn hướng: bắc (NORTH), nam (SOUTH), đông (EAST), tây (WEST) và ở giữa (CENTER).
BorderLayout()
BorderLayout(int horizongap, int verticalgap)
Tạo ra một layout mặc định hoặc có khoảng cách giữa các thành phần (tính bằng pixel) là horizongap theo hàng và verticalgap theo cột.
Trường hợp mặc định là CENTER, ngược lại, có thể chỉ định hướng để đặt các thành phần comp vào phần tử chứa theo constraint là một trong các hằng trên.
Ví dụ: Đặt một nút Button có tên “Vẽ” ở trên (NORT), trường văn bản “Hiển thị thông báo” ở dưới (SOUTH) và hai thanh trượt (SCROLLBAR) ở hai bên cạnh (WEST và EAST).
import java.awt.*;
import java.applet.*;
public class BorderLayoutApplet extends Applet {
public void init() {
TextField msg = new TextField("Hien thi thong bao");
msg.setEditable(false);
Button nutVe = new Button("Ve");
Canvas vungVe = new Canvas();
vungVe.setSize(150, 150);// Đặt kích thước cho vungVe vẽ tranh
vungVe.setBackground( Color.white); // Đặt màu nền là trắng
Scrollbar sb1=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100);
Scrollbar sb2=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100);
setLayout(new BorderLayout());
add(nutVe, BorderLayout.NORTH);// Đặt nutVe ở trên (NORT)
add(msg, BorderLayout.SOUTH); // Đặt msg ở dưới (SOUTH)
add(vungVe,BorderLayout.CENTER);// Đặt vungVe ở giữa (CENTER)
add(sb1, BorderLayout.WEST); // Đặt sb1 ở bên trái (WEST)
add(sb2, BorderLayout.EAST); // Đặt sb2 ở bên phải (EAST)
}
}
Xử lý sự kiện
Các ứng dụng với GUI thường được hướng dẫn bởi các sự kiện (event). Việc nhấn một nút, mở, đóng các Window hay gõ các ký tự từ bàn phím, v.v. đều tạo ra các sự kiện (event) và được gửi tới cho chương trình ứng dụng.
Các sự kiện (Events) được xử lý bằng các công cụ sau:
Abstract Windowing Toolkit
Trình duyệt.
Các trình xử lý sự kiện do người dùng tạo riêng.
Các ứng dụng cần đăng ký trình xử lý sự kiện với đối tượng
Các trình xử lý này được gọi khi có một sự kiện tương ứng xảy ra
Xử lý các sự kiện
Event Listener sẽ lắng nghe một sự kiện cụ thể mà một đối tượng tạo ra
Mỗi event listener cung cấp các phương thức để xử lý các sự kiện này
Lớp có cài đặt listener cần định nghĩa những phương thức này
Xử lý các sự kiện
Các bước cần tuân thủ để sử dụng mô hình Event Listener:
Cài đặt Listener tương ứng
Nhận diện được tất cả các thành phần tạo sự kiện
Nhận diện được tất cả các sự kiện được xử lý
Cài đặt các phương thức của listener, và viết các đoạn mã để xử lý sự kiện trong các phương thức đó
Interface định nghĩa các phương thức khác nhau để xử lý mỗi sự kiện
Các sự kiện và Listener tương ứng
ActionEvent
AdjustmentEvent
ComponentEvent
FocusEvent
ItemEvent
WindowEvent
TextEvent
MouseEvent
KeyEvent
ActionListener
AdjustmentListener
ComponentListener
FocusListener
ItemListener
WindowListener
TextListener
MouseListener
MouseMotionListener
KeyListener
Xử lý các sự kiện
Trong Java các sự kiện được thể hiện bằng các đối tượng. Lớp cơ sở nhất, lớp cha của tất cả các lớp con của các sự kiện là lớp java.util.EventObject.
Các lớp con của AWTEvent được chia thành hai nhóm:
1. Các lớp mô tả về ngữ nghĩa của các sự kiện
2. Các lớp sự kiện ở mức thấp
Các lớp xử lý sự kiện
1. Các lớp ngữ nghĩa
a/ ActionEvent
Sự kiện này được phát sinh bởi những hoạt động thực hiện trên các thành phần của GUI. Các thành phần gây ra các sự kiện hành động bao gồm:
Button - khi một nút button được kích hoạt
List - khi một mục trong danh sách được kích hoạt đúp
MenuItem - khi một mục trong thực đơn được chọn
TextField - khi gõ phím ENTER trong trường văn bản (text).
Lớp ActionEvent có các hàm:
String getActionCommand()
Cho biết tên của lệnh tương ứng với sự kiện xảy ra, là tên của nút, mục hay text.
b/ AdjustmentEvent
Thành phần gây ra sự kiện căn chỉnh (adjustment):
Scrollbar - khi thực hiện một lần căn chỉnh trong thanh trượt Scrollbar.
Lớp này có hàm:
int getValue()
Cho lại giá trị hiện thời được xác định bởi lần căn chỉnh sau cùng.
c/ ItemEvent
Các thành phần của GUI gây ra các sự kiện về các mục gồm có:
Checkbox - khi trạng thái của hộp kiểm tra Checkbox thay đổi
CheckboxMenuItem - khi trạng thái của hộp kiểm tra Checkbox ứng với mục của thực đơn thay đổi,
Choice - khi một mục trong danh sách được chọn hoặc bị loại bỏ
List - khi một mục trong danh sách được chọn hoặc bị loại bỏ.
Lớp ItemEvent có hàm:
Object getItem()
Cho lại đối tượng được chọn hay vừa bị loại bỏ.
d/ TextEvent
Các thành phần của GUI gây ra các sự kiện về text gồm có:
TextArea - khi kết thúc bằng nhấn nút ENTER,
TextField - khi kết thúc bằng nhấn nút ENTER.
2. Các sự kiện ở mức thấp
a/ ComponentEvent
Sự kiện này xuất hiện khi một thành phần bị che giấu, hiển thị hay thay đổi lại kích thước. Lớp ComponentEvent có hàm:
Component getComponent()
Cho lại đối tượng tham chiếu kiểu Component.
b/ ContainerEvent
Sự kiện này xuất hiện khi một thành phần được bổ sung hay bị loại bỏ khỏi phần tử chứa (Container).
c/ FocusEvent
Sự kiện này xuất hiện khi một thành phần nhận được một nút từ bàn phím.
d/ KeyEvent
Lớp KeyEvent là l
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Trần Việt Thao
Dung lượng: |
Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)