Lập trình mạng với Java - Chương 2: Giới thiệu ngôn ngữ lập trình Java

Lịch sửphát triển của Java bắt đầu năm 1991 khi SUN tiến hành các dựán lập trình cho

vi xửlý dùng trong các thiết bị điện tửkhác nhau. C++ không đáp ứng được các yêu

cầu này vì C++ cho đem mã nguồn từmáy này sang máy khác nhưng sau khi biên dịch

lại hoàn toàn phụthuộc vào từng bộvi xửlý cụthể. Trong khi đó bộvi xửlý dùng trong

các thiết bị điện tửrất đa dạng và có vòng đời khá ngắn ngủi. Nếu ta thay đổi bộxửlý

dẫn đến cần phải thay đổi trình biên dịch C++, điều này gây lên tốn kém. SUN đã thiết

kếmột ngôn ngữlập trình mới có tính khảchuyển cao hơn đó chính là Java. Java là tên

địa phương nơi xuất xứcủa một loại cà phê ngon nổi tiếng.

Java được chính thức công bốnăm 1995 và ngay lập tức đã tạo lên một trào lưu

mới trên toàn thếgiới và từ đó đến nay vẫn tạo được sức cuốn hút mạnh mẽ. Bởi vì

Java không chỉ đơn thuần là một ngôn ngữlập trình mà nó là giải pháp cho nhiều vấn

đề.

