Saturday, October 11, 2008

Java Tiger and Mustang

Chà, đã mấy ngày rồi mà bài quiz Java về Object của Weiqi Gao mà mình đưa lên vẫn chưa có comment nào, chẳng lẽ bài tầm thường quá nên các Java gurus không thèm reply chăng T_T


Không sao , giờ thì mình revisit lại những điểm mới trong Java 5.0 (Tiger) và 6.0 (Mustang) cái đã. Hy vọng những cái này sẽ giúp cho các bạn mới làm quen với Java bằng sách tiếng Việt (vì các sách này chỉ dịch lúc còn Java 1.4, 1.3) .


Đầu tiên là Tiger. Không chỉ quyết định đổi tên phiên bản từ 1.5 thành 5.0 (thực chất chỉ là một nỗ lực marketing, như hồi đổi tên Solaris 2.7 thành 7.0) , Sun còn áp dụng 1 loạt thay đổi đáng kể đến ngôn ngữ Java và các lớp :


* Đổi tên :
J2SDK -> JDK (không còn tưởng niệm JavaSE 1.2)
J2SE -> Java SE , J2EE -> Java EE , J2ME -> Java ME
1.5 -> 5.0 (và open source gần hết mã nguồn Java)


* Annotations : (còn gọi là Metadata)
Đây không phải là điều gây nhiều hứng thú trước khi nó ra đời, nhưng cuối cùng nó lại là điểm sáng nhất trong số các cải tiến ở Java 5.
Cho phép người phát triển tạo những ký hiệu đánh dấu (annotation) riêng, gần giống như các annotation của javadoc . Sun cũng cung cấp sẵn một số annotation: @Override, @Deprecated, @SuppressWarning, ...
Về mặt cú pháp, các annotation này có vai trò như 1 loại modifier (bổ từ: public, static, final, ... ) đặc biệt ; do đó nằm ở vị trí tương ứng như modifier.

VD:

public @interface RequestForEnhancement {
int id();
String synopsis();
String engineer() default "[unassigned]";
String date(); default "[unimplemented]";
}


public class Foo {
@Test public static void m1() { }
public static void m2() { }
@Test
public static void m3() {
throw new RuntimeException("Boom");
}
public static void m4() { }
@Test
public static void m5() { }
public static void m6() { }
@Test public static void m7() {
throw new RuntimeException("Crash");
}
public static void m8() { }
}



* Generics :
Đây là tính năng được mong đợi nhất, như Template trong C++, Generics trong C#, nhưng đáng tiếc nó đã được implement không tốt lắm, dẫn đến sai lầm cố hữu là sự phức tạp không cần thiết, điều mà cộng đồng Java đã phê phán Sun từ thời EJB.
Cú pháp cho phép kiểu của các phần tử mảng và collection được chỉ ra.
Mục đích phát hiện những lỗi sai về kiểu dữ liệu ngay tại thời điểm dịch (complilation time) thay vì lúc chạy chương trình (runtime).

Cú pháp : Collection<T>

Ví dụ :

List<String> list = new ArrayList<String>();



* Lặp For mới (ForEach)
Nâng cao việc sử dụng vòng for với mảng và collection

Cú pháp:
for (kiểu_dữ_liệu biến : mảng)

Ví dụ :

for (String myString : arrayOfStrings) { /* ... */ }



* Formatter và printf :
Định dạng printf hầu như giống C hoàn toàn (mở rộng hơn)

VD:

System.out.printf("%s %5d\n", user,total);



* enum
Rất giống enum trong C++ , có điều tên các phần tử không cần đặt thêm prefix (hay suffix) , bởi có thể gọi được như kiểu Static field.

Ví dụ :

enum Seasons { fall, winter, spring, summer } ;



* Hỗ trợ Unicode (UCS-2, UTF-16)
java.lang.String và java.lang.Character có phân biệt điểm mã (Code Point) cho các ký tự. UTF-16 theo chuẩn unicode.org
(tương lai có thể Java hỗ trợ cả UTF-8, UTF-32)


* JFrame.getContentPane().add()
Gọi add component trực tiếp từ JFrame không cần qua contentPane.


* import static
Cho phép sử dụng hằng số và phương thức tĩnh mà không cần chỉ ra tên lớp.
Giúp thuận tiện trong lập trình

Ví dụ :

import static java.lang.Math.*;



* Variable arguments (varargs)
Số lượng tham số của method có thể thay đổi,
Sử dụng cú pháp ba chấm ' . . . '

Ví dụ :

void argtest(Object ... args) {}



* AutoBoxing-Unboxing
Có thể sử dụng kiểu dữ liệu nguyên thủy gán trực tiếp cho wrapper class

Ví dụ :

Integer I = 5;




Còn các điểm mới của Java 6 (Mustang) xin được tách ra thành một entry khác , bởi bài này đã khá dài :-)

1 comment:

bk08 said...

Java hỗ trợ Unicode bảng mã nào vậy anh ?