71
Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ Tài liệu lưu hành nội bộ Trang 1 LỜI NÓI ĐẦ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 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. Một số trường đại học ở Việt Nam dạy môn lập trình java như một chuyên đề tự chọn cho các sinh viên công nghệ thông tin giai đoạn chuyên ngành. Sau một thời gian tìm hiểu, làm việc và được tham gia giảng dạy chuyên đề lập trình java cho lớp cử nhân tin học từ xa qua mạng. Nhóm tác giả chúng tôi quyết định biên soạn cuốn giáo trình này nhằm phục vụ công tác giảng dạy cũng như học tập của sinh viên chuyên ngành công nghệ thông tin. Nội dung giáo trình tập trung vào những kiến thức căn bản nhất của lập trình java giúp người đọc bước đầu tiếp cập dễ dàng với công nghệ mới này, đây cũng chính là một bước đệm để chúng ta trở thành “java shooter”. Một số vấn đề nâng trong ngôn ngữ lập trình java như: javabean, thiết kết giao diện dùng thư viện JFC(Java Foundation Class), lập trình mạng, lập trình cơ sở dữ liệu bằng java, lập trình ứng dụng web dùng J2EE (Java 2 Enterprise Edition), … sẽ được nói đến trong các chuyên đề nâng cao. Chương 6 của giáo trình giới thiệu tổng quan về lập trình cơ sở dữ liệu dùng jdbc, một nội dung theo chúng tôi cần phải được trình bày trong một chuyên đề riêng. Để có thể đọc hiểu giáo trình này người đọc cần nắm vững các kiến thức về: nhập môn lập trình, lập trình hướng đối tượng. Đây là lần xuất bản đầu tiên chắc chắn không thể tránh khỏi những sai sót. Nhóm tác giả rất mong nhận được những ý kiến đóng góp của quý thầy cô, các đồng nghiệp và bạn đọc để có thể hoàn thiện hơn giáo trình này phục vụ cho việc học tập của sinh viên. Xin chân thành cảm ơn! NHÓM TÁC GIẢ Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only.

LAP TRINH JAVA

Embed Size (px)

Citation preview

Page 1: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 1

LỜI NÓI ĐẦ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. Một số trường đại học ở Việt

Nam dạy môn lập trình java như một chuyên đề tự chọn cho các sinh viên công nghệ thông tin

giai đoạn chuyên ngành.

Sau một thời gian tìm hiểu, làm việc và được tham gia giảng dạy chuyên đề lập trình

java cho lớp cử nhân tin học từ xa qua mạng. Nhóm tác giả chúng tôi quyết định biên soạn

cuốn giáo trình này nhằm phục vụ công tác giảng dạy cũng như học tập của sinh viên chuyên

ngành công nghệ thông tin. Nội dung giáo trình tập trung vào những kiến thức căn bản nhất

của lập trình java giúp người đọc bước đầu tiếp cập dễ dàng với công nghệ mới này, và

đây cũng chính là một bước đệm để chúng ta trở thành “java shooter”. Một số vấn đề nâng

trong ngôn ngữ lập trình java như: javabean, thiết kết giao diện dùng thư viện JFC(Java

Foundation Class), lập trình mạng, lập trình cơ sở dữ liệu bằng java, lập trình ứng dụng web

dùng J2EE (Java 2 Enterprise Edition), … sẽ được nói đến trong các chuyên đề nâng cao.

Chương 6 của giáo trình giới thiệu tổng quan về lập trình cơ sở dữ liệu dùng jdbc, một nội

dung theo chúng tôi cần phải được trình bày trong một chuyên đề riêng.

Để có thể đọc hiểu giáo trình này người đọc cần nắm vững các kiến thức về: nhập

môn lập trình, lập trình hướng đối tượng. Đây là lần xuất bản đầu tiên chắc chắn không thể

tránh khỏi những sai sót. Nhóm tác giả rất mong nhận được những ý kiến đóng góp của quý

thầy cô, các đồng nghiệp và bạn đọc để có thể hoàn thiện hơn giáo trình này phục vụ cho việc

học tập của sinh viên.

Xin chân thành cảm ơn!

NHÓM TÁC GIẢ

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 2: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 2

BÀI 1: TỔNG QUAN LẬP TRÌNH JAVA

1/ Giới thiệu ngôn ngữ Java

Lịch sử phát triển của Java

Ra đời tại Sun Microsystems bởi James Gosling

1991: Version đầu tiên với tên “Oak”

1995: Tên chính thức là Java

Mục đích của Java

Dùng để phát triển ứng dụng cho các thiết bị điện tử “thông minh”

Tạo các trang web có nội dung động (web applet)

Hiện nay, Java được sử dụng để phát triển nhiều loại ứng dụng khác nhau: cơ sở dữ liệu, mạng, Internet, viễn thông...

Đặc điểm của Java

Đơn giản

Hướng đối tượng

Đa nhiệm

An toàn

Garbage Collection

Máy ảo (biên dịch và thông dịch)

Khả chuyển (Portability)

Phân tán

2/ Kiến trúc của Java

Java Platform

Java Virtual Machine (Java VM)

Java Application Programming Interface (Java API)

Java Development Kit – JDK

Bộ công cụ phát triển Java (jdk) gồm trình biên dịch, thông dịch, trợ giúp, soạn tài liệu… và các thư viện chuẩn

Ngoài ra còn một số thư viện khác như JSP, JavaMail, Java TAPI…

1995: Version JDK 1.0

1998: Version JDK 1.2 (Java 2nd Platform)

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 3: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 3

2004: Version JDK 1.5

3/ Phát triển ứng dụng Java

Hai loại ứng dụng Java

Application: Ứng dụng độc lập

Applet: Ứng dụng chạy trên Web

Thư viện lớp Java

Bộ JDK bao gồm rất nhiều lớp chuẩn đã được xây dựng sẵn.

Lập trình viên thường sử dụng các lớp chuẩn để phát triển ứng dụng.

4/ Các bước phát triển

5/ Một chương trình Java cơ bản

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 4: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 4

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 5: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 5

• Biên dịch chương trình

Vào chế độ Console của Windows

Gõ câu lệnh javac Hello.java

Nếu không có thông báo lỗi, file Hello.class sẽ được tạo ra

• Thực thi chương trình

Gõ câu lệnh java Hello (không cần .class)

• Thay đổi cách hiển thị

public class Hello

{

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 6: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 6

public static void main(String args[])

{

System.out.print( “Chao\tmung\nban\nden\tvoi\nlap trinh Java\n" );

}

}

Chao mung

ban

den voi

lap trinh Java

6/ Các kiểu dữ liệu cơ bản

Java có hai kiểu dữ liệu

Dữ liệu gốc chuẩn: Là các kiểu dữ liệu đã được định nghĩa trong ngôn ngữ như số nguyên, số thực, ký tự, logic

Dữ liệu dẫn xuất: Do người dùng tự định nghĩa như mảng, lớp, giao tiếp

Ví dụ khai báo biến

int x;

Person ps;

Kiểu số nguyên

Kiểu Kích thước Khoảng giá trị

byte 8 bits -256…255

short 16 bits -32768…32767

int 32 bits -232…232 – 1

long 64 bits -264…264 – 1

Kiểu số thực

Kiểu Kích thước Khoảng giá trị

float 32 bits -3.4e38…3.4e38

double 64 bits -1.7e308…1.7e308

Kiểu boolean: Nhận giá trị true hoặc false

Kiểu char: Kiểu ký tự theo chuẩn Unicode

Một số hằng ký tự

Hằng Ý nghĩa

\uxxxx Ký tự Unicode

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 7: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 7

\t Tab ngang

\n Xuống hàng

\r Dấu enter

\’ Nháy đơn

Kiểu mảng

Khai báo: int[] iarray; hoặc int iarray[];

Cấp phát: iarray = new int[100];

Khởi tạo:

int[] iarray = {1, 2, 3, 5, 6};

char[] carray = {‘a’, ‘b’, ‘c’};

Chú ý: Luôn khởi tạo hoặc cấp phát mảng trước khi sử dụng

• Một số khai báo không hợp lệ:

int[5] iarray;

int iarray[5];

Truy cập mảng

iarray[3] = 0;

carray[1] = ‘z’;

Chú ý: Chỉ số của mảng được tính từ 0

Lấy số phần tử mảng: iarray.length

Quy tắc đặt tên biến

Bắt đầu bằng một chữ cái, một dấu gạch dưới (_) hoặc một dấu dollard ($)

Không có khoảng trắng giữa tên

Sau ký tự đầu có thể dùng ký tự, số, dấu dollard, dấu gạch dưới

Không trùng với các từ khoá

Ví dụ: a_1234_d, 1awas, _asdc, a sas, $erd, %ats…

Chú ý: Java phân biệt chữ hoa chữ thường

7/ Các toán tử

Bảng toán tử

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 8: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 8

8/ Các cấu trúc điều khiển

Lệnh if/else

import java.util.Date;

public class TestIf

{

public static void main( String args[ ] )

{

Date today = new Date();

if( today.getDay() == 0 )

System.out.println(“Hom nay la chu nhat\n”);

else

System.out.println(“Hom nay khong la chu nhat\n" );

}

}

Lệnh switch

import javax.swing.JOptionPane;

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

}

}

Vòng lặp for

• for(<khởi tạo>; <điều kiện lặp>; <bước nhảy>)

<khối lệnh>;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 9: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 9

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);

}

}

Vòng lặp while

• while (<biểu thức boolean>)

<khối lệnh>;

// 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);

Vòng lặp do/while

• do

{

<khối lệnh>;

} while <biểu thức boolean>;

// Tính tổng các số lẻ từ 1 đến 100

int tong = 0, i=1;

do

{

tong+=i; i+=2;

} while (i<=100);

System.out.println(tong);

9/ Nhập dữ liệu từ bàn phím

• Ví dụ nhập một số nguyên và một số thực

import java.io.*;

public class TestInput

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 10: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 10

