}
catch(InterruptedException e) { System.out.println(“error occurred”);
}
System.out.println(“In the syncIt() method”);
}
}
Giải thích:
Chương trình tạo hai luồng con, mỗi luồng sử dụng đồng bộ phương thức run(). Khi luồng 1 được đánh thức, nó gọi phương thức syncIt( ) của đối tượng objectDead1.
Do luồng objTh2 sử dụng điều khiển của đối tượng objectDead2, luồng 1 rơi vào trạng thái chờ điều khiển. Khi objTh2 được đánh thức, nó cố gắng gọi phương thức syncIt() của đối tượng objDead2. Tại thời điểm này, objTh2 cũng buộc phải chờ do objTh1 đang sở hữu điều khiển của đối tượng objDead1.
Do cả hai luồng đều đang chờ nhau, nên sẽ không thức dậy. Đây là tình trạng bế tắc. Chương trình bị chặn và không tiếp tục.
Khắc phục tình trạng deadlock.
- Tránh yêu cầu nhiều hơn 1 khóa tại một thời điểm.
- Trong chương trình có nhiều khóa được sắp xếp theo thứ tự xác định, nhất quán.
CÂU HỎI ÔN TẬP, THẢO LUẬN
Câu 1. Tính kế thừa (Inheritance) là gì?
Câu 2. Định nghĩa tính đa hình (Polymorphism)?
Câu 3. Khi nào phương thức abstract được sử dụng?
Câu 4. Sự khác nhau giữa nạp chồng và ghi đè (Overloading vs Overriding)?
Câu 5. Sự khác nhau giữa hai lớp StringBuffer và StringBuilder?
Câu 6. Giải thích dòng code sau bằng ngôn ngữ Java:
public static void main (String args[ ])
Câu 7. Thread có thể được tạo bằng hai cách nào?
Câu 8. Hãy cho biết kết quả khi dịch và chạy chương trình sau : public class TryCatchDemo{
static public void main (String args[]) { int k = 0;
try {
int i=5/k;
} catch(ArithmeticException e) { System.err.println(“Loi chia cho 0!”);
}catch(RuntimException e){ System.err.println(“Loi khi thuc hien !”);
}catch(Exception e) { System.err.println(“Loi vao/ra !”);
}finally {
System.out.println(“Cong viec can thuc hien !”);
}
System.out.println (“Cuoi cung”);
}
}
BÀI TẬP ỨNG DỤNG
Bài 1. Thiết kế và cài đặt lớp XeOTo, chứa các thông tin chi tiết sau:
- Tên xe.
- Hãng sản xuất
- Năm sản xuất
Viết phương thức khởi dựng tương ứng.
Bài 2. Thiết kế và cài đặt cho lớp XeTai thừa kế từ lớp XeOTo, lưu các thông tin của xe tải:
- Mã xe
- Biển số xe
- Trọng tải
Trong lớp XeTai, cài đặt các phương thức sau:
- Phương thức khởi dựng.
- Phương thức nhập thông tin cho xe tải.
- Phương thức hiển thị thông tin xe tải
Bài 3. Thiết kế và cài đặt ứng dụng QuanLyXeTai, với các chức năng:
1. Nhập thêm một xe tải mới.
2. Tìm kiếm xe tải khi biết biển số xe
3. In danh sách xe tải theo thứ tự trọng tải tăng dần
4. Kết thúc
Bài 4. Hãy xây dựng lớp SinhVien có các thuộc tính riêng (private):
-Số báo danh
-Họ và tên sinh viên
-Địa chỉ
-Môn Học
-Điểm thi học kì I,II
a, Viết các hàm truy nhập tới các thành phần dữ liệu và các toán tử tạo lập cho lớp Sinhvien
b,Viết chương trình chính để tạo danh sách Sinhvien và hiển thị thực đơn: 1.Nhập vào thông tin về sinh viên
2.Xem thông tin sinh viên 3.Tìm sinh viên theo điểm 4.Kết thúc chương trình
c,Viết các hàm thành phần của 1 lớp để thực hiện các nhiệm vụ trên
Bài 5. Một công ty được giao nhiệm vụ quản lý các phương tiện giao thông gồm các loại xe ôtô,xe máy,xe tải.
+ Mỗi phương tiện giao thông cần quản lý : mô hình,năm sản suất,giá bán và màu
+ Các ôtô cần quản lý : chỗ ngồi ,kiểu động cơ
+ Xe máy : công suất,
+ Xe tải : Trọng tải
a, Xây dựng các lớp XeTai, XeMay và oto kế thừa từ lớp PhuongTienGT
b, Xây dựng các hàm để truy nhập,hiển thị,và kiểm tra các thuộc tính của các lớp c, Phát triển lớp Kiemke để quản lý tất cả các phương tiện(xe máy,ôtô xe tải),
trong đó có hàm chính thực hiện theo thực đơn:
1.Nhập đăng ký phương tiện, 2.Tìm phương tiện theo mô hình 3.Tìm phương tiện theo màu 4.Kết thúc.
d,Viết các hàm để thực hiện nhiệm vụ trên.
Bài 6. Viết chương trình để quản lý dịch vụ ATM với các thuộc tích đều có kiểu số nguyên gồm: accID (số PIN của tài khoản), balance (số dư hiện có của tài khoản), amount (tổng số tiền rút ra từ tài khoản) với các yêu cầu:
- Phương thức void input() thực hiện: nhập giá trị đầu vào của accID và balance.
- Phương thức void withdraw() thực hiện: kiểm soát giá trị của amount xem amount có nhỏ hơn hoặc bằng giá trị của balance không? Biết, balance = balance - amount.
- Phương thức void displayBalance() thực hiện: đưa ra giá trị của balance sau khi đã thực hiện rút tiền khỏi tài khoản.
- Trong phương thức của main thực hiện: tạo các đối tượng của ATM và gọi các phương thức trên.
Bài 7. Viết chương trình quản lý điểm môn Tin học của sinh viên với các yêu cầu sau:
a) Tên sinh viên và điểm của sinh viên đó được nhập sẵn trong chương trình.
b) Hiển thị danh sách sinh viên và điểm tương ứng của sinh viên đó.
c) Xóa một sinh viên khỏi danh sách.
d) Hiển thị danh sách sinh viên sau khi thực hiện xóa.
Bài 8. Viết chương trình quản lý thông tin về lương cho một Công ty với các yêu cầu sau:
a. Các thông tin chung gồm:
- Họ và tên
- Tuổi
- Năm vào Công ty
- Phụ cấp. Trong đó phục cấp được tính như sau:
Phụ cấp = 200000 + 30000 * số năm công tác tại Công ty
b. Các thông tin riêng:
* Các nhân viên làm việc tại văn phòng:
- Nhập hệ số lương (ví dụ như 2.34, 2.67, 3.00, 3.33,...)
- Nhập số ngày nghỉ trong tháng,
- Lương
Trong đó lương được tính như sau:
Lương = hệ số lương * 1050000 + phụ cấp - lương nghỉ việc Lương nghỉ việc = số ngày nghỉ * (hệ số lương * 1050000)/20
* Các nhân viên sản xuất
- Nhập số sản phẩm đã nộp trong tháng
- Lương Trong đó lương được tính như sau:
Lương = số sản phẩm * 100000 + phụ cấp
c. Đưa ra màn hình kết quả tổng lương của các nhân viên trong Công ty sao cho kết quả hiển thị là một số thực có phần thập phân không quá 2 chữ số.
Ví dụ sau khi nhập:
* Nhân viên văn phòng:
- Họ tên: Nguyen Tuan Anh
- Tuổi: 25
- Năm vào Công ty: 2012
- Số ngày nghỉ trong tháng: 0
* Nhân viên sản xuất:
- Họ tên: Vu Minh Tri
- Tuổi: 25
- Năm vào Công ty: 2012
- Số sản phẩm đã nộp trong tháng: 100
* Kết quả: Lương của hai nhân viên đó là: 12857000.00
Bài 9. Một thư viện cần quản lý các tài liệu bao gồm Sách, Tạp chí, Báo
Mỗi tài liệu có các thuộc tính: Mã tài liệu, Tên nhà xuất bản, Số bản phát hành. Các loại sách cần quản lý: Tên tác giả, Tên sách, số trang
Các tạp chí cần quản lý: Số phát hành, tháng phát hành Các báo cần quản lý: ngày phát hành. (Date)
1.Xây dựng các lớp để quản lý các loại tài liệu trên sao cho việc sử dụng lại được nhiều nhất.
2. Xây dựng lớp QuanLySach cài đặt các phương thức thực hiện các công việc sau:
a. Nhập thông tin về các tài liệu
b. Hiển thị thông tin về các tài liệu
c. Tìm kiếm tài liệu theo loại
d. Tìm kiếm tài liệu theo tên tác giả
Bài 10.
* Tạo interface Person nằm trong gói person.info nó có 2 phương thức sau:
- Public void input();
- Public void display();
* Tạo một lớp Student nằm trong gói student.info thực thi giao diện trên và bổ sung thêm thuộc tính:
- String name;
- Int Age;
- String nativePlace;
- String id.
Cài đặt các constructor.
Override tất cả các phương thức có trong lớp Person.
* Tạo một lớp ManagerStudent nằm trong gói manager.info kế thừa từ lớp Student và bổ sung thêm:
- int n; (Chỉ ra số sv có trong ds)
- Mảng n phần tử kiểu đối tượng sinh viên, để chứa các thông tin về mỗi sinh viên.
CHƯƠNG 4. LẬP TRÌNH GIAO DIỆN VỚI JAVA SWING
Mục đích
Chương này trình bày chi tiết phương pháp lập trình giao diện bằng SWING trong Java, cụ thể như:
Giới thiệu Swing và mô hình MVC
Quản lý Layout
Các thành phần lựa chọn: Checkboxes, Radio Button, ComboBoxes…
Xây dựng menu và các Dialog Boxes.
4.1. Giới thiệu Swing và mô hình MVC
Java Swing là một phần của Java Foundation Classes (JFC) được sử dụng để tạo các ứng dụng Window-Based. Được xây dựng trên cùng của AWT (Abstract Windowing Toolkit) API và viết hoàn toàn bằng Java.
Không giống AWT, Java Swing cung cấp các thành phần (Component) gọn nhẹ và độc lập nền tảng. Javax.swing. Package cung cấp các lớp cho Java Swing như JButton, JTextField, JTextArea, JRadioButton, JCheckbox, JMenu, JcolorChooser,…
Java Foundation Classes (JFC) là một tập hợp các thành phần GUI giúp đơn giản hóa việc phát triển các ứng dụng Desktop.
Hình dưới đây cho thấy cái nhìn nhìn tổng quan về cấu trúc theo thứ bậc của các lớp trong Java Swing.
Hình 4.1. Các lớp trong java Swing
Kiến trúc MVC
Swing sử dụng một kiểu riêng đơn giản của thiết kế MVC gọi là Model - Delegate. Thiết kế này kết hợp View và Controller thành yếu tố đơn nhất là UI delegate. Kết hợp khả năng đồ họa và xử lý sự kiện một cách dễ dàng trong Java.
View
Controller
Model
Program
The GUI
Hình 4.2. Mô hình MVC
Mỗi thành phần Swing chứa một Model và một UI delegate. Model chịu trách nhiệm nắm giữ thông tin về trạng thái của thành phần. UI delegate chịu trách nhiệm nắm giữ thông tin về việc xuất hiện các thành phần (component) trên màn hình. Thêm vào đó, UI delegate (tập hợp với AWT) tương tác lại với những sự kiện riêng biệt để truyền lại thông qua component.
4.1.1. Lợi ích của sử dụng Swing so với AWT
Java AWT | Java Swing | |
1 | Các thành phần của AWT là phụ thuộc vào nền tảng | Các thành phần của Swing là độc lập nền tảng |
2 | Các thành phần của AWT: nặng | Các thành phần của Swing gọn nhẹ hơn |
3 | AWT không hỗ trợ pluggable Look & Feel | Swing hỗ trơ puggable Look & Feel |
4 | AWT cung cấp ít thành phần hơn Swing | Swing cung cấp các thành phần mạnh mẽ hơn như là tables, lists, scrollpanes, color chooser, tabbedpane,… |
5 | AWT không theo kiến trúc MVC | Swing hỗ trợ kiến trúc MVC |
Có thể bạn quan tâm!