Lỗi lập trình
• Lỗi lập trình (bug), thường xuyên gặp trong quá trình phát
triển phần mềm, ñược chia làm hai loại:
• Lỗi khi dịch (compile-time bugs): Các trình dịch có thể chỉ ra
các lỗi này và lập trình viên phải sửa (debug) trước khi phần
mềm chạy ñược.
• Lỗi khi chạy (runtime bugs): Lỗi không thể phát hiện ñược
khi dịch mà chỉ ñược phát hiện khi chạy.
• Một trong những nguyên nhân gây lỗi khi chạy là sử dụng SAI
KIỂU.
• Kiểu tổng quát ñược ñưa vào java nhằm phát hiện các lỗi sử dụng
sai kiểu ngay khi dịch.
6 trang |
Chia sẻ: oanh_nt | Lượt xem: 1211 | Lượt tải: 2
Nội dung tài liệu Bài giảng Lập trình java: Kiểu chung, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Lê ðình Thanh, Kiểu chung
Lê ðình Thanh
Bộ môn Mạng và Truyền thông Máy tính
Khoa Công nghệ Thông tin
Trường ðại học Công nghệ, ðHQGHN
Bài giảng
LẬP TRÌNH JAVA
Lê ðình Thanh, Kiểu chung
Kiểu chung
Bài 5
Lê ðình Thanh, Kiểu chung
Nội dung
• Các lỗi lập trình
• Kiểu chung
• Phương thức chung
Lê ðình Thanh, Kiểu chung
Lỗi lập trình
• Lỗi lập trình (bug), thường xuyên gặp trong quá trình phát
triển phần mềm, ñược chia làm hai loại:
• Lỗi khi dịch (compile-time bugs): Các trình dịch có thể chỉ ra
các lỗi này và lập trình viên phải sửa (debug) trước khi phần
mềm chạy ñược.
• Lỗi khi chạy (runtime bugs): Lỗi không thể phát hiện ñược
khi dịch mà chỉ ñược phát hiện khi chạy.
• Một trong những nguyên nhân gây lỗi khi chạy là sử dụng SAI
KIỂU.
• Kiểu tổng quát ñược ñưa vào java nhằm phát hiện các lỗi sử dụng
sai kiểu ngay khi dịch.
Lê ðình Thanh, Kiểu chung
Ví dụ về lỗi khi chạy
public class Box {
private Object object;
public void add(Object object) { this.object = object; }
public Object get() { return object; }
}
public class BoxDemo1 {
public static void main(String[] args) {
Box abox = new Box();
abox.add("10");
Integer anotherbox = (Integer) abox.get();
System.out.println(anotherbox );
}
}
Exception in thread "main" java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer at
BoxDemo1.main(BoxDemo1.java:6)
Lê ðình Thanh, Kiểu chung
Kiểu chung – Generic Type
public class Box {
private T object;
public void add(T object) { this.object = object; }
public T get() { return object; }
}
public class BoxDemo2 {
public static void main(String[] args) {
Box abox = new Box();
abox.add(new Integer(10));
Integer anotherbox = abox.get();
System.out.println(anotherbox);
}
}
Lê ðình Thanh, Kiểu chung
Kiểu chung
• Kiểu ñược sử dụng như một tham số
public class Box { …}
Box abox = new Box();
Lê ðình Thanh, Kiểu chung
Phát hiện lỗi nhờ kiểu chung
public class Box {
private T object;
public void add(T object) { this.object = object; }
public T get() { return object; }
}
public class BoxDemo3 {
public static void main(String[] args) {
Box abox = new Box();
abox.add("10");
Integer anotherbox = (Integer) abox.get();
System.out.println(anotherbox);
}
}
BoxDemo3.java:5: add(java.lang.Integer) in
Box cannot be applied to
(java.lang.String) abox.add("10");
^ 1 error
Lê ðình Thanh, Kiểu chung
Phương thức chung
• Là phương thức có tham số kiểu chung
public void inspect(U u){
System.out.println("U: " + u.getClass().getName());
}
public static void fillBoxes(U u, List> boxes) {
for (Box box : boxes) { box.add(u); }
}
Crayon red = ...;
List> crayonBoxes = ...;
Box.fillBoxes(red, crayonBoxes); //hoặc
Box.fillBoxes(red, crayonBoxes);
Lê ðình Thanh, Kiểu chung
Tham số kiểu ñược giới hạn
• Là phương thức có tham số kiểu chung
public void inspect(U
u){
System.out.println("U: " + u.getClass().getName());
}
abox.inspect("some text");
Box.java:21: inspect(U) in
Box cannot be applied to
(java.lang.String) abox.inspect(“some text");
^ 1 error
Lê ðình Thanh, Kiểu chung
Tiếp theo
Các lớp thiết yếu
Các file đính kèm theo tài liệu này:
- 05_kieu_chung.pdf