Giáo trình Lập trình Java (Phần 1)

Đặc trưng của Java

 Đơn giản2

 Hướng đối tượng

 Độc lập phần cứng và hệ điều hành

 Mạnh

 Bảo mật

 Phân tán

 Đa luồng

 Động

a) Đơn giản

Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và quen thuộc

với đa số người lập trình. Do vậy Java loại bỏ các đặc trưng phức tạp của C và C++

như thao tác con trỏ, thao tác định nghĩa chồng toán tử (operator overloading), Java

không sử dụng lệnh “goto” cũng như file header (.h). Cấu trúc “struct” và “union”

cũng được loại bỏ khỏi Java.

b) Hướng đối tượng

Java được thiết kế xoay quanh mô hình hướng đối tượng. Vì vậy trong Java, tiêu

điểm là dữ liệu và các phương pháp thao tác lên dữ liệu đó. Dữ liệu và các phương

pháp mô tả trạng thái và cách ứng xử của một đối tượng trong Java.

c) Độc lập phần cứng và hệ điều hành

Đây là khả năng một chương trình được viết tại một máy nhưng có thể chạy được

bất kỳ đâu. Chúng được thể hiện ở mức mã nguồn và mức nhị phân.

Ở mức mã nguồn, người lập trình cần mô tả kiểu cho mỗi biến. Kiểu dữ liệu

trong Java nhất quán cho tất cả các hệ điều hành và phần cứng khác nhau. Java có

riêng một thư viện các lớp cơ sở. Vì vậy chương trình Java được viết trên một máy có

thể dịch và chạy trơn tru trên các loại máy khác mà không cần viết lại.

Tính độc lập ở mức nhị phân, một chương trình đã biên dịch có thể chạy trên

nhiều nền (phần cứng, hệ điều hành) khác mà không cần dịch lại mã nguồn. Tuy vậy

cần có phần mềm máy ảo Java (sẽ đề cập đến ở phần sau) hoạt động như một trình

thông dịch tại máy thực thi

 

Giáo trình Lập trình Java (Phần 1) trang 1

Trang 1

Giáo trình Lập trình Java (Phần 1) trang 2

Trang 2

Giáo trình Lập trình Java (Phần 1) trang 3

Trang 3

Giáo trình Lập trình Java (Phần 1) trang 4

Trang 4

Giáo trình Lập trình Java (Phần 1) trang 5

Trang 5

Giáo trình Lập trình Java (Phần 1) trang 6

Trang 6

Giáo trình Lập trình Java (Phần 1) trang 7

Trang 7

Giáo trình Lập trình Java (Phần 1) trang 8

Trang 8

Giáo trình Lập trình Java (Phần 1) trang 9

Trang 9

Giáo trình Lập trình Java (Phần 1) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 146 trang duykhanh 9040
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Lập trình Java (Phần 1)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Lập trình Java (Phần 1)

Giáo trình Lập trình Java (Phần 1)
hồng tất cả các phương thức của OutputStream và không đưa thêm bất kì phương 
thức mới nào. 
 Ví dụ3.27: Dưới đây mô tả cách dùng các luồng nhập/xuất có lập vùng đệm: 
 import java.io.BufferedInputStream; 
 import java.io.BufferedOutputStream; 
 import java.io.FileInputStream; 
 import java.io.SequenceInputStream; 
 import java.io.IOException; 
 public class BuffExam 
 { 
 public static void main(String args[ ]) throws IOException 
 { 
 // defining sequence input stream 
 SequenceInputStream Seq3; 
 FileInputStream Fis1 ; 
 Fis1 = new FileInputStream("byteexam.java"); 
 FileInputStream Fis2; 
 Fis2= new FileInputStream("fileioexam.java"); 
 Seq3 = new SequenceInputStream(Fis1, Fis2); 
 // create buffered input and output streams 
 123 
 BufferedInputStream inst; 
 inst= new BufferedInputStream(Seq3); 
 BufferedOutputStream oust; 
 oust= new BufferedOutputStream(System.out); 
 inst.skip(1000); 
 boolean eof = false; 
 int bytcnt = 0; 
 while(!eof) 
 { 
 int num = inst.read(); 
 if(num==-1) 
 { 
 eof =true; 
 } 
 else 
 { 
 oust.write((char) num); 
 ++bytcnt; 
 } 
 } 
 String bytrd=String.valueOf(bytcnt); 
 bytrd += " bytes were read"; 
 oust.write(bytrd.getBytes(), 0, bytrd.length()); 
 // close all streams. 
 inst.close(); 
 oust.close(); 
 Fis1.close(); 
 Fis2.close(); 
 } 
} 
 124 
 Kết quả thực hiện của chương trình trên: 
 Hình 3.6. Kết quả chạy ví dụ 3.27 