{

public static void main(String[] args) throws Exception

{

BufferedReader inStream =

new BufferedReader(new InputStreamReader(System.in));

System.out.print("Nhap mot so nguyen:");

String siNumber = inStream.readLine();

int iNumber = Integer.parseInt(siNumber);

System.out.print("Nhap mot so thuc:");

String sfNumber = inStream.readLine();

float fNumber = Float.parseFloat(sfNumber);

System.out.println("So nguyen:“ + iNumber);

System.out.println("So thuc:“ + fNumber);

}

}

10/ Ví dụ Xây dựng đối tượng Circle

• Cách 1: Sử dụng một file Circle.java duy nhất

public class Circle

{

private int radius;

public Circle(int r) { radius = r; }

public double getArea() { return Math.PI*radius*radius; }

public double getCircum() { return 2*Math.PI*radius; }

public static void main(String[] args)

{

Circle c = new Circle(5);

System.out.println("Area = " + c.getArea());

System.out.println("Circumference = " + c.getCircum());

}

}

• Cách 2: Sử dụng một file với 2 lớp riêng biệt

public class TestCircle

{

public static void main(String[] args)

{

Circle c = new Circle(5);

System.out.println("Area = " + c.getArea());

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 11: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 11

System.out.println("Circumference = " + c.getCircum());

}

}

class Circle

{

...

}

• Cách 3: Sử dụng hai file riêng biệt

// file TestCircle.java

public class TestCircle

{

public static void main(String[] args)

{

...

}

}

// file Circle.java

class Circle

{

...

}

11/ Công cụ soạn thảo

Notepad

Jbuilder

Eclipse

EditPlus

JCreator

12/ Chỉ dẫn thực hành

Đặt biến môi trường PATH:

o Trong Windows: Nháy phải trên My Computer, chọn Properties, chọn Advanced, chọn Enviroment Variables, chọn biến PATH và edit, thêm vào đường dẫn tới thư mục bin của bộ JDK.

o Trong chế độ Console: Gõ lệnh

set Path=%Path%;đường dẫn tới bin

Nên tham khảo java/docs khi làm việc

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 12: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 12

BÀI 2: LẬP TRÌNH HƯỚNG

ĐỐI TƯỢNG TRONG JAVA

1/ Các phương pháp lập trình

Step-by-Step Programming

Lập trình từng bước

Machine Language, Assembly Language

Procedural Programming

Thiết kế top-down. Chương trình được chia thành các hàm, thủ tục.

Pascal, C

Hạn chế: dùng dữ liệu toàn cục, khó phát triển, khó mô tả các thực thể trong thực tế

Object-Oriented Programming

Chương trình bao gồm các đối tượng. Các đối tượng tương tác với nhau thông qua các phương thức của chúng

Dễ mô tả các thực thể

Dễ phát triển, mở rộng chương trình

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 13: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 13

2/ Lập trình hướng đối tượng-OOP

Lớp và đối tượng

Dữ liệu và các thao tác trên dữ liệu được kết hợp trong cùng một đối tượng (object)

Lớp (class) định nghĩa các tính chất của một tập hợp các đối tượng cùng kiểu

Đối tượng là các thể hiện (instances) của lớp

Đặc điểm của OOP

Tính đóng gói (Encapsulation)

Tính kế thừa (Inheritance)

Tính đa hình (Polymorphism)

Ví dụ về OOP trong Java

Lớp Time và TimeTest nằm trong cùng thư mục

Lớp Time nằm trong file Time.java. Nó chứa các định nghĩa về thời gian.

Lớp TimeTest nằm trong file TimeTest.java. Nó dùng để kiểm tra lớp Time. Lớp TimeTest chứa hàm main.

Khi chạy chỉ cần gõ:

javac TimeTest.java

java TimeTest

Java sẽ tự động tìm và dịch file Time.java

Lớp Time

// File Time.java

import java.text.DecimalFormat;

public class Time

{

private int hour; // 0 - 23

private int minute; // 0 - 59

private int second; // 0 - 59

// Cau tu

public Time() { setTime( 0, 0, 0 ); }

// Ham thiet lap du lieu

public void setTime( int h, int m, int s )

{

hour = ( ( h >= 0 && h < 24 ) ? h : 0 );

minute = ( ( m >= 0 && m < 60 ) ? m : 0 );

second = ( ( s >= 0 && s < 60 ) ? s : 0 );

}

// Chuyen sang khuon dang thoi gian quoc te

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 14: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 14

public String toUniversalString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return twoDigits.format( hour ) + ":" +

twoDigits.format( minute ) + ":" + twoDigits.format( second );

}

// Chuyen sang khuon dang thoi gian thong thuong

public String toStandardString()

{

DecimalFormat twoDigits = new DecimalFormat( "00" );

return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" + twoDigits.format( minute ) + ":" + twoDigits.format( second ) + ( hour < 12 ? " AM" : " PM" );

}

} // Ket thuc lop Time

Dữ liệu

Mỗi dữ liệu phải có một phạm vi nhất định

Phương thức

Cấu tử có tên trùng với tên lớp

Cấu tử không có kiểu trả về

Có thể có nhiều cấu tử (overloading)

Mỗi phương thức phải có một phạm vi nhất định

Lớp TimeTest

// File TimeTest.java

import javax.swing.JOptionPane;

public class TimeTest

{

public static void main( String args[ ] )

{

Time time = new Time(); // Tao mot doi tuong kieu Time

// Lay thoi gian

String output = "The initial universal time is: "

+ time.toUniversalString()

+ "\nThe initial standard time is: “

+ time.toStandardString();

// Dat lai thoi gian

time.setTime( 13, 27, 6 );

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 15: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 15

output += "\n\nUniversal time after setTime is: "

+ time.toUniversalString()

+ "\nStandard time after setTime is: "

+ time.toStandardString();

// Dat lai thoi gian

time.setTime( 99, 99, 99 );

output += "\n\nAfter attempting invalid settings: "

+ "\nUniversal time: " + time.toUniversalString()

+ "\nStandard time: " + time.toStandardString();

JOptionPane.showMessageDialog( null, output,

"Testing Class Time1", JOptionPane.INFORMATION_MESSAGE );

System.exit( 0 );

} // Ket thuc ham main

} // Ket thuc lop TimeTest

Chạy TimeTest

• javac TimeTest.java

• java TimeTest

3/ Phạm vi truy cập

private

• Chỉ truy cập được từ trong lớp khai báo.

protected

• Truy cập được từ trong lớp khai báo, lớp con của của lớp khai báo và các lớp cùng gói với lớp khai báo.

public

• Truy cập được từ mọi nơi.

Mặc định

• Truy cập được từ trong lớp khai báo và các lớp cùng gói với lớp khai báo.

Từ khoá this

• Từ khoá this chỉ đối tượng hiện thời

public class Time

{

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 16: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 16

private int hour; // 0 - 23

private int minute; // 0 - 59

private int second; // 0 - 59

// Viet lai ham setTime

public void setTime( int hour, int minute, int second )

{

this.hour = ( ( hour >= 0 && hour < 24 ) ? hour : 0 );

this.minute = ( ( minute >= 0 && minute < 60 ) ? minute : 0 );

this.second = ( ( second >= 0 && second < 60 ) ? second : 0 );

}

Nạp chồng hàm khởi tạo

// Ham khoi tao khong tham so

public Time() { this( 0, 0, 0 ); }

// Ham khoi tao mot tham so

public Time( int h ) { this( h, 0, 0 ); }

// Ham khoi tao hai tham so

public Time( int h, int m ) { this( h, m, 0 ); }

// Ham khoi tao ba tham so

public Time( int h, int m, int s ) { setTime( h, m, s ); }

// Ham sao chep

public Time( Time time )

{ this( time.hour, time.minute, time.second ); }

// Su dung cac cau tu

Time t1 = new Time(); // 00:00:00

Time t2 = new Time( 2 ); // 02:00:00

Time t3 = new Time( 21, 34 ); // 21:34:00

Time t4 = new Time( 12, 25, 42 ); // 12:25:42

Time t5 = new Time( 27, 74, 99 ); // 00:00:00

Time t6 = new Time( t4 ); // 12:25:42

Một số từ khoá

Từ khoá final

• Áp dụng cho lớp, phương thức, biến.

• Lớp final: là lớp không thể có lớp con

public final class NoChild {...}

• Biến final: là biến không thể thay đổi khi đã gán giá trị

private final int MAX = 100;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 17: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 17

• Phương thức final: là phương thức không thể nạp chồng

public final void NoOverride();

Từ khoá static

• Được dùng với phương thức và biến.

• Biến static: là biến chung cho mọi đối tượng của lớp, nó được truy cập qua đối tượng của lớp hoặc qua tên lớp.

private static char TAB = ‘\t’;

• Phương thức static: là phương thức chỉ được phép truy cập tới các biến static của lớp, nó có thể gọi ngay cả khi chưa có đối tượng nào của lớp.

• public static void Welcome() {...}

4/ Kế thừa (Inheritance)

Kế thừa là việc xây dựng lớp mới dựa trên lớp đã có sẵn

• Lớp đã có sẵn là lớp cha: superclass

• Lớp mới là lớp con: subclass

• Ví dụ:

• Hình vuông kế thừa từ hình chữ nhật

• Con ếch kế thừa từ loài động vật dưới nước

• Chú ý:

• Tính kế thừa thể hiện quan hệ “is a”, khác với quan hệ “has a” (composition)

• Composition: một đối tượng chứa các đối tượng thuộc lớp khác. Ví dụ: ôtô có các bánh xe

Cây kế thừa

Ví dụ về kế thừa trong Java

• Xây dựng lớp Hình cầu (Sphere) kế thừa từ lớp Hình tròn (Circle)

// File Circle.java

public class Circle

{

protected int radius; // radius co the duoc truy cap tu Sphere

public Circle( int radius )

{

this.radius = radius;

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 18: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 18

public int getRadius() { return radius; }

public double getArea() { return Math.PI*radius*radius; }

public double getCircum() { return 2*Math.PI*radius; }

}

// File Sphere.java

public class Sphere extends Circle

{

public Sphere( int radius )

{

super(radius); // Goi cau tu cua lop cha

}

// Ham tinh dien tich bet mat. Nap chong ham getArea()

public double getArea()

{ return 4*Math.PI*radius*radius; }

// Ham tinh the tich

public double getVolume()

{ return (4.0d/3)*Math.PI*radius*radius*radius; }

}

// File InheritanceTest.java

public class InheritanceTest

{

public static void main(String[] args)

{

Circle circle = new Circle(5);

Sphere sphere = new Sphere(2);

System.out.println(“Radius of circle: " + circle.getRadius());

System.out.println("Radius of sphere: " + sphere.getRadius());

System.out.println("Area of circle: " + circle.getArea());

System.out.println(“Area of sphere: " + sphere.getArea());

System.out.println("Volume of sphere: " + sphere.getVolume());

}

}

Từ khoá super

• Từ khoá super chỉ đối tượng của lớp cha

super(radius): Gọi cấu tử của lớp cha

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 19: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 19

• Question: Thêm phương thức tính diện tích mặt cắt qua tâm hình cầu ?

• Answer: Đó chính là diện tích hình tròn

// Them phuong thuc nay trong lop Sphere

public double getAreaCut() { return super.getArea(); }

// ...

// Ham main, goi Tinh dien tich mat cat

System.out.println(“Area cut of sphere: " + sphere.getAreaCut());

// ...

5/ Đa hình (Polymorphism)

Ví dụ:

• Tính đa hình thể hiện qua việc: cùng một phương thức nhưng có nội dung thực hiện khác nhau trên các đối tượng khác nhau.

• Phương thức gọi được xác định thông qua đối tượng được tham chiếu, không thông qua kiểu khai báo của tham chiếu.

• Trong Java, các phương thức luôn mang tính đa hình.

6/ Lớp trừu tượng (abstract)

Lớp trừu tượng chỉ được dùng làm lớp cha cho các lớp khác, nó không có các thể hiện (instance).

Lớp trừu tượng định nghĩa các thuộc tính chung cho các lớp con của nó.

Ví dụ có thể thiết kế lớp Hình tròn, Hình vuông... kế thừa từ lớp trừu tượng Hình. Lớp Hình có thuộc tính là tên hình, các phương thức tính diện tích, chu vi...

Lớp trừu tượng (abstract) thường có ít nhất một phương thức trừu tượng, là phương thức không có cài đặt.

public abstract void draw();

Khai báo lớp trừu tượng

public abstract class ClassName {…}

Các lớp con của một lớp cha trừu tượng phải cài đặt tất cả các phương thức trừu tượng. Nếu không nó cũng sẽ trở thành lớp trừu tượng.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 20: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 20

Không thể tạo các đối tượng của một lớp trừu tượng nhưng có thể khai báo biến thuộc kiểu lớp trừu tượng để tham chiếu đến các đối tượng thuộc lớp con của nó.

public abstract class Shape

{

static final double PI = 3.14159;

public abstract double getArea();

public abstract double getVolume();

}

class Circle extends Shape

{

double radius;

public double getArea() { return PI*radius*radius; }

public double getVolume() { return 0; }

}

class Cube extends Shape

{

double a, b, c;

public double getArea() { return 2*(a*b+b*c+c*a); }

public double getVolume() { return a*b*c; }

}

7/ Giao tiếp (interface)

Giao diện chỉ ra các “tính chất” mà một đối tượng có thể có, trong một “ngữ cảnh” nào đó.

Một người có thể khi ở nhà là một người con, ở trường là một sinh viên, ở lớp là một người bạn.

Giao diện trong Java có thể được dùng để thể hiện sự đa kế thừa như trong C++.

Khai báo giao tiếp

interface Name {...}

Một giao tiếp thường chỉ chứa các hằng static và các phương thức public chưa cài đặt.

Một giao tiếp có thể thừa kế một giao tiếp khác.

Một lớp có thể cài đặt (implements) một hay nhiều giao tiếp nhưng chỉ có thể thừa kế (extends) từ một lớp.

interface Drawable

{

public void draw();

}

public abstract class Shape {...}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 21: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 21

public class Circle extends Shape implements Drawable

{

...

public void draw() {...}

}

8/ Gói (package)

Package cho phép nhóm một tập hợp các lớp hoặc các giao tiếp có quan hệ với nhau để dễ dàng quản lý, bảo trì, phân phối…

Ví dụ: Tạo package Transport chứa các lớp về phương tiện đi lại: Car, Moto, Boat...

Đặt các lớp vào cùng thư mục Transport

Khai báo ở đầu mỗi lớp dòng

package Transport;

Sử dụng package – cách 1: Khai báo import

Ví dụ 1: import Transport.Car;

Ví dụ 2: import Transport.*;

Ví dụ 3: import java.awt.Point;

Point p = new Point(1,2);

Sử dụng package – cách 2: Sử dụng trực tiếp

java.awt.Point p = new java.awt.Point(1,2);

javax.swing.JOptionPane.showMessageDialog(...);

Chú ý:

Chỉ có thể truy cập được đến các lớp public trong các package

Package java.lang.* được tự động import vào mọi chương trình

9/ Java vs C++

Một chương trình Java chạy chậm hơn so với một chương trình C tương ứng khoảng 20 lần.

Java không có kiểu liệt kê (enum), kiểu cấu trúc (struct) hay hợp (union), nó chỉ có class. Mọi biến hay hàm của Java đều nằm trong một class nào đó.

Java không có toán tử phạm vi (scope) ::

Cỡ của các kiểu dữ liệu nguyên thuỷ (primitive) trong Java không phụ thuộc vào máy. Đặc biệt kiểu char có cỡ 16 bit (Unicode).

Biểu thức logic trong Java chỉ nhận giá trị boolean.

Trong Java, mọi biến không thuộc kiểu nguyên thuỷ đều phải tạo ra bằng từ khoá new.

Java không có tiền xử lý (preprocessor)

Java không có con trỏ.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 22: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 22

Java không có huỷ tử (destructor), nó chỉ có phương thức finalize() được gọi bởi Garbage Collector.

Java không hỗ trợ đối số mặc định.

Java chỉ hỗ trợ kế thừa đơn, tất cả mọi lớp đều mặc định kế thừa từ lớp Object.

Java không có template.

Java không có từ khoá virtual. Tất cả mọi phương thức non-static đều luôn dùng dynamic binding.

Java không có quá tải toán tử (operator overloading).

Đối số của hàm luôn được xử lý như đối số giá trị (value argument)

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 23: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 23

BÀI 3: LẬP TRÌNH GUI (APPLET) 1/ Hai loại ứng dụng Java

Applet

• Chương trình Java chạy trong mộttrangweb nhờ vào trình duyệt hỗ trợ Java.

Stand-alone Application

• Giao diện dòng lệnh (console): Tương tác với người dùng thông qua các dòng ký tự.

• Giao diện đồ hoạ (GUI): Tương tác với người dùng bằng nhiều cách khác nhau như hình ảnh, nút nhấn, biểu tượng…việc xử lý ứng dụng dựa trên các sự kiện.

2/ Thư viện AWT

AWT (Abstract Windowing Toolkit)

• Là bộ thư viện dùng để xây dựng các ứng dụng giao diện đồ hoạ (GUI)

• Các thành phầngiaodiện đồ hoạ nằm trong gói java.awt

3/ Các thành phần của AWT

Các thành phần container: dùng để “chứa” và quản lý các thành phần khác

• Applet

• Frame

• Dialog

Các thành phần khác: nằm trong các thành phần container.

4/ Một số phương thức của Component

void setVisible(boolean): hiển thị hoặc ẩn component

Dimension getSize(): trả về kích thướccủa component

void setSize(Dimension): thay đổikíchthước

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 24: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 24

void setEnabled(): “bật” hoặc “tắt” component

void repaint(): cậpnhậtlại component

void update(Graphics g): đượcgọiqua repaint()

void paint(Graphics g): đượcgọi qua update()

void setBackground(Color): đặt màu nền

5/ Xây dựng các applet

LớpApplet

• Java có lớp java.applet.Applet kế thừa từ lớp java.awt.Component cho phép tạo ra các applet trong Web.

• Mọi lớp applet do người dùng tạo ra đều phải kế thừa từ lớp Applet.

Ví dụ 1: Tạo file TestApplet.java

Dịch: javac TestApplet.java

Thực thi applet

• Cách 1: Tạo file TestApplet.html có nội dung như sau:

• Mở file này bằng trình duyệt WEB

• Cách 2: Dùng công cụ appletviewer.

Gõ lệnh:

appletviewer TestApplet.html

<APPLET CODE=“TestApplet.class” WIDTH=500 HEIGHT=500

</APPLET>

6/ Khung của một applet cơ bản

import java.applet.Applet;

import java.awt.Graphics;

public class TestApplet extends Applet

{

public void init() {…}

public void start() {…}

public void stop() {…}

public void destroy {…}

public void paint( Graphics g) {…}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 25: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 25

7/ Hoạt động của Applet

• init(): khởi tạo applet

• start(): applet bắt đầu hoạt động

• stop(): applet chấm dứt hoạt động

• destroy(): giải phóng applet

Chú ý:

• paint() không phải là phương thức của Applet mà là của Component.

• paint() được gọi mỗi khi cửa sổ được vẽ lại.

8/ Hoạt động của Applet

Vòng đời của một Applet

• Nạp một applet: applet được khởi tạo và thực thi

• Chuyển hoặc trở về trang Web: Các phương thức stop và start sẽ được gọi

• Nạp lại applet: như quá trình nạp applet

• Thoát khỏitrình duyệt: phương thức stop và destroy sẽ được gọi.

9/ Lớp Graphics

java.awt.Graphics là lớp cung cấp các phương thức vẽ đồ hoạ cơ bản:

Đường thẳng (Line)

Đường oval (Oval)

Hình chữ nhật (Rectangle)

Đa giác (Polygon)

Vănbản(Text)

Hình ảnh (Image),….

Hệ toạ độ

Vẽ đường thẳng

• public void drawLine(int x1, int y1, int x2, int y2);

Vẽ hình chữ nhật

• public void drawRect(int x, int y, int width, int height);

Tô một hình chữ nhật

• public void fillRect(int x, int y, int width, int height);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 26: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 26

Xoá một vùng chữ nhật

• public void clearRect(int x, int y, int width, int height);

Vẽ đa giác

• public void drawPolygon(int[] x, int[] y, int numPoint);

• public void drawPolygon(Polygon p);

import java.applet.Applet;

import java.awt.Graphics;

public class DemoRect extends Applet

{

public void init()

{

System.out.println("Demonstration of some simple figures");

}

public void paint(Graphics g)

{

g.drawLine(70, 300, 400, 250);

g.drawRect(100, 50, 130, 170);

g.fillRect(120, 70, 70, 70);

int[] x = { 280, 310, 330, 430, 370 };

int[] y = { 2p0, 140, 170, 70, 90 };

g.drawPolygon(x, y, x.length);

}

}

Vẽ đường tròn/elip

• public void drawOval(int x, int y, int width, int height);

Tô đường tròn/elip

• public void fillOval(int x, int y, int width, int height);

Vẽ cung tròn

• public void drawArc(int x, int y, int width, int height,

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 27: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 27

int startAngle, int arcAngle);

Vẽ xâu kí tự

• public void drawString(String str, int x, int y);

Vẽ ảnh

• public void drawImage(Image img, int x, int y,...);

import java.applet.Applet;

import java.awt.Graphics;

public class DemoOval extends Applet

{

public void init()

{

System.out.println("Demonstration of some simple figures");

}

public void paint(Graphics g)

{

int xstart = 70, ystart = 40, size = 100;

g.drawOval(xstart, ystart, size, size);

g.drawOval(xstart + (size*3)/4, ystart, size, size);

g.drawOval(xstart + size/2, ystart + size/2, size, size);

g.drawArc(xstart, ystart, 300, 200, 0, -90);

g.drawString("good morning !", xstart + 265, ystart + 90);

}

}

• Demo import java.applet.Applet;

import java.awt.Graphics;

import java.awt.Image;

public class DemoImage extends Applet

{

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 28: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 28

public void init()

{

System.out.println("Demonstration of imaging");

}

public void paint(Graphics g)

{

Image image = getToolkit().getImage("summer.jpg");

g.drawImage(image, 0, 0, this);

}

}

10/ Các lớp tiện ích khác

Lớp Point: biểu diễn điểm trên màn hình

Lớp Dimension: biểu diễn kích thước về chiều rộng và chiều cao của một đối tượng

Lớp Rectangle: biểu diễn hình chữ nhật

Lớp Polygon: biểu diễn đa giác

Lớp Color: biểu diễn màu sắc

import java.applet.Applet;

import java.awt.*;

public class DemoColor extends Applet

{

public void paint(Graphics g)

{

Dimension size = getSize();

g.setColor(Color.orange);

g.fillRect(0, 0, size.width, size.height);

Color color = new Color(10, 150, 20);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 29: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 29

g.setColor(color);

g.drawString("I am a colorful string",

size.width/2 - 50, size.height/2);

}

}

11/ Xử lý font vẽ

import java.applet.Applet;

import java.awt.*;

public class DemoFont extends Applet

{

public void paint(Graphics g)

{

Font font = new Font("Arial", Font.BOLD, 30);

g.setFont(font);

g.drawString("I am font Arial, bold, size 30", 50, 50);

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 30: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 30

BÀI 4: CÁC THÀNH PHẦN GUI

1/ Applet tính tổng 2 số

// file TinhTong.java

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class TinhTong extends Applet implements ActionListener

{

private TextField txtNum1, txtNum2;

private Button button;

// phuong thuc nay duoc goi khi applet khoi tao

public void init()

{

txtNum1 = new TextField(8); // tao o nhap so 1

txtNum2 = new TextField(8); // tao o nhap so 2

button = new Button("Tinh Tong"); // tao nut an

// dua cac thanh phan vao applet

add(txtNum1);

add(txtNum2);

add(button);

// khoi tao gia tri cho o nhap

txtNum1.setText("0");

txtNum2.setText("0");

// dat nghe su kien bam nut

button.addActionListener(this);

};

// phuong thuc nay duoc goi khi co mot hanh dong xay ra

public void actionPerformed(ActionEvent event)

{

repaint();

}

// phuong thuc nay duoc goi khi ve lai cua so

public void paint(Graphics g)

{

int num1, num2, sum;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 31: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 31

String s1 = txtNum1.getText();

num1 = Integer.parseInt(s1);

String s2 = txtNum2.getText();

num2 = Integer.parseInt(s2);

sum = num1 + num2;

g.drawString("Tong cua hai so la: "+sum, 35, 80);

}

}

Giải thích applet

• TextField và Button là các lớp thuộc gói java.awt

• ActionListener và ActionEvent là các lớp thuộc gói java.awt.event

• TinhTong cần cài đặt giao diện ActionListener vì nó sẽ trực tiếp xử lý sự kiện ấn nút button.addActionListener(this);

• Có thể dùng một lớp khác để nghe sự kiện thay cho lớp TinhTong

2/ Mô hình xử lý sự kiện

Sự kiện (event) được phát sinh khi người dùng tương tác với GUI, ví dụ: di chuyển chuột, ấn nút, nhập dữ liệu văn bản, chọn menu...

• Thông tin về sự kiện được lưu trong một đối tượng thuộc lớp con của lớp AWTEvent (gói java.awt.event).

• Chương trình có thể xử lý các sự kiện bằng cách đặt “lắng nghe sự kiện” trên các thành phần GUI.

Ba thành phần chính của mô hình

• Event source: nguồn gây ra sự kiện, thường là các thành phần GUI trong chương trình

• Event object: đối tượng lưu thông tin về sự kiện đã xảy ra

• Event listener: đối tượng sẽ nhận được thông tin khi có sự kiện xảy ra

• Event source lưu một danh sách các Event listener và sẽ thông báo cho chúng biết mỗi khi

có sự kiện xảy ra.

Ví dụ:

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 32: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 32

Việc thông báo sự kiện xảy ra thực chất là việc gọi một phương thức của EventListener với đối số truyền vào là EventObject.

Các lớp con của EventListener có thể cài đặt các phương thức để xử lý sự kiện.

3/ Nhãn (Label)

Nhãn được dùng để trình bày một chuỗi văn bản ra màn hình

• Một số phương thức của Label:

• public Label(); // tạo nhãn

• public Label(String s); // tạo nhãn với nội dung s

• public Label(String s, int align); // tạo và canh lề

• void setText(String s); // đặt nội dung nhãn

• void setAlignment(int align); // canh lề nhãn

• …

import java.applet.Applet;

import java.awt.*;

public class DemoLabel extends Applet

{

private Label label;

public void init()

{

Font font = new Font("Courier", Font.BOLD, 20);

label = new Label("Thu nghiem voi Label");

label.setFont(font);

add(label);

}

public void paint(Graphics g)

{

showStatus("Noi dung cua Label la: “ + label.getText());

}

}

4/ Nút nhấn (Button)

Một số phương thức của Button

• Button(); // tạo nút nhấn

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 33: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 33

• Button(String s); // tạo nút nhấn có tên s

• void setLabel(String s); // đổi tên nút

• String getLabel(); // lấytên nút nhấn

• Đối tượng nghe sự kiện nhấn nút cần cài đặt giao tiếp ActionListener

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class DemoButton extends Applet implements ActionListener

{

private Button blueButton;

private Button whiteButton;

private Button helloButton;

public void init()

{

blueButton = new Button("Blue");

whiteButton = new Button("White");

helloButton = new Button("Hello");

blueButton.addActionListener(this);

whiteButton.addActionListener(this);

helloButton.addActionListener(this);

add(blueButton);

add(whiteButton);

add(helloButton);

}

public void actionPerformed(ActionEvent event)

{

if (event.getSource() == helloButton)

javax.swing.JOptionPane.showMessageDialog(this, "Hello !");

else

{

if (event.getSource() == blueButton)

this.setBackground(Color.BLUE);

else if (event.getSource() == whiteButton)

this.setBackground(Color.WHITE);

repaint();

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 34: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 34

}

5/ Ô văn bản (TextField)

Ô văn bản cho phép nhận dữ liệu từ bàn phím trên một dòng

• Một số phương thức

• TextField(...); // các cấu tử

• void setEditable(boolean b); // đặt/tắt chế độ nhập

• void setEchoChar(char c); // đặt kí tự hiển thị

• Đối tượng nghe cần cài đặt 2 giao tiếp

• ActionListener

• TextListener

• Cài đặt phương thức textValueChanged();

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class DemoTextField extends Applet implements ActionListener

{

private TextField txtEdit;

private TextField txtReadOnly;

private TextField txtPass;

private final String PASSWORD = "Java";

public void init()

{

txtEdit = new TextField("Your name here");

txtPass = new TextField(12);

txtPass.setEchoChar('*');

txtPass.addActionListener(this);

txtReadOnly = new TextField("This text is read only");

txtReadOnly.setEditable(false);

add(txtEdit);

add(txtPass);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 35: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 35

add(txtReadOnly);

}

public void actionPerformed(ActionEvent event)

{

if (txtPass.getText().equals(PASSWORD))

txtReadOnly.setText("Password is valid");

else

txtReadOnly.setText("Invalid password !");

}

}

6/ Lựa chọn (Choice)

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class DemoChoice extends Applet implements ItemListener

{

private Choice choice;

private TextField txtText;

private Font font;

public void init()

{

choice = new Choice();

choice.addItem("TimesRoman");

choice.addItem("Courier");

choice.addItem("Helvetica");

choice.addItemListener(this);

txtText = new TextField("Sample Text", 16);

txtText.setEditable(false);

font = new Font(choice.getItem(0), Font.PLAIN, 12);

txtText.setFont(font);

add(choice);

add(txtText);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 36: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 36

}

public void itemStateChanged(ItemEvent event)

{

font = new Font(choice.getSelectedItem(), Font.PLAIN, 12);

txtText.setFont(font);

}

}

7/ Checkbox (Hộp đánh dấu)

Checkbox cung cấpcác hộp tuỳ chọn cho người dùng

• Một số phương thức

Checkbox(...); // các cấu tử

void setLabel(String s); // đặt nhãn mới

boolean getState(); // lấy trạng thái hiệntại

• Lớpnghecài đặtgiaotiếp ItemListener

• Cài đặt phương thức itemStateChanged(...)

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class DemoCheckbox extends Applet implements ItemListener

{

private Checkbox checkBold;

private Checkbox checkItalic;

private TextField txtText;

public void init()

{

checkBold = new Checkbox("Bold");

checkItalic = new Checkbox("Italic");

checkBold.addItemListener(this);

checkItalic.addItemListener(this);

txtText = new TextField("Sample Text", 16);

Font font = new Font("Courier", Font.PLAIN, 14);

txtText.setFont(font);

add(txtText);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 37: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 37

add(checkBold);

add(checkItalic);

}

public void itemStateChanged(ItemEvent event)

{

int valBold = Font.PLAIN;

int valItalic = Font.PLAIN;

if (checkBold.getState()) valBold = Font.BOLD;

if (checkItalic.getState()) valItalic = Font.ITALIC;

Font font = new Font("Courier", valBold + valItalic, 14);

txtText.setFont(font);

}

}

8/ Checkbox và CheckboxGroup

Các Checkbox có thể được đặt trong một CheckboxGroup để tạo ra các radio button.

• Ví dụ: Tạo 3 radio button

// Tạo 3 radio button thuộc cùng một nhóm. Ban đầu

// radio1 được chọn. Tại mỗi thời điểm chỉ có thể chọn một

// trong 3 radio.

CheckboxGroup g = new CheckboxGroup();

Checkbox radio1 = new Checkbox(“Radio1”, g, true);

Checkbox radio2 = new Checkbox(“Radio2”, g, false);

Checkbox radio3 = new Checkbox(“Radio3”, g, false);

// Cac import can thiet...

public class DemoRadio extends Applet implements ItemListener

{

private Checkbox plain, bold, italic;

private CheckboxGroup group;

private TextField txtText;

public void init()

{

group = new CheckboxGroup();

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 38: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 38

plain = new Checkbox("Plain", group, true);

bold = new Checkbox("Bold", group, false);

italic = new Checkbox("Italic", group, false);

txtText = new TextField("Sample Text");

txtText.setFont(new Font("Courier", Font.PLAIN, 14));

plain.addItemListener(this);

bold.addItemListener(this);

italic.addItemListener(this);

add(txtText);

add(plain);

add(italic);

add(bold);

}

public void itemStateChanged(ItemEvent event)

{

int mode = 0;

if (event.getSource() == plain) mode = Font.PLAIN;

if (event.getSource() == italic) mode = Font.ITALIC;

if (event.getSource() == bold) mode = Font.BOLD;

txtText.setFont(new Font("Courier", mode, 14));

}

}

9/ Danh sách (List)

List cho phép người dùng chọn một hay nhiều item từ một danh sách các item

• Một số phương thức

• List(); // cấu tử mặc định

• List(int items, boolean ms); // cấu tử mở rộng

• String getSeclectedItem(); // lấy lại thành phần được chọn

• Lớp nghe cài đặt giao tiếp ItemListener và/ hoặc ActionListener

// Cac import can thiet...

public class DemoList extends Applet implements ItemListener, ActionListener

{

private List colorList;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 39: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 39

public void init()

{

colorList = new List(3, false);

colorList.add("White");

colorList.add("Black");

colorList.add("Yellow");

colorList.add("Green");

colorList.addItemListener(this);

colorList.addActionListener(this);

add(colorList);

}

public void itemStateChanged(ItemEvent event)

{

List list = (List) event.getSource();

showStatus("Item " + list.getSelectedIndex() + " selected");

}

public void actionPerformed(ActionEvent event)

{

List list = (List) event.getSource();

String s = list.getSelectedItem();

if (s.equals("White")) setBackground(Color.WHITE);

if (s.equals("Black")) setBackground(Color.BLACK);

if (s.equals("Yellow")) setBackground(Color.YELLOW);

if (s.equals("Green")) setBackground(Color.GREEN);

repaint();

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 40: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 40

BÀI 5: GUI NÂNG CAO

1/ Vùng văn bản (TextArea)

• Cho phép người dùng nhập vào nhiều dòng văn bản.

• Tạo đối tượng TextArea

TextArea();

TextArea(int rows, int columns);

TextArea(String s);

TextArea(String s, int rows, int columns);

• Các phương thứckhácgiống như TextField

// Cac import can thiet...

public class DemoTextArea extends Applet implements ActionListener

{

private TextArea textArea1, textArea2;

private Button copy;

public void init()

{

textArea1 = new TextArea("Sample Text", 5, 20);

textArea2 = new TextArea(5, 20);

copy = new Button("Copy >>>");

setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));

copy.addActionListener(this);

add(textArea1);

add(copy);

add(textArea2);

}

public void actionPerformed(ActionEvent event)

{

textArea2.setText(textArea1.getText());

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 41: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 41

2/ Khung vẽ (Canvas)

• Khung vẽ là một vùng chuyên để vẽ đồ hoạ, nó không bị che bởi các thành phần giao diện khác.

• Khung vẽ có thể xử lý các sự kiện giống như Applet.

• Để sử dụng khung vẽ, cần tạo một lớp khác dẫn xuấttừ Canvas và cài đặt nạp chồng phương thức paint().

• Nên gọi setSize cho khung vẽ. Toạ độ vẽ là (0,0) tính trong khung vẽ.

// Cac import can thiet...

public class DemoCanvas extends Applet implements ActionListener

{

private Button rectButton;

private Button circleButton;

private MyCanvas canvas;

public void init()

{

setLayout(new BorderLayout());

rectButton = new Button("Draw Rectangle");

circleButton = new Button("Draw Circle");

rectButton.addActionListener(this);

circleButton.addActionListener(this);

Panel panel = new Panel();

panel.add(rectButton);

panel.add(circleButton);

canvas = new MyCanvas();

canvas.setBackground(Color.lightGray);

add(panel, BorderLayout.NORTH);

add(canvas, BorderLayout.CENTER);

}

public void actionPerformed(ActionEvent event)

{

if (event.getSource() == rectButton)

canvas.draw(1);

else if (event.getSource() == circleButton)

canvas.draw(2);

}

}

class MyCanvas extends Canvas

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 42: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 42

{

private int shape;

public void paint(Graphics g)

{

Dimension size = getSize();

g.setColor(Color.BLUE);

if (shape == 1)

g.fillRect(40, 40, size.width-80, size.height-80);

else if (shape == 2)

g.fillOval(40, 40, size.width-80, size.height-80);

}

public void draw(int shape)

{

this.shape = shape;

repaint();

}

}

3/ Khung chứa Frame

• Frame được dùng để xây dựng các ứng dụng GUI chạy độc lập.

• Frame là một cửa sổ có thanh tiêu đề và các đường biên. Bố cục mặc định của Frame là BorderLayout.

• Frame kế thừa từ Window, nó có thể nghe các sự kiện xảy ra trên cửa sổ khi cài đặt giao tiếp WindowListener.

• Các ứng dụng độc lập thường tạo ra cửa sổ kế thừa từ lớp Frame.

Ví dụ về Frame

import java.awt.*;

import java.awt.event.*;

public class DemoFrame

{

public static void main(String[] args)

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 43: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 43

{

Frame frame = new Frame(“Example on Frame”);

Label label = new Label("This is a label in Frame",

Label.CENTER);

frame.add(label, BorderLayout.CENTER);

frame.setSize(500,500);

frame.setVisible(true);

frame.addWindowListener(new MyWindowListener());

}

}

// Lop nghe doc lap (external listener)

class MyWindowListener extends WindowAdapter

{

public void windowClosing(WindowEvent event)

{

System.exit(0);

}

}

4/ Thực đơn (Menu)

+/ Tạo thực đơn

Tạo và gắn MenuBar vào cửa sổ

• MenuBar menuBar = new MenuBar();

• myFrame.setMenuBar(menuBar);

• Tạo Menu và gắn vào MenuBar

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 44: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 44

• Menu fileMenu = new Menu(“File”);

• menuBar.add(fileMenu);

• Tạo MenuItem và gắn vào Menu

• MenuItem openItem = new MenuItem(“Open”);

• fileMenu.add(openItem);

• Tạo đường phân cách

• fileMenu.addSeparator();

Xử lý sự kiện trên các MenuItem

• Đối tượng nghe các MenuItem phải cài đặt giao tiếp ActionListener

• Tham khảo thêm về

• CheckboxMenuItem

• PopupMenu

5/ Hộp hội thoại (Dialog)

• Dialog cũng là một cửa sổ, thường dùng để nhập hoặc hiển thị thông tin với người dùng.

Hai loại hộp thoại

• Modal: Phải đóng hộp thoại trước khi chuyển sang cửa sổ khác.

• Modaless: Có thể giữ nguyên hộp thoại và chuyển sang cửa sổ khác.

• Dialog kế thừa từ lớp Window, nó có bố cục mặc định là BorderLayout.

• Hộp thoại có thể chứa các thành phần GUI và xử lý các sự kiện như một cửa sổ bình thường.

+ Ví dụ về Frame, Menu và Dialog

import java.awt.*;

import java.awt.event.*;

public class DemoFrame3

{

public static void main(String[] args

{

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 45: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 45

MyFrame myFrame = new MyFrame("Example on my frame");

myFrame.setSize(500, 400);

myFrame.setVisible(true);

myFrame.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

}

}

class MyFrame extends Frame implements ActionListener

{

private MenuBar menuBar;

private Menu menu;

private MenuItem circleItem, rectItem;

public MyFrame(String title)

{

super(title);

menuBar = new MenuBar(); setMenuBar(menuBar);

menu = new Menu("Draw"); menuBar.add(menu);

circleItem = new MenuItem("Circle");

rectItem = new MenuItem("Rectangle");

menu.add(circleItem);

menu.add(rectItem);

circleItem.addActionListener(this);

rectItem.addActionListener(this);

}

public void actionPerformed(ActionEvent e)

{

if (e.getSource() == circleItem)

{ MyDialog dialog = new MyDialog(this,

"Modeless Dialog: Circle", false);

}

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 46: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 46

class MyDialog extends Dialog

{

MyDialog(Frame parent, String title, boolean isModel)

{

super(parent, title, isModel);

add(new Label("Hi, I am a dialog"), BorderLayout.CENTER);

setSize(300, 200);

setVisible(true);

addWindowListener(new MyDialogListener(this));

}

};

// Co the dat lop nay lam lop noi (inner class) cua lop MyDialog

class MyDialogListener extends WindowAdapter

{

Dialog dialog;

MyDialogListener(Dialog dia)

{

dialog = dia;

}

public void windowClosing(WindowEvent e)

{

dialog.setVisible(false);

dialog.dispose();

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 47: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 47

BÀI 6. XỬ LÝ NGOẠI LỆ 1/ Xử lý lỗi và ngoại lệ

Trong một số ngôn ngữ như C, việc xử lý lỗi thường được cài đặt ngay tại các bước thực hiện của chương trình. Các hàm sẽ trả về một cấu trúc lỗi khi gặp lỗi.

Ví dụ: Tìm kiếm phần tử trong một danh sách

• ErrorStruct error = new ErrorStruct();

• TableEntry entry = lookup(“Marianna”, employee, error);

• if (entry == null)

• {

• return error;

• }

Mã lệnh và mã xử lý lỗi nằm xen kẽ khiến lập trình viên khó theo dõi được thuật toán chính của chương trình.

Khi một lỗi xảy ra tại hàm A, tất cả các lời gọi hàm lồng nhau đến A đều phải xử lý lỗi mà A trả về.

Trong Java, việc xử lý lỗi có thể được cài đặt trong một nhánh độc lập với nhánh chính của chương trình.

Lỗi được coi như những trường hợp ngoại lệ (exceptional conditions). Chúng được bắt/ném (catch and throw) khi có lỗi xảy ra.

=> Một trường hợp lỗi sẽ chỉ được xử lý tại nơi cần xử lý.

=> Mã chính của chương trình sáng sủa, đúng với thiết kế thuật toán.

2/ Ví dụ 1

import java.awt.Point;

public class MyArray

{

public static void main(String[ ] args) {

System.out.println("Goi phuong thuc methodeX()");

methodeX();

System.out.println("Chuong trinh ket thuc binh thuong");

}

public static void methodeX() {

Point[ ] pts = new Point[10];

for(int i = 0; i < pts.length; i++) {

pts[i].x = i;

pts[i].y = i+1;

}

}

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 48: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 48

3/ Kết quả thực thi ví dụ 1

Goi phuong thuc methodeX()

Exception in thread "main" java.lang.NullPointerException

at MyArray.methodeX(MyArray.java:14)

at MyArray.main(MyArray.java:7)

Giải thích: Hệ thống đã tung ra một exception thuộc lớp NullPointerException khi gặp lỗi. Sau đó chương trình kết thúc.

4/ Ví dụ 2

public class MyDivision {

public static void main(String[ ] args) {

System.out.println("Goi phuong thuc A()");

A();

System.out.println("Chuong trinh ket thuc binh thuong");

}

public static void A() {

B();

}

public static void B() {

C();

}

public static void C() {

float a = 2/0;

}

}

5/ Kết quả thực thi ví dụ 2

Goi phuong thuc A()

Exception in thread "main" java.lang.ArithmeticException: / by zero

at MyDivision.C(MyDivision.java:14)

at MyDivision.B(MyDivision.java:11)

at MyDivision.A(MyDivision.java:8)

at MyDivision.main(MyDivision.java:4)

Giải thích: Phương thức A() gọi B(), B() gọi C(), C() gây ra lỗi chia cho 0 và hệ thống “ném” ra một exception thuộc lớp ArithmeticException. Sau đó chương trình kết thúc.

6/ Ngoại lệ

• Khi một phương thức gặp lỗi nào đó, ví dụ như chia không, vượt kích thước mảng, mở file chưa tồn tại… thì các ngoại lệ sẽ được ném ra. Chương trình dừng lại ngay lập tức, toàn bộ phần mã phía sau sẽ không được thực thi.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 49: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 49

• Java hỗ trợ cách thức để xử lý ngoại lệ (exception handling) tuỳ theo nhu cầu của chương trình.

7/ Xử lý ngoại lệ

• Khối try/catch

• Đặt đoạn mã có khả năng xảy ra ngoại lệ trong khối try

• Đặt đoạn mã xử lý ngoại lệ trong khối catch

• Khi xảy ra ngoại lệ trong khối try, các câu lệnh trong khối catch sẽ được thực hiện tuỳ vào kiểu của ngoại lệ.

• Sau khi thực hiện xong khối catch, điều khiển sẽ được trả lại cho chương trình.

8/ Khối try/catch

• Ví dụ 1:

try

{

methodeX();

System.out.println(“Cau lenh ngay sau methodX()”);

}

catch (NullPointerException e)

{

System.out.println(“Co loi trong khoi try”);

}

System.out.println(“Cau lenh sau try/catch”);

• Ví dụ 2:

try {

A();

} catch (Exception e) {

System.out.println(“Co loi trong A()”);

}

• Ví dụ 3:

try {

x = System.in.read();

System.out.println(“x = “ + x);

} catch (IOException e) {

System.out.println(“Error: “ + e.getMessage());

}

• Ví dụ 4:

try

{

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 50: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 50

String s = buff.readLine();

int a = Integer.parseInt(s);

x[i++] = a;

} catch (IOException e) {

System.out.println(“Error IO: “ + e.getMessage());

} catch (NumberFormatException e) {

System.out.println(“Error Format: “ + e.getMessage());

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println(“Error Index: “ + e.getMessage());

}

9/ Khối finally

• Khi một ngoại lệ xảy ra, chương trình dừng lại, một số công việc “dọn dẹp” có thể sẽ không được thực hiện (ví dụ như đóng file).

• Khối finally đảm bảo rằng các câu lệnh trong đó luôn được thực hiện, kể cả khi ngoại lệ xảy ra.

try

{

doSomething(); // phương thức này có thể gây ra ngoại lệ

} finally {

cleanup();

}

10/ Tóm tắt về xử lý ngoại lệ

• Các ngoại lệ xảy ra khi gặp lỗi.

• Có thể bắt và xử lý các ngoại lệ bằng cách sử dụng khối try/catch. Nếu không chương trình sẽ kết thúc ngay (với ứng dụng console) hoặc tiếp tục tồn tại (với ứng dụng GUI).

• Khi bắt ngoại lệ, phải biết rõ kiểu ngoại lệ cần bắt. Có thể dùng kiểu cha Exception.

• Để chắc chắn việc “dọn dẹp” luôn được thực hiện, dùng khối finally. Có thể kết hợp try/catch/finally.

11/ Một số lớp ngoại lệ

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 51: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 51

• Lớp Throwable

• Có một biến String để lưu thông tin chi tiết về ngoại lệ đã xảy ra

• Một số phương thức cơ bản

• Throwable(String s); // Tạo một ngoại lệ có tên là s.

• String getMessage(); // Lấy thông tin về ngoại lệ

• void printStackTrace(); // In ra tất cả các thông tin liên quan đến ngoại lệ

• Lớp Exception

• Có nhiều ngoại lệ thuộc lớp con của Exception.

• Người dùng có thể tạo ra các ngoại lệ kế thừa từ Exception.

• Lớp Error

• Chỉ những lỗi nghiêm trọng và không dự đoán trước được như ThreadDead, LinkageError, VirtualMachineError...

• Các ngoại lệ kiểu Error ít được xử lý.

• RuntimeException: Chỉ các ngoại lệ có thể xảy ra khi JVM thực thi chương trình

• NullPointException: con trỏ null

• OutOfMemoryException: hết bộ nhớ

• ArithmeticException: lỗi toán học, lỗi chia không…

• ClassCastException: lỗi ép kiểu

• ArrayIndexOutOfBoundsException: vượt quá chỉ số mảng

12/ Hai loại ngoại lệ

• Ngoại lệ unchecked

• Là các ngoại lệ không bắt buộc phải được kiểm tra.

• Gồm RuntimeException, Error và các lớp con của chúng.

• Ngoại lệ checked

• Là các ngoại lệ bắt buộc phải được kiểm tra.

• Gồm các ngoại lệ còn lại.

13/ Chú ý với ngoại lệ checked

• Giả sử method1 gọi method2 và method2 là phương thức có khả năng ném ngoại lệ kiểu checked, lúc đó:

• hoặc method2 phải nằm trong khối try/catch.

• hoặc phải khai báo method1 có khả năng ném (throws) ngoại lệ.

14/ Ví dụ: Ngoại lệ IOException

• Cách 1: try/catch

• public static void main(String[] args)

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 52: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 52

• {

• try {

• String s = buff.readLine();

• } catch (IOException e) {

• ...

• }

• }

• Cách 2: Khai báo throws

• public static void main(String[] args) throws IOException

• {

• String s = buff.readLine();

• }

15/ Bài tập tại lớp

• Bài 1: Cài đặt xử lý các ngoại lệ cho chương trình tính thương 2 số bằng giao diện GUI.

• Bài 2: Cài đặt xử lý lỗi bằng cách dùng ngoại lệ cho ví dụ ở phần đầu bài.

16/ Ngoại lệ do người dùng tạo

• Định nghĩa lớp ngoại lệ

// file MyException.java

public class MyException extends Exception

{

public MyException(String msg)

{

super(msg);

}

}

• Sử dụng ngoại lệ

Khai báo khả năng tung ngoại lệ

// file ExampleException.java

public class ExampleException

{

public void copy(String fileName1, String fileName2)

throws MyException

{

if (fileName1.equals(fileName2))

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 53: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 53

throw new MyException("File trung ten"); // tung ngoại lệ

System.out.println("Copy completed");

}

public static void main(String[] args)

{

ExampleException obj = new ExampleException();

try {

String a = args[0];

String b = args[1];

obj.copy(a,b);

} catch (MyException e) {

System.out.println(e.getMessage());

}

}

}

17/ Lan truyền ngoại lệ

• Tình huống

• Giả sử trong main() gọi phương thức A(), trong A() gọi B(), trong B() gọi C(). Khi đó một ngăn xếp các phương thức được tạo ra.

• Giả sử trong C() xảy ra ngoại lệ.

Nếu C() gặp lỗi và tung ra ngoại lệ nhưng trong C() lại không xử lý ngoại lệ này, thì chỉ còn một nơi có thể xử lý chính là nơi mà C() được gọi, đó là trong phương thức B(). Nếu trong B() cũng không xử lý thì phải xử lý ngoại lệ này trong A()…Quá trình này gọi là lan truyền ngoại lệ.

Nếu đến main() cũng không xử lý ngoại lệ được tung từ C() thì chương trình sẽ phải dừng lại.

18/ Ném lại ngoại lệ

• Trong khối catch, ta có thể không xử lý trực tiếp ngoại lệ mà lại ném lại ngoại lệ đó cho nơi khác xử lý.

catch (IOException e) {

throw e;

}

• Chú ý: Trong trường hợp trên, phương thức chứa catch phải bắt ngoại lệ hoặc khai báo throws cho ngoại lệ (nếu là loại checked).

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 54: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 54

19/ Chú ý khi sử dụng ngoại lệ

Không nên sử dụng ngoại lệ thay cho các luồng điều khiển trong chương trình.

• Ví dụ: Kiểm tra delta trong chương trình giải phương trình bậc 2.

Nên thiết kế và sử dụng ngoại lệ một cách thống nhất cho toàn bộ dự án.

Một số xử lý lỗi bằng ngoại lệ phổ biến là: hết bộ nhớ, vượt quá chỉ số mảng, con trỏ null, chia cho 0, đối số không hợp lệ...

BÀI 7: LUỒNG VÀ XỬ LÝ FILE

1/ Khái niệm luồng (stream)

Luồng là một “dòng chảy” của dữ liệu được gắn với các thiết bị vào ra.

Hai loại luồng:

Luồng nhập: Gắn với các thiết bị nhập như bàn phím, máy scan, file...

Luồng xuất: Gắn với các thiết bị xuất như màn hình, máy in, file...

Việc xử lý vào ra thông qua luồng giúp cho lập trình viên không phải quan tâm đến bản chất của thiết bị vào ra.

Chương trình đọc trên luồng nhập để lấy dữ liệu từ thiết bị nhập, ghi vào luồng xuất để đưa dữ liệu ra thiết bị xuất

2/ Các luồng cơ bản

Luồng byte: Là dòng chảy các byte

InputStream: Luồng nhập byte cơ bản

OutputStream: Luồng xuất byte cơ bản

Luồng ký tự: Là dòng chảy các ký tự (char)

Reader: Luồng nhập ký tự cơ bản

Writer: Luồng xuất ký tự cơ bản

Các lớp luồng nằm trong gói java.io

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 55: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 55

3/ Luồng byte

4/ Luồng nhập/xuất byte cơ bản

• InputStream và OutputStream là hai lớp gốccủamọiluồng nhập/xuất byte (abstract).

5/ Lớp InputStream

Mộtsố phương thứccủa InputStream

abstract int read() throws IOException

Đọc một byte từ luồng.

Nếu cuối luồng sẽ trả về -1

int read(byte[] b) throws IOException

Đọc một dãy byte từ luồng

void close() throws IOException

Đóng luồng nhập

int available() throws IOException

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 56: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 56

Trả về số byte có thểđọc tiếp

long skip(long n) throws IOException

Bỏ qua n byte

6/ LớpOutputStream

Một số phương thứccủa OutputStream

• abstract void write(int b) throws IOException

• Ghi mộtbyte ra luồng

• void write(byte[] b) throws IOException

• Ghi một dãy byte ra luồng

• void close() throws IOException

• Đóng luồng

• void flush() throws IOException

• Dồn xuất luồng

7/ Các luồng file

Đượcsử dụng để xuấtnhập vớifile.

Luồng nhập từ file: FileInputStream

• FileInputStream(String name)

• FileInputStream(File f)

Luồng xuất ra file: FileOutputStream

• FileOutputStream(String name)

• FileOutputStream(File f)

• FileOutputStream(String name, boolean append)

Phương thức nhập/xuất của các luồng file giống như của các luồng nhập xuất cơ bản

8/ Ví dụ: Đọc và hiển thị file

import java.io.*;

public class ReadFile

{

public static void main(String[] args)

{

try {

FileInputStream f = new FileInputStream("readme.txt");

int ch;

while ( (ch = f.read()) != -1 )

{

System.out.print((char)ch);

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 57: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 57

f.close();

} catch (FileNotFoundException d) {

System.out.println("File not found");

} catch (IOException d) {

System.out.println("Can not read file");

}

}

}

9/ Ví dụ: Ghi dữ liệu ra file

import java.io.*;

public class WriteFile

{

public static void main(String[] args)

{

byte buffer[] = new byte[80];

try {

System.out.println("Enter a string to write to file: ");

int num = System.in.read(buffer);

FileOutputStream f = new FileOutputStream("line.txt");

f.write(buffer, 0, num);

f.close();

} catch (IOException e) {

System.out.println("Error IO file");

}

}

}

10/ Luồng lọc (filter stream)

• Luồng lọc có khả năng kết nối với các luồng khác và xử lý dữ liệu “theo cách riêng” của nó.

• FilterInputStream và FilterOutputStream là 2 lớp luồng lọc cơ bản.

11/ Luồng nhập/xuất dữ liệu sơ cấp

• DataInputStream và DataOutputStream là 2 lớp lọc cho phép nhập xuất dữ liệu thuộc các kiểu sơ cấp.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 58: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 58

12/ Luồng nhập/xuất dữ liệu sơ cấp

Một số phương thức của DataInputStream

• float readFloat() throws IOException

• int readInt() throws IOException

• long readLong() throws IOException

• String readUTF() thr ows IOException

Một số phương thức của DataOutputStream

• void writeFloat(float v) throws IOException

• void writeInt(int b) throws IOException

• void writeLong(long v) throws IOException

• void writeUTF(String s) throws IOException

• …

13/ Ví dụ: Tạo file các số ngẫu nhiên

try {

FileOutputStream f = new FileOutputStream("randnum.dat");

DataOutputStream outFile = new DataOutputStream(f);

for(int i = 0; i < 20; i++)

outFile.writeInt( (int) (Math.random()*1000) );

outFile.close();

} catch (IOException e) { ... }

try {

FileInputStream g = new FileInputStream("randnum.dat");

DataInputStream inFile = new DataInputStream(g);

int num;

while (true)

{

num = inFile.readInt();

System.out.println("num = " + num);

}

} catch (EOFException e) {

System.out.println("End of file");

} catch (IOException e) { ... }

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 59: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 59

14/ Luồng đệm (buffered stream)

• Luồng đệm giúp giảmbớtsố lần đọc ghi dữ liệu trên thiết bị vào ra, tăng tốc độ nhập/xuất.

• Các lớpluồng đệm

• BufferedInputStream (đệm nhập)

• BufferedOutputStream (đệm xuất)

15/ Ví dụ: Đọc và hiển thị file (v2)

// version 2 này có thể đem lại hiệu quả đáng kể hơn version 1 trên

// những file có kích thước lớn

try

{

FileInputStream f = new FileInputStream("readme.txt");

BufferedInputStream inFile = new BufferedInputStream(f);

int ch;

while ( (ch = inFile.read()) != -1 )

{

System.out.print((char)ch);

}

} catch (IOException e) {

System.out.println("Error IO file");

}

16/ Ghép nối nhiều luồng

• Có thể dùng luồng lọc để ghép nối nhiều luồng với nhau.

• Ví dụ:

FileInputStream fStream = new FileInputStream("data.dat");

BufferedInputStream bStream = new BufferedInputStream(fStream);

DataInputStream dStream = new DataInputStream(bStream);

...

dStream.close();

17/ System.in và System.out

• System.in

• Đối tượng nhập chuẩn, gắn với bàn phím.

• Thuộc lớp InputStream.

• System.out

• Đổi tượng xuất chuẩn, gắn với màn hình.

• Thuộc lớp PrintStream.

• Lớp PrintStream

• Cho phép hiển thị biểu diễn của dữ liệu.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 60: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 60

• PrintStream kế thừa từ

FilterOutputStream

18/ Lớp PrintStream

// Chương trình này đọc một file các số thực và ghi vào file khác //

dưới dạng văn bản

try {

FileInputStream f = new FileInputStream("float.dat");

DataInputStream inStream = new DataInputStream(f);

FileOutputStream ff = new FileOutputStream("ketqua.txt");

PrintStream pStream = new PrintStream(ff);

int count = 0;

while (true)

{

float num = inStream.readFloat();

count++;

pStream.println("Float " + count + " = " + num);

}

inStream.close();

pStream.close();

} catch (EOFException e) {

System.out.println(“End of file”);

} catch (IOException e) {...}

19/ Luồng nhập/xuất đối tượng

• Để lưu lại một đối tượng, ta có thể lưu lần lượt từng thuộc tính của nó. Khi đọclại đối

tượng ta phải tạo đối tượng mới từ các thuộc

tính đã ghi.

=> Dài dòng, kém linh hoạt.

• Java hỗ trợ đọc/ghi các đối tượng một cách đơn giản thông qua lớp ObjectInputStream

và ObjectOutputStream.

• Một đối tượng muốn có thể được đọc/ghi phảicài đặtgiaotiếp java.io.Serializable

20/ Ví dụ: Ghi lại tên và ngày sinh

try

{

FileOutputStream f = new FileOutputStream("birthfile.dat");

ObjectOutputStream oStream = new ObjectOutputStream(f);

String babyName = "Briney Spears";

Date today = new Date();

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 61: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 61

oStream.writeObject(babyName);

oStream.writeObject(today);

oStream.close();

} catch (IOException e) {

System.out.println(“Error IO file”);

}

21/ Ví dụ: Đọc tên và ngày sinh

try

{

FileInputStream f = new FileInputStream("birthfile.dat");

ObjectInputStream inStream = new ObjectInputStream(f);

String name = (String) inStream.readObject();

Date birthDate = (Date) inStream.readObject();

System.out.println("Name of baby: " + name);

System.out.println("Birth date: " + birthDate);

inStream.close();

} catch (IOException e) {

System.out.println(“Error IO file”);

} catch (ClassNotFoundException e) {

System.out.println(“Class of serialized object not found”);

}

22/ Đọc/ghi đốitượng tự tạo

a)// file Student.java

public class Student implements Serializable

{

private String name;

private int age;

Student(String name, int age)

{

this.name = name;

this.age = age;

}

public String toString()

{

String ret = "My name is " + name +

"\nI am " + age + " years old";

return ret;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 62: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 62

}

}

b) // file WriteMyObject.java

import java.io.*;

public class WriteMyObject

{

public static void main(String[] args)

{

try

{

FileOutputStream f = new FileOutputStream("student.dat");

ObjectOutputStream oStream = new ObjectOutputStream(f);

Student x = new Student("Bill Gates", 18);

oStream.writeObject(x);

oStream.close();

} catch (IOException e) {

System.out.println(“Error IO file”);

}

c)

try

{

FileInputStream g = new FileInputStream("student.dat");

ObjectInputStream inStream = new ObjectInputStream(g);

Student y = (Student) inStream.readObject();

System.out.println(y.toString());

inStream.close();

} catch (ClassNotFoundException e) {

System.out.println(“Class not found”);

} catch (IOException e) {

System.out.println(“Error IO file”);

}

}

}

• Đối tượng có thể cài đặt 2 phương thức sau để thực hiện đọc/ghi theo cách riêng của mình.

• private void writeObject(ObjectOutputStream out) throws IOException

• private void readObject(ObjectInputStream in) throws IOException, lassNotFoundException

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 63: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 63

23/ Luồng ký tự

• Từ Jdk 1.1, Java hỗ trợ đọc và thao tác trên luồng đối với các ký tự Unicode (2 byte).

• Luồng ký tự cơ bản

• Reader (đọc)

• Writer (ghi)

24/ Kết nối luồng byte và luồng kí tự

• Có thể chuyển từ luồng byte sang luồng ký tự nhờ các lớp

• InputStreamReader

• OutputStreamReader

• Ví dụ:

• BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));

• String s = buff.readLine();

• ...

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 64: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 64

25/ Luồng kí tự và Unicode

• Unicode Encoding

• UTF-8

• UTF-16

• Đọc/ghi file với các ký tự Unicode

• Kết nối từ luồng

FileInputStream/FileOutputStream vào InputStreamReader/OutputStreamWriter

(có thể vào tiếp BufferedReader/BufferedWriter)

• Chỉ rõ cách encoding

26/ Ví dụ: Ghi file Unicode

try

{

OutputStreamWriter buff = new OutputStreamWriter(new

FileOutputStream("unicode.txt"), "UTF-16");

buff.write('ồ');

buff.write('à');

String s = "\r\nvậy hả";

buff.write(s, 0, s.length());

buff.close();

} catch (IOException e) {

System.out.println(“Error IO file”);

}

try

{

InputStreamReader buff = new InputStreamReader(new

FileInputStream("unicode.txt"), "UTF-16");

int ch;

while ( (ch = buff.read()) != -1)

{

System.out.print((char)ch);

// Ở chế độ console sẽ không hiển thị được ký tự có

// dấu, nên hiển thị trong TextField hoặc TextArea

}

buff.close();

} catch (IOException e) {

System.out.println(“Error IO file”);

}

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 65: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 65

27/ Chú ý khi soạn thảo mã

• Muốn đưa trực tiếp tiếng Việt Unicode vào cùng các đoạn mã Java cần phải sử dụng Notepad hoặc các phần mềm hỗ trợ soạn thảo tiếng Việt.

• Các bước cần thực hiện

• Lưu file source code dưới dạng Unicode

• Gõ lệnh biên dịch

javac –encoding unicode filename.java

• Lệnh thông dịch

java filename (như bình thường)

28/ File truy nhậpngẫu nhiên

• Hai hạn chế của việc xử lý file thông qua luồng

• Không thể đọc và ghi file cùng một lúc

• Truy nhập file mang tính tuần tự

• Java hỗ trợ việc truy nhập và xử lý file một cách tự do thông qua lớp RandomAccessFile.

• Các phương thức cơ bản

• RandomAccessFile(String name, String mode)

// cấu tử, trong đó mode có thể là “r”, “w”, “rw”

• int readInt(); // đọc số nguyên

• void writeInt(int v); // ghi số nguyên

• long readLong(); // đọc số long

• void writeLong(long v); // ghi số long

• void seek(long pos); // di chuyểnvị trí con trỏ file

• long getFilePointer(); // lấyvị trí củacon trỏ file

• long length(); // lấykích cỡ của file

• void close(); // đóng file

• ...

29/ Ví dụ với RandomAccessFile

try

{

RandomAccessFile f = new RandomAccessFile("randfile.dat","rw");

f.writeBoolean(true);

f.writeInt(123456);

f.writeChar('j');

f.writeDouble(1234.56);

f.seek(1);

System.out.println(f.readInt());

System.out.println(f.readChar());

Kết quả 123456 j 1234.56 true

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 66: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 66

System.out.println(f.readDouble());

f.seek(0);

System.out.println(f.readBoolean());

f.close();

} catch (IOException e) {

System.out.println(“Error IO file”);

}

30/ Chú ý khi đóng file

• Nếu để lệnh f.close() trong khối try thì có thể lệnh này sẽ không được thực hiện khi có lỗi ở các lệnh phía trên.

• Có thể viết lại như sau:

• FileInputStream f = null;

• try {

• f = new FileInputStream("somefile.txt")

• // đọc file

• } catch (IOException e) {

• // hiển thị lỗi

• } finally {

• if (f != null) {

• try {

• f.close(); // đóng file

• } catch (Exception e) {

• // thông báo lỗi khi đóng file

• }

• }

• }

31/ Lớp File

Lớp File cho phép lấy thông tin về file và thư mục.

Một số phương thức của File

• boolean exists(); // kiểm tra sự tồn tại của file

• boolean isDirectory(); // kiểm tra xem file có phải là thư mục

• String getParent(); // lấy thư mục cha

• long length(); // lấy cỡ file (byte)

• long lastModified(); // lấy ngày sửa file gần nhất

• String[] list(); // lấy nội dung của thư mục

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 67: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 67

32/ Ví dụ: Hiển thị thông tin file

import java.io.*;

import java.util.Date;

public class FileInfo

{

public static void main(String[] args)

{

File file = new File("randfile.dat");

if ( file.exists() )

{

System.out.println("Path is: " + file.getAbsolutePath());

System.out.println("It's size is: " + file.length());

Date dateModified = new Date(file.lastModified());

System.out.println("Last update is: " + dateModified);

}

else

System.out.println("The file does not exist");

}

}

33/ Ví dụ: Hiện nội dung thư mục

import java.io.*;

public class DirList

{

public static void main(String[] args)

{

File dir = new File(".", "");

if ( dir.isDirectory() )

{

String[] subFiles = dir.list();

for(int i=0; i < subFiles.length; i++)

if (new File(subFiles[i]).isDirectory())

System.out.println(subFiles[i] + " <DIR>");

else

System.out.println(subFiles[i]);

}

else

System.out.println("The file is not a directory");

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 68: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 68

TÀI LIỆU THAM KHẢO

Java – Phương Lan – NXB Lao Động Xã Hội - 2004.

Java Lập Trình Mạng – Nguyễn Phương Lan, Huỳnh Đức Hải – NXB Giáo Dục.

Giáo trình Lập Trình Mạng Bằng Java – NXB Thống Kê - 2003.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 69: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 69

MỤC LỤC

LỜI NÓI ĐẦU...................................................................................................................... 1

BÀI 1: TỔNG QUAN LẬP TRÌNH JAVA ......................................................................... 2

1/ Giới thiệu ngôn ngữ Java............................................................................................ 2

2/ Kiến trúc của Java ...................................................................................................... 2

3/ Phát triển ứng dụng Java ............................................................................................ 3

4/ Các bước phát triển .................................................................................................... 3

5/ Một chương trình Java cơ bản .................................................................................... 3

6/ Các kiểu dữ liệu cơ bản .............................................................................................. 6

7/ Các toán tử ................................................................................................................. 7

8/ Các cấu trúc điều khiển .............................................................................................. 8

9/ Nhập dữ liệu từ bàn phím ........................................................................................... 9

10/ Ví dụ Xây dựng đối tượng Circle............................................................................ 10

11/ Công cụ soạn thảo .................................................................................................. 11

12/ Chỉ dẫn thực hành .................................................................................................. 11

BÀI 2: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG JAVA ........................................ 12

1/ Các phương pháp lập trình........................................................................................ 12

2/ Lập trình hướng đối tượng-OOP............................................................................... 13

3/ Phạm vi truy cập ...................................................................................................... 15

4/ Kế thừa (Inheritance)................................................................................................ 17

5/ Đa hình (Polymorphism) .......................................................................................... 19

6/ Lớp trừu tượng (abstract) ......................................................................................... 19

7/ Giao tiếp (interface) ................................................................................................. 20

8/ Gói (package)........................................................................................................... 21

9/ Java vs C++.............................................................................................................. 21

BÀI 3: LẬP TRÌNH GUI (APPLET) ................................................................................ 23

1/ Hai loại ứng dụng Java ............................................................................................. 23

2/ Thư viện AWT......................................................................................................... 23

3/ Các thành phần của AWT......................................................................................... 23

4/ Một số phương thức của Component ........................................................................ 23

5/ Xây dựng các applet ................................................................................................. 24

6/ Khung của một applet cơ bản ................................................................................... 24

7/ Hoạt động của Applet............................................................................................... 25

8/ Hoạt động của Applet............................................................................................... 25

9/ Lớp Graphics ........................................................................................................... 25

10/ Các lớp tiện ích khác .............................................................................................. 28

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 70: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 70

11/ Xử lý font vẽ .......................................................................................................... 29

BÀI 4: CÁC THÀNH PHẦN GUI..................................................................................... 30

1/ Applet tính tổng 2 số ................................................................................................ 30

2/ Mô hình xử lý sự kiện .............................................................................................. 31

3/ Nhãn (Label) ............................................................................................................ 32

4/ Nút nhấn (Button) .................................................................................................... 32

5/ Ô văn bản (TextField) .............................................................................................. 34

6/ Lựa chọn (Choice).................................................................................................... 35

7/ Checkbox (Hộp đánh dấu) ........................................................................................ 36

8/ Checkbox và CheckboxGroup .................................................................................. 37

9/ Danh sách (List) ....................................................................................................... 38

BÀI 5: GUI NÂNG CAO ................................................................................................... 40

1/ Vùng văn bản (TextArea) ......................................................................................... 40

2/ Khung vẽ (Canvas)................................................................................................... 41

3/ Khung chứa Frame ................................................................................................... 42

4/ Thực đơn (Menu) ..................................................................................................... 43

5/ Hộp hội thoại (Dialog).............................................................................................. 44

BÀI 6. XỬ LÝ NGOẠI LỆ ................................................................................................ 47

1/ Xử lý lỗi và ngoại lệ ................................................................................................. 47

2/ Ví dụ 1 ..................................................................................................................... 47

3/ Kết quả thực thi ví dụ 1 ............................................................................................ 48

4/ Ví dụ 2 ..................................................................................................................... 48

5/ Kết quả thực thi ví dụ 2 ............................................................................................ 48

6/ Ngoại lệ.................................................................................................................... 48

7/ Xử lý ngoại lệ........................................................................................................... 49

8/ Khối try/catch........................................................................................................... 49

9/ Khối finally.............................................................................................................. 50

10/ Tóm tắt về xử lý ngoại lệ ........................................................................................ 50

11/ Một số lớp ngoại lệ................................................................................................. 50

12/ Hai loại ngoại lệ ..................................................................................................... 51

13/ Chú ý với ngoại lệ checked..................................................................................... 51

14/ Ví dụ: Ngoại lệ IOException .................................................................................. 51

15/ Bài tập tại lớp......................................................................................................... 52

16/ Ngoại lệ do người dùng tạo .................................................................................... 52

17/ Lan truyền ngoại lệ................................................................................................. 53

18/ Ném lại ngoại lệ ..................................................................................................... 53

19/ Chú ý khi sử dụng ngoại lệ ..................................................................................... 54

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 71: LAP TRINH JAVA

Giáo Trình Lập Trình Java Khoa Tin Học – Ngoại Ngữ

Tài liệu lưu hành nội bộ Trang 71

BÀI 7: LUỒNG VÀ XỬ LÝ FILE.................................................................................... 54

1/ Khái niệm luồng (stream) ......................................................................................... 54

2/ Các luồng cơ bản...................................................................................................... 54

3/ Luồng byte ............................................................................................................... 55

4/ Luồng nhập/xuất byte cơ bản.................................................................................... 55

5/ Lớp InputStream ...................................................................................................... 55

6/ LớpOutputStream..................................................................................................... 56

7/ Các luồng file........................................................................................................... 56

8/ Ví dụ: Đọc và hiển thị file ........................................................................................ 56

9/ Ví dụ: Ghi dữ liệu ra file .......................................................................................... 57

10/ Luồng lọc (filter stream)......................................................................................... 57

11/ Luồng nhập/xuất dữ liệu sơ cấp .............................................................................. 57

12/ Luồng nhập/xuất dữ liệu sơ cấp .............................................................................. 58

13/ Ví dụ: Tạo file các số ngẫu nhiên............................................................................ 58

14/ Luồng đệm (buffered stream) ................................................................................. 59

15/ Ví dụ: Đọc và hiển thị file (v2) ............................................................................... 59

16/ Ghép nối nhiều luồng ............................................................................................. 59

17/ System.in và System.out......................................................................................... 59

18/ Lớp PrintStream ..................................................................................................... 60

19/ Luồng nhập/xuất đối tượng..................................................................................... 60

20/ Ví dụ: Ghi lại tên và ngày sinh ............................................................................... 60

21/ Ví dụ: Đọc tên và ngày sinh.................................................................................... 61

22/ Đọc/ghi đốitượng tự tạo.......................................................................................... 61

23/ Luồng ký tự............................................................................................................ 63

24/ Kết nối luồng byte và luồng kí tự............................................................................ 63

25/ Luồng kí tự và Unicode.......................................................................................... 64

26/ Ví dụ: Ghi file Unicode .......................................................................................... 64

27/ Chú ý khi soạn thảo mã .......................................................................................... 65

28/ File truy nhậpngẫu nhiên ........................................................................................ 65

29/ Ví dụ với RandomAccessFile ................................................................................. 65

30/ Chú ý khi đóng file................................................................................................. 66

31/ Lớp File ................................................................................................................. 66

32/ Ví dụ: Hiển thị thông tin file................................................................................... 67

33/ Ví dụ: Hiện nội dung thư mục ................................................................................ 67

TÀI LIỆU THAM KHẢO ................................................................................................. 68

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.