pdf43 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 1927 | Lượt tải: 0download
Tóm tắt nội dung Lập trình mạng với Java - Chương 2: Giới thiệu ngôn ngữ lập trình Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
vào mệnh đề implements trong khai báo lớp. Một 
lớp có thể thực thi nhiều giao tiếp (Java hỗ trợ đa thừa kế giao tiếp), vì vậy sau từ khóa 
implements là một danh sách các giao tiếp được thực thi bởi một lớp. 
Chú ý: Mệnh đề implements đứng sau mệnh đề extends nếu tồn tại mệnh đề extends. 
class CalculatorTest implements CalculatorInterface 
{ 
 public double add(double x, double y) 
 { 
 return x+y; 
 } 
 public double sub(double x, double y) 
 { 
 return x-y; 
 } 
 public double mul(double x, double y) 
 { 
 return x*y; 
 } 
 public double div(double x, double y) 
 {return x/y; 
 } 
 public static void main(String[] args) throws Exception 
 { 
 CalculatorInterface cal=new CalculatorTest(); 
 if(args.length!=2) 
 { 
 34
 System.out.println("Cach chay chuong trinh: java CalculatorImpl 
so1 so2"); 
 return; 
 } 
 else 
 { 
 double x,y,z; 
 x=Double.parseDouble(args[0]); 
 y=Double.parseDouble(args[1]); 
 System.out.println(x+"+"+y+"="+cal.add(x,y)); 
 System.out.println(x+"-"+y+"="+cal.sub(x,y)); 
 System.out.println(x+"*"+y+"="+cal.mul(x,y)); 
 System.out.println(x+"/"+y+"="+cal.div(x,y)); 
 } 
 } 
} 
Kết quả thực hiện chương trình là 
C:\MyJava>java CalculatorTest 12 3 
12.0+3.0=15.0 
12.0-3.0=9.0 
12.0*3.0=36.0 
12.0/3.0=4.0 
Sử dụng giao tiếp như là một kiểu 
Khi ta định nghĩa một giao tiếp mới, ta có thể định nghĩa kiểu dữ liệu tham chiếu mới. 
Giao tiếp có thể được sử dụng khi khai báo một biến tham chiếu. Giả sử MyInterface là 
một giao tiếp thì ta có thể khai báo như sau: 
MyInterface mi; 
2.7. Các gói và sử dụng gói trong Java 
Các gói có các thành phần là các lớp, các interface, và các gói con có liên quan với 
nhau. Việc tổ chức thành các gói có một số lợi ích sau đây: 
o Các gói cho phép ta tổ chức các lớp thành các đơn vị nhỏ hơn (như 
các thư mục), và giúp cho việc định vị và sử dụng các lớp tương ứng 
trở nên dễ dàng hơn. 
o Tránh được các vấn đề về xung đột tên. 
o Cho phép ta bảo vệ các lớp, dữ liệu và các phương thức theo một 
quy mô lớn hơn so với phạm vi lớp. 
 35
o Các tên gói có thể được sử dụng để định danh các lớp của bạn. 
• Truy xuất tới các thành phần của gói trong Java 
Để truy xuất tới thành phần của gói trong Java ta có thể sử dụng cú pháp sau: 
MyPackage.MyClass 
MyPackage là tên gói, MyClass là tên lớp nằm trong gói MyPackage. 
• Khai báo các gói trong chương trình 
Để có thể sử dụng các thành phần của một gói trong chương trình Java, ta cần phải 
khai báo gói cụ thể chứa lớp đó: 
import ten_goi.*;// ten_goi: tên gói 
Với khai báo như trên, ta có thể truy xuất tới tất cả các lớp, các interface nằm trong gói 
đó. Để khai báo sử dụng một lớp cụ thể trong chương trình ta khai báo dòng lệnh sau: 
import ten_goi.ten_lop; // ten_lop: tên lớp 
Giả sử ta có gói MyPackge, bên trong gói MyPackage lại có một số gói con như 
SubPackage1, SubPackage2,..ta có thể khai báo sử dụng các thành phần trong gói con 
SubPackage1 như sau: 
import MyPackage.SubPackage1.*; 
• Cách tạo ra các gói trong Java 
Bước 1: Khai báo một gói trong Java 
Giả sử ta khai báo một gói có tên là mypackage, bên trong gói này có lớp Calculator. 
package mypackage; 
public class Calculator 
{ 
 public double cong(double a,double b) 
 { 
 return a+b; 
 } 
 public double nhan(double a, double b) 
 { 
 return a*b; 
 } 
 public double tru(double a,double b) 
 { 
 return a-b; 
 } 
 public double chia(double a,double b) throws Exception 
 { 
 36
 return a/b; 
 } 
} 
Bước 2: Biên dịch 
C:\>javac -d C:\MyJava Calculator.java 
Một vài điều cần lưu ý khi khai báo các thành viên của gói. 
Thứ nhất, các thành phần của gói cần được khai báo với thuộc tính public, nếu cần truy 
xuất chúng từ bên ngoài. 
2.6. Quản lý ngoại lệ (Exception Handling) 
• Khái niệm 
Trong quá trình xử lý, các ứng dụng có thể bất ngờ gặp các lỗi với các mức độ nghiêm 
trọng khác nhau. Khi một phương thức tác động trên một đối tượng, đối tượng có thể 
phát hiện các vấn đề trạng thái bên trong (chẳng hạn các giá trị không nhất quán, như 
lỗi chia 0), phát hiện các lỗi với các đối tượng hay dữ liệu mà nó thao tác (như file hay 
địa chỉ mạng) xác định nó vi phạm các qui tắc cơ bản (như đọc dữ liệu từ một luồng đã 
bị đóng),...Rất nhiều người lập trình không thể kiểm tra tất cả các trạng thái lỗi có thể 
xảy ra. 
Exception cung cấp một cách để kiểm tra các lỗi mà không chia cắt mã. Exception cũng 
đưa ra một cơ chế báo lỗi một cách trực tiếp chứ không sử dụng các cờ hay các hiệu 
ứng phụ. 
• Các ngoại lệ trong Java 
Trong Java có một lớp Exception, mọi lớp ngoại lệ là lớp con của lớp này. Lớp 
Exception là lớp con của lớp Throwable 
Throwable 
Exception 
 37
Hình 2.7 
Lớp Throwable chứa một xâu được sử dụng để mô tả ngoại lệ. Ngoại lệ được phân 
thành hai loại: Ngoại lệ được kiểm tra (checked exception) và ngoại lệ không được kiểm 
tra (unchecked exception). 
Ngoại lệ được kiểm tra là ngoại lệ mà trình biên dịch sẽ kiểm tra phương thức của 
người lập trình và chỉ đưa ra ngoại lệ khi chúng được thông báo để đưa ra. 
Ngoại lệ không được kiểm tra là lớp con của các lớp Error; RuntimeException. 
Java cung cấp một mô hình quản lý các ngoại lệ cho phép kiểm tra các lỗi ở các vị trí có 
liên quan. 
• Khối try và catch 
Cú pháp 
o Khối try 
Bao gồm một tập hợp các lệnh có thể phát sinh ngoại lệ trong khi xử lý. Một phương 
thức, có thể đưa ra một ngoại lệ cũng được đặt try 
Các khối try lồng nhau 
try{ 
 stmt1; 
 stmt2; 
 try{ 
 stmt3; 
 stmt4; 
 } 
 catch(Exception e) 
 { 
 } 
} 
catch(Exception e) 
{ 
} 
Khi các khối try được lồng nhau, khối try bên trong được xử lý trước và một ngoại lệ 
được đưa ra trong khối đó được đón bắt trong các khối try catch con. Nếu khối catch 
bên trong không thỏa mãn thì các khối try bên ngoài được kiểm tra. Nếu một khối catch 
phù hợp được tìm thấy, thì ngoại lệ được quản lý trong khối đó ngược lại thì môi trường 
Java Runtime quản lý ngoại lệ. 
try 
 { 
 doFileProcessing(); 
 38
 displayResults(); 
 } 
 catch(Exception e) 
 { 
 System. er.println(e.getMessage()); 
 } 
Bất kỳ lỗi nào xảy ra trong quá trình xử lý doFileProcessing() hay displayResult() thì sẽ 
đựơc đón bắt bởi khối catch và được xử lý. 
Nếu có lỗi xảy ra trong quá trình xử lý doFileProcessing(), phương thức displayResult() 
sẽ không bao giờ được gọi, và khối catch sẽ được xử lý. 
Một khối try có thể có nhiều khối catch và xử lý các kiểu khác nhau 
 try 
 { 
 } 
 catch(Exception e) 
 { 
 } 
 catch(Exception e) 
 { 
 } 
 finally 
 { 
 //Thực hiện công việc thu dọn 
 } 
Ví dụ: 
class TryCatch 
{ 
 public static void main(String[] args) 
 {int x,y; 
 try{ 
 x=Integer.parseInt(args[0]); 
 y=Integer.parseInt(args[1]); 
 x=x/y; 
 System.out.println("x="+x); 
 } 
 39
 catch(ArithmeticException e) 
 { 
 System.out.println("Khong the chia cho 0"); 
 System.err.println(e); 
 } 
 } 
} 
Kết quả 1 
C:\MyJava\Baitap>java TryCatch 18 9 
x=2 
Kết quả 2 
C:\MyJava\Baitap>java TryCatch 9 0 
Khong the chia cho 0 
java.lang.ArithmeticException: / by zero 
• Khối finally 
Khối finally là khối mà chúng ta thấy các lệnh trả về các tài nguyên cho hệ thống và các 
lệnh khác để in ra bất kỳ thông báo nào. 
Các lệnh trong khối finanally có thể là: 
o Đóng một file. 
o Đóng một resultset (Lập trình cơ sở dữ liệu). 
o Ngắt liên kết được thiết lập với cơ sở dữ liệu. 
… 
Khối finally luôn được xử lý dù ngoại lệ có xảy ra hay không 
• Mệnh đề throw 
Các ngoại lệ được đưa ra bằng cách sử dụng lệnh throw, nó nhận một đối tượng làm 
tham số, đối tượng thuộc lớp là lớp con của lớp Throwable 
Ví dụ: 
class ArraySizeException extends NegativeArraySizeException 
{ 
 ArraySizeException() 
 { 
 super("Nhap kich thuoc mang khong hop le"); 
 } 
} 
 40
class ThrowDemo 
{ 
 int size, a[]; 
 ThrowDemo(int s) 
 { 
 size =s; 
 try{ 
 checkSize(); 
 } 
 catch(ArraySizeException e) 
 { 
 System.out.println(e); 
 } 
 } 
 void checkSize() throws ArraySizeException 
 { 
 if(size<0) throw new ArraySizeException(); 
 a= new int[3]; 
 for(int i=0;i<3;i++)a[i]=i+1; 
 } 
 public static void main(String[] args) 
 { 
 new ThrowDemo(Integer.parseInt(args[0])); 
 } 
} 
Kết quả thực hiện chương trình 
C:\MyJava\Baitap>java ThrowDemo -1 
ArraySizeException: Nhap kich thuoc mang khong hop le 
Giải thích: 
Chúng ta đã tạo ra một lớp có tên ArraySizeException, lớp này là lớp con của lớp 
NegativeArraySizeException. Bằng cách tạo ra một đối tượng của lớp này, chúng ta đã 
in ra thông báo ngoại lệ. Phương thức checkSize() có thể đưa ra ngoại lệ 
ArraySizeException. 
không có ngoại lệ có ngoại lệ 
try 
 41
Hình 2.8 
Ví dụ: 
class FinallyDemo 
{ 
 String name; 
 int x,y; 
 FinallyDemo(String s[]) 
 { 
 try{ 
 name = new String("try catch finally demo"); 
 x = Integer.parseInt(s[0]); 
 y=Integer.parseInt(s[1]); 
 System.out.println(name); 
 System.out.println("Ket qua "+x/y); 
 } 
 catch(ArithmeticException e) 
 { 
 System.err.println("Khong the chia 0!"); 
 } 
 finally 
 { 
 name = null; 
 System.out.println("Xu ly khoi finally"); 
 } 
 42
 } 
 public static void main(String[] args) 
 { 
 new FinallyDemo(args); 
 } 
} 
Kết quả 1 
C:\MyJava\Baitap>java FinallyDemo 16 0 
try catch finally demo 
Khong the chia 0! 
Xu ly khoi finally 
Kết quả 2 
C:\MyJava\Baitap>java FinallyDemo 16 4 
try catch finally demo 
Ket qua 4 
Xu ly khoi finally 
• Một số ngoại lệ thường gặp 
o RuntimeException 
o ArithmeticException 
o IllegalArgumentException 
o ArrayIndexOutOfBoundsException 
o NullPointerException 
o SecurityException 
o NoSuchElementException 
o ClassNotFoundException 
o AWTException 
o DataFormatException 
o SQLException 
o IOException 
o UnknownHostException 
o SocketException 
 43
o EOFException 
o MalformedURLException 
o FileNotFoundException 
o IllegalAccessException 
o NoSuchMethodException 

File đính kèm:

  • pdfLập trình mạng với Java - Chương 2_Giới thiệu ngôn ngữ lập trình Java.pdf
Tài liệu liên quan