3.3.7. Lớp Reader và Writer 
 Đây là các lớp trừu tượng, lớp cha của tất cả các lớp đọc và ghi các dòng ký tự 
Unicode. Java 1.1 đã giới thiệu các lớp này. 
  Lớp Reader 
 Lớp này hỗ trợ các phương thức: 
 . read( ) 
 . reset( ) 
 . skip( ) 
 . mark( ) 
 . markSupported( ) 
 . close( ) 
 Lớp này cũng hỗ trợ phương thức „ready()‟. Phương thức này trả về giá trị 
 kiểu boolean, xem việc đọc có tiếp tục được hay không. 
  Lớp Writer 
 Lớp này hỗ trợ các phương thức: 
 . write( ) 
 . flush( ) 
 . close( ) 
3.3.8. Nhập xuất chuỗi 
 Các lớp „CharArrayReader‟ và „CharArrayWriter‟ cũng tương tự như các lớp 
ByteArrayInputStream và ByteArrayOutputStream ở chỗ chúng hỗ trợ nhập/xuất từ 
các vùng đệm. Các lớp CharArrayReader và CharArrayWriter hỗ trợ nhập/ xuất ký tự 
8 bit. 
 125 
 CharArrayReader bổ sung thêm phương pháp nào, nó chỉ dùng các phương thức 
mà lớp Reader cung cấp. Lớp CharArrayWriter bổ sung thêm các phương thức sau đây 
ngoài các phương thức của lớp Writer. 
  reset( ) 
 Thiết lập lại vùng đệm 
  size( ) 
 trả về kích cỡ hiện hành của vùng đệm 
  toCharArray( ) 
 Trả về bản sao mảng ký tự của vùng đệm xuất 
  toString( ) 
 Chuyển đổi vùng đệm xuất thành một đối tượng String 
  writeto( ) 
 Ghi vùng đệm ra một luồng xuất khác. 
 Lớp StringReader trợ giúp đọc ký tự từ một chuỗi. Nó không bổ sung phương 
thức nào ngoài các phương thức của lớp Reader. 
 Lớp StringWriter trợ giúp ghi ký tự ra đối tượng StringBuffer. Lớp này bổ sung 
hai phương thức có tên là „getBuffer( )‟ và „toString()‟ . Phương thức „getBuffer( )‟ 
trả về đối tượng StringBuffer tương ứng với vùng đệm xuất, trong khi đó phương thức 
toString( ) trả về một chuỗi chứa bản sao của vùng đệm xuất. 
 Ví dụ 3.28: Dưới đây thực hiện các tác vụ nhập/xuất mảng ký tự: 
 import java.io.CharArrayReader; 
 import java.io.CharArrayWriter; 
 import java.io.IOException; 
 public class Testl 
 { 
 public static void main(String args[ ]) throws IOException 
 { 
 CharArrayWriter ost = new CharArrayWriter( ); 
 String s = "Welcome to Character Array Program"; 
 for(int i= 0; i<s.length( ); ++i) 
 ost.write(s.charAt(i)); 
 System.out.println("Output Stream is: " + ost); 
 System.out.println("Size is: " + ost.size( )); 
 126 
 CharArrayReader inst; 
 inst = new CharArrayReader(ost.toCharArray( )); 
 int a= 0; 
 StringBuffer sbI = new StringBuffer(" "); 
 while((a = inst.read( )) != -1) 
 sbI.append((char) a); 
 s = sbI.toString( ); 
 System.out.println(s.length() + "characters were read"); 
 System.out.println("They are:" + s); 
 } 
 } 
 Hình 3.8 Kết quả thực hiện chương trình: 
 Hình 3.7. Kết quả chạy ví dụ 3.28 
Ví dụ 3.29 Mô tả tiến trình nhập/xuất chuỗi. 
 import java.lang.System; 
 import java.io.StringReader; 
 import java.io.StringWriter; 
 import java.io.IOException; 
 import java.io. * ; 
 public class StrioExam 
 { 
 public static void main(String args[ ]) throws IOException 
 { 
 StringWriter ost = new StringWriter( ); 
 127 
 String s = "Welcome to String Input Output Program"; 
 for(int i= 0; i <s.length(); ++i) 
 ost.write(s.charAt(i)) ; 
 System.out.println("Output Stream is: " + ost); 
 StringReader inst; 
 inst = new StringReader(ost.toString( )); 
 int a= 0; 
 StringBuffer sb1 = new StringBuffer(" "); 
 while((a = inst.read())!=-1) 
 sb1.append((char) a); 
 s = sb1.toString( ); 
 System.out.println("No of characters read: " +s.length( )); 
 System.out.println("They are: " + s); 
 } 
 } 
Kết quả thực hiện chương trình: 
 Hình 3.8. Kết quả chạy ví dụ 3.29 
3.3.9. Lớp PrinterWriter 
 Lớp „PrintStream‟ thực hiện việc kết xuất dữ liệu. Lớp này có các phương thức 
bổ sung, trợ giúp cho việc in ấn dữ liệu cơ bản. 
 Lớp PrinterWriter‟ là một phiên bản hướng ký tự của lớp PrintStream. Nó thực tế 
cải thiện lớp PrintStream bằng cách dùng dấu tách dòng phụ thuộc hệ điều hành để in 
các dòng thay vì ký tự „\n‟. Lớp này cũng cấp hỗ trợ ký tự Unicode tốt hơn so với 
PrintStream. Phương thức „checkError()‟ được sử dụng kiểm tra kết xuất và xoá sạch 
các lỗi. Phương thức setError() được sử dụng để thiết lập lỗi điều kiện. Lớp 
 128 
PrinterWriter hỗ trợ in ấn các kiểu dữ liệu nguyên thủy, mảng ký tự, chuỗi và đối 
tượng. 
3.3.10. Giao diện DataInput 
 Giao diện DataInput được sử dụng để đọc các byte từ dòng nhị phân và xây dựng 
lại các kiểu dữ liệu dạng nguyên thủy của Java. 
 DataInput cũng cho phép chúng ta chuyển đổi dữ liệu từ định dạng sửa đổi UTF-
8 tới dạng chuỗi. Chuẩn UTF cho định dạng chuyển đổi Unicode. Nó là kiểu định dạng 
đặt biệt mã hoá các ký tự Unicode 16 bit . UTF cho rằng trong hầu hết các trường hợp, 
byte cao trong 2 byte Unicode sẽ là 0. Giao diện DataInput được định nghĩa một số 
các phương thức, các phương thức bao gồm việc đọc các kiểu dữ liệu nguyên thủy 
trong java. 
 Bảng 3.9 Tóm lượt vài phương thức. Tất cả các phương thức đều có khả năng tạo 
ra ngoại lệ IOException trong trường hợp lỗi: 
 Tên phƣơng thức Mô tả 
 boolean readBoolean( ) Đọc một byte nhập, và trả về True nếu byte đó 
 khác 0, và False nếu byte đó bằng 0. 
 byte readByte( ) Đọc một byte 
 char readChar( ) Đọc và trả về một giá trị ký tự 
 short redShort( ) Đọc 2 byte và trả về giá trị kiểu short 
 long readLong( ) Đọc 8 byte và trả về giá trị kiểu long. 
 float readFloat( ) đọc 4 byte và trả về giá trị kiểu float 
 int readInt( ) Đọc 4 byte và trả về giá trị kiểu int 
 double readDouble( ) Đọc 8 byte và trả về giá trị kiểu double 
 String readUTF( ) Đọc một chuỗi 
 String readLine( ) Đọc một dòng văn bản 
 Bảng 3.8. Các phương thức của giao diện DataInput 
3.3.11. Giao diện DataOutput 
 Giao diện DataOutput được sử dụng để tái tạo lại các kiểu dữ liệu nguyên thủy 
trong java thành dãy byte. Nó ghi các byte này lên trên dòng nhị phân. 
 Giao diện DataOutput cũng cho phép chúng ta chuyển đổi một chuỗi vào trong 
Java theo định dạng UTF-8 và ghi nó vào dòng. 
 129 
 Giao diện DataOutput định nghĩa một số phương thức được tóm tắt trong bảng 
3.9. Tất cả các phương thức đều có khả năng gây ra ngoại lệ IOException trong trường 
hợp lỗi. 
 Tên phƣơng thức Mô tả 
 void writeBoolean(boolean b) Ghi một giá trị Boolean vào dòng 
 void writeByte(int value) Ghi giá trị 8 bit thấp 
 void writeChar(int value) Ghi 2 byte giá trị kiểu ký tự vào dòng 
 void writeShort(int value) Ghi 2 byte, biểu diễn lại giá trị kiểu short 
 void writeLong(long value) Ghi 8 byte, biểu diễn lại giá trị kiểu long 
 void writeFloat(float value) Ghi 4 byte, biểu diễn lại giá trị kiểu float 
 void writeInt(int value) ghi 4 byte 
 void writeDouble(double value) Ghi 8 byte, biểu diễn lại giá trị kiểu double 
 void writeUTF(String value) Ghi một chuỗi UTF tới dòng. 
 Bảng 3.9. Các phương thức của giao diện DataOutput 
3.3.12. Lớp RandomAccessFile 
 Lớp RandomAccessFile cung cấp khả năng thực hiện vào/ra theo một vị trí cụ 
thể bên trong một tập tin. Trong lớp này, dữ liệu có thể đọc hoặc ghi ở vị trí ngẫu 
nhiên thay vì liên tục. Vì vậy lớp này có tên là RandomAccess. Phương thức „seek( )‟ 
hỗ trợ truy cập ngẫu nhiên. Vì thế, biến trỏ tương ứng với tệp tin hiện hành có thể ấn 
định theo vị trí bất kỳ trong tập tin. 
 Lớp RandomAccessFile thực hiện cả hai việc nhập và xuất. Do vây, có thể thực 
hiện I/O bằng các kiểu dữ liệu nguyên thủy. Lớp này cũng hỗ trợ các quyền cơ bản về 
đọc hoặc ghi tập tin, điều này cho phép đọc tập tin theo chế độ chỉ đọc hoặc đọc-ghi. 
Tham số „r‟ hoặc „rw‟ được gán cho lớp RandomAccessFile chỉ định truy cập „chỉ 
đọc‟ và „đọc-ghi‟. Lớp này giới thiệu vài phương thức mới khác với phương thức đã 
thừa kế từ các lớp DataInput và DataOutput. 
 Các phương thức mới thêm vào bao gồm: 
  seek( ) 
 Thiết lập con trỏ tập tin tới vị trí cụ thể bên trong tập tin. 
  getFilePointer( ) 
 Trả về vị trí hiện hành của con trỏ tập tin. 
  length( ) 
 130 
 Trả về chiều dài của tập tin tính theo byte. 
 Chương trình dưới đây minh hoạ cách dùng lớp RandomAccessFile. Nó ghi một 
giá trị boolean, một int, một char, một double tới một file có tên „abc.txt‟. Nó sử dụng 
phương pháp seek( ) để tìm vị trí định vị bên trong tập tin (bắt đầu từ 1). Sau đó nó đọc 
giá trị số nguyên, ký tự và double từ tập tin và hiển thị chúng ra màn hình. 
 Ví dụ3.30:Minh hoạ cách dùng lớp RandomAccessFile 
 import java.lang.System; 
 import java.io.RandomAccessFile; 
 import java.io.IOException; 
 public class RndExam 
 { 
 public static void main (String args[ ]) throws IOException 
 { 
 RandomAccessFile rf; 
 rf = new RandomAccessFile(“abc.txt”, “rw”); 
 rf.writeBoolean(true); 
 rf.writeInt(67868); 
 rf.writeChars(“J”); 
 rf.writeDouble(678.68); 
 //making use of seek() method to move to a specific file location rf.seek(1); 
 System.out.println(rf.readInt()); 
 System.out.println(rf.readChar()); 
 System.out.println(rf.readDouble()); 
 rf.seek(0); 
 System.out.println(rf.readBoolean)); 
 rf.close(); 
 } 
 } 
 Hình 3.10Kết quả thực hiện chương trình: 
 131 
 Hình 3.9. Kết quả chạy ví dụ 3.30 
3.4. Gói java.awt.print 
 Đây là gói mới mà bắt đầu từ Java 1.2 cung cấp. Nó thay thế khả năng in của 
JDK 1.1. Nó bao gồm dãy các giao diện: 
  Pageable 
  Printable 
  PrinterGraphics 
 Giao diện „Pageable‟ định nghĩa các phương thức được sử dụng cho đối tượng 
mô tả các trang sẽ được in. Nó cũng chỉ ra số lượng trang sẽ được in cũng như sẽ được 
in trang hiện hành hay một dãy các trang. 
 Giao diện „Printable‟ chỉ định phương thức print()được dùng để in một trạng trên 
một đối tượng Graphics. 
 Giao diện „PrinterGraphics„ cung cấp khả năng truy cập đối tượng „PrinterJob‟. 
Nó cung cấp các lớp sau đây: 
  Paper 
  Book 
  PageFormat 
  Printerjob 
 Lớp „Page‟ định nghĩa các đặc tính vật lý của trang giấy in. Ngoài ra nó cũng 
cung cấp khổ giấy và vùng vẽ. 
 Lớp „Book‟ là một lớp con của đối tượng duy trì một danh sách các trang được 
in. Lớp này cũng cung cấp các phương thức để thêm trang và quản lý trang. Nó cài đặt 
giao diện Pageable. 
 Lớp „PageFormat‟ định nghĩa lề của trang như „Top‟, „Bottom‟,‟Left‟ và „Right‟. 
Nó cũng chỉ định kích cỡ và hướng in như „Portrait‟ (khổ dọc) hoặc „Landscape‟ (khổ 
ngang). 
 Lớp „PrinterJob‟ là một lớp con của đối lượng khởi tạo, quản lý, và điều khiển 
yêu cầu máy in. Lớp này cũng chỉ định các tính chất in. 
 132 
 Dưới đây là ngoại lệ và lỗi mà gói java.awt.print kích hoạt: 
  PrinterException 
  PrinterIOException 
  PrinterAbortException 
 „PrinterException„ thừa kế java.lang.Exception nhằm cung cấp một lớp cơ sở để 
in các ngoại lệ liên quan. 
 „PrinterIOException‟ thừa „PrinterException‟ chỉ rõ lỗi trong I/O. 
 „PrinterAbortException‟ là lớp con của lớp PrinterException nêu rõ việc in đã 
được hủy bỏ. 
Câu hỏi và bài tập chƣơng 3 
1.Viết chương trình nhận một dòng văn bản từ người dùng và hiển thị đoạn văn bản đó 
lên màn hình. 
2.Viết chương trình sao chép nội dụng từ một tập tin tới một tập tin khác. 
3.Viết chương trình truy cập ngẫu nhiên tập tin, có giao diện như sau: 
 Các bản ghi nên được lưu ở tập tin „.dat‟, vì vậy người dùng truy cập chúng 
 sau này. 
4.Viết chương trình đếm số dòng của một file văn bản. 
5. Viết chương trình đọc in từng kí tự của file văn bản ra màn hình, mỗi màn hình 20 
dòng. 
6.Viết chương trình tìm xâu dài nhất trong một file văn bản. 
7.Viết chương trình ghép một file văn bản thứ hai vào file văn bản thứ nhất, trong đó 
tất cả chữ cái của file văn bản thứ nhất phải đổi thành chữ in hoa. 
 133 
8.Viết chương trình in nội dung file ra màn hình và cho biết tổng số chữ cái, tổng số 
chữ số đã xuất hiện trong file. 
9.Cho 2 file số thực (đã được sắp tăng dần). In ra màn hình dãy số xếp tăng dần của cả 
2 file. (Cần tạo cả 2 file dữ liệu này bằng Editor của C++). 
10.Viết hàm nhập 10 số thực từ bàn phím vào file INPUT.DAT. Viết hàm đọc các số 
thực từ file trên và in tổng bình phương của chúng ra màn hình. 
11.Viết hàm nhập 10 số nguyên từ bàn phím vào file văn bản tên INPUT.DAT. Viết 
hàm đọc các số nguyên từ file trên và ghi những số chẵn vào file EVEN.DAT còn các 
số lẻ vào file ODD.DAT. 
12.Nhập bằng chương trình 2 ma trận số nguyên vào 2 file văn bản. Hãy tạo file văn 
bản thứ 3 chứa nội dung của ma trận tích của 2 ma trận trên. 
13.Tổ chức quản lý file sinh viên (Họ tên, ngày sinh, giới tính, điểm) với các chức 
năng : Nhập, xem, xóa, sửa, tính điểm trung chung. 
14.Thông tin về một nhân viên trong cơ quan bao gồm : họ và tên, nghề nghiệp, số 
điện thoại, địa chỉ nhà riêng. Viết hàm nhập từ bàn phím thông tin của 7 nhân viên và 
ghi vào file INPUT.DAT. Viết hàm tìm trong file INPUT.DAT và in ra thông tin của 1 
nhân viên theo số điện thoại được nhập từ bàn phím. 
15.Cho một lớp shapeInt là một lớp interface và một lớp HinhCN là một cài đặt từ lớp 
ShapeInt gồm các thuộc tính và phương thức như hình sau: 
 a. Tạo lớp ShapeInt là một lớp Interface 
 b. Tạo lớp HinhCN là cài đặt của ShapeInt và cài đặt các thuộc tính, phương thức 
cho lớp như sau: 
 - ChieuCao/ChieuRong là 2 thuộc tính là chiều rộng và chiều cao của hình 
 - Các phương thức setter/getter 
 134 
 - Phương thức Contructor 
 - TinhDienTich() dùng để tính diện tích cho hình chữ nhật 
 - TinhChuVi() dùng để tính chu vi cho hình chữ nhật 
 - HienThi() dùng để hiện thị ra chiều rộng, chiều cao, diện tích, chu vi của hình 
chữ nhật. 
 - Phương thức main dùng để tạo ra một đối tượng HinhCN và cho phép nhập 
vào một chiều rộng, chiều cao và hiển thị các kết quả ra màn hình. 
 135 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_java_phan_1.pdf