Bài giảng Lập trình Java: Phần 1 cung cấp cho người học những kiến thức như: Lập trình Java cơ bản; Lập trình hướng đối tượng trong Java; Các gói và lập trình vào ra. Mời các bạn cùng tham khảo để nắm chi tiết nội dung giáo trình!
LỜI NĨI ĐẦU Hiện có nhiều ngơn ngữ lập trình sử dụng để viết ứng dụng máy tính như: C++, C#, VB, VB.Net… Mỗi ngơn ngữ có mạnh riêng, biết lựa chọn ngôn ngữ phù hợp để xây dựng ứng dụng giúp cho chun gia lập trình tích kiệm thời gian, công sức giúp xử lý kỹ thuật lập trình đơn giản thuận tiện Java ngơn ngữ lập trình hướng đối tượng túy với nhiều đặc trưng ưu việt so với ngôn ngữ lập trình hướng đối tượng khác tính độc lập với nên, Tính Đa nhiệm - đa luồng tính bảo mật, khả đóng gói, giao tiếp… Khác với ngơn ngữ lập trình hướng đối tượng khác c++ hay c# từ đời mục tiêu java phát triển ngôn ngữ đơn giản, nhỏ nhẹ chạy nhiều mơi trường khác nhau, Java đặc biệt thích hợp để viết chương trình cho ứng dụng mạng, thiết bị di động, …, việc việt ứng dụng Java dễ dàng nhiều so với ngơn ngữ khác Chính nhiều ngơn ngữ lập trình chun gia sử dụng để viết nên ứng dụng máy tính, doanh nghiệp, thiết bị cầm tay Java ngôn ngữ chuyên gia lựa chọn mức ưu tiên số Java ứng dụng rộng rãi trở thành ngôn ngữ lập trình ưa chuộng bậc Ở Việt Nam, Java phát triển doanh nghiệp sử dụng Java sản phẩm Game, phần mềm, ngân hàng, thiết bị cầm tay, ứng dụng web,…Những chuyên gia thành thạo ngôn ngữ đứng trước săn đón hàng trăm nghìn việc làm hội thăng tiến Tập giảng xây dựng gồm có chương trình bày chi tiết lập trình Java bản, bám sát theo khung chương trình mơn lập trình Java Trường Đại học Sư phạm Kỹ thuật Nam Định Nhằm trang bi cho sinh viên kiến thức lập trình Java tạo tảng để sinh viên tiếp cận với ngôn ngữ học học phần khác chương trình thực tập lập trình thiết bị di động Tập giảng sử dụng làm tài liệu giảng dạy cho giáo viên, giảng viên tài liệu học tập cho học sinh – sinh viên thuộc Trường Đại học Sư phạm Kỹ thuật Nam Định Ngồi làm tài liệu tham khảo cho đối tượng quan tâm đến lập trình Java NHĨM TÁC GIẢ i MỤC LỤC CHƢƠNG 1: LẬP TRÌNH JAVA CƠ BẢN 1.1 Giới thiệu Java cài đặt .1 1.1.1 Lịch sử Java 1.1.2 Đặc trưng Java 1.1.3 Các kiểu chương trình Java 1.1.4 Máy ảo Java 1.1.5 Bộ công cụ phát triển JDK 1.1.6 Cài đặt JDK 11 1.2 Ngơn ngữ lập trình Java 17 1.2.1 Mở đầu lập trình với Java 17 1.2.2 Cấu trúc chương trình Java 17 1.2.3 Kiểu liệu sở, hằng, biến 20 1.2.4 Kiểu liệu Mảng (Array) 27 1.2.5 Toán tử biểu thức 29 1.2.6 Các cấu trúc điều khiển .32 1.2.7 Hàm – Phương thức (Function – Method) 38 1.2.8 Nhập xuất liệu 39 Câu hỏi tập chƣơng 43 CHƢƠNG 2: LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG TRONG JAVA 45 2.1 Giới thiệu lập trình hƣớng đối tƣợng 45 2.2 Trừu tƣợng hoá liệu 47 2.3 Lớp định nghĩa lớp Java 50 2.4 Đối tƣợng 62 2.5 Thiết lập hủy .63 2.5.1 Thiết lập 63 2.5.2 Hủy 65 2.6 Các đặc tính lớp 66 2.6.1 Tính bền vững .66 ii 2.6.2 Tính thừa kế 68 2.6.3 Tính đa thừa kế 72 2.6.4 Tính đa hình 73 2.6.6 Lớp trừu tượng 76 2.7 Xử lý ngoại lệ 80 Câu hỏi tập chƣơng 84 CHƢƠNG 3: CÁC GĨI VÀ LẬP TRÌNH VÀO RA .92 3.1 Các gói Java 92 3.1.1 Giới thiệu 92 3.1.2 Các giao diện 92 3.1.3 Các gói 95 3.1.4 Gói điều khiển truy xuất 98 3.1.5 Gói Java.lang 99 3.2 Các dòng (Stream) 115 3.3 Gói Java.io 115 3.3.1 Lớp InputStream .115 3.3.2 Lớp OutputStream 117 3.3.3 Vào mảng byte 117 3.3.4 Vào tập tin 119 3.3.5 Nhập xuất lọc 121 3.3.6 Vào có sử dụng đệm 122 3.3.7 Lớp Reader Writer .125 3.3.8 Nhập xuất chuỗi 125 3.3.9 Lớp PrinterWriter .128 3.3.10 Giao diện DataInput 129 3.3.11 Giao diện DataOutput .129 3.3.12 Lớp RandomAccessFile 130 3.4 Gói java.awt.print 132 Câu hỏi tập chƣơng 133 iii CHƢƠNG 4: LẬP TRÌNH ĐỒ HOẠ AWT 136 4.1 Giới thiệu AWT 136 4.2 Container (vật chứa) 137 4.2.1 Giới thiệu 137 4.2.2 Frame 137 4.2.3 Panel 138 4.2.4 Dialog 139 4.3 Thành phần (Component) .140 4.3.1 Giới thiệu 140 4.3.2 Nhãn 140 4.3.3 Ô văn 142 4.3.4 Vùng văn 144 4.3.5 Nút 145 4.3.6 Checkbox Radio Button 147 4.3.7 Danh sách lựa chọn 149 4.4 Quản lý cách trình bày 151 4.4.1 FlowLayout manager .152 4.4.2 BorderLayout Manager 153 4.4.3 Card Layout Manager .154 4.4.4 GridLayout Manager 156 4.4.5 GridBagLayout Manager 158 4.5 Xử lý kiện 163 4.6 Thực đơn 169 Câu hỏi tập chƣơng 173 CHƢƠNG 5: JAVA APPLET VÀ SWING 175 5.1 Java Applet .175 5.1.1 Giới thiệu Applet 175 5.1.2 Cấu trúc Applet 175 5.1.3 Chu trình sống Applet 178 iv 5.1.4 Truyền tham số cho Applet .179 5.1.5 Lớp Graphics 181 5.1.6 Điều khiển màu 190 5.1.7 Điều khiển Font 191 5.1.8 Lớp FontMetrics .192 5.1.9 Chọn chế độ để vẽ 196 5.2 Java Swing 198 5.2.1 Giới thiệu Swing 198 5.2.2 Các biểu tượng nhãn 199 5.2.3 Các trường văn 200 5.2.4 Nút nhấn 201 5.2.5 Lớp JButton 202 5.2.6 Hộp kiểm tra .202 5.2.7 Radio Button .203 5.2.8 ComboBox 203 5.2.9 Tabbed Pane 203 5.2.10 Scroll Pane 204 5.2.11 Cây 205 5.2.12 Bảng 207 Câu hỏi tập chƣơng 210 CHƢƠNG 6: LẬP TRÌNH ĐA LUỒNG 224 6.1 Giới thiệu lập trình luồng 224 6.2 Luồng đa luồng 224 6.3 Tạo quản lý luồng .225 6.4 Vòng đời luồng 228 6.5 Trạng thái luồng phƣơng thức lớp Thread .228 6.6 Thời gian biểu luồng 229 6.7 Luồng chạy ngầm 231 6.8 Đa luông với Applet .232 v 6.9 Nhóm luồng 233 6.10 Sự đồng luồng 234 6.10.1 Đồng mã 235 6.10.2 Sử dụng khối đồng (Synchronized Block) 237 6.10.3 Ưu điểm phương thức đồng 240 6.11 Cơ chế đợi thông báo 240 6.12 Khoá chết (Deadlock) 244 6.13 Thu dọn rác 246 Câu hỏi tập chƣơng 250 TÀI LIỆU THAM KHẢO 254 vi DANH MỤC CÁC HÌNH VẼ Bảng 1.1 Bảng ký hiệu ghi .18 Bảng 1.2 Các từ khóa Java 20 Bảng 1.3 Các kiểu số nguyên 21 Bảng 1.4 Các phép toán kiểu số nguyên .21 Bảng 1.5 Các loại số thực 22 Bảng 1.6 Các phép toán kiểu số thực 22 Bảng 1.7 Giá trị mặc định 23 Bảng 1.8 Hằng số nguyên 25 Bảng 1.9 Các số thực 26 Bảng 1.10 Tốn tử ngơi 30 Bảng 1.11 Danh sách toán tử đơn 30 Bảng 1.12 Danh sách toán tử gán 31 Bảng 1.13 Danh sách toán tử kiểu số thực .31 Bảng 1.14 Danh sách phép toán logic 31 Bảng 2.1 Một ví dụ hai phương pháp giải OOP Structured .47 Bảng 2.2 Sử dụng bổ nghĩa 54 Bảng 2.3 Các exception thường gặp 83 Bảng 2.4 Các phương thức thông dụng Throwable 84 Bảng 3.1 Truy cập đến thành phần lớp 99 Bảng 3.2 Các lớp trình bao bọc cho kiểu liệu nguyên thủy 99 Bảng 3.3 Lớp Runtime .110 Bảng 3.4 Lớp System 111 Bảng 3.5 Lớp Object .114 Bảng 3.6 Các phương thức lớp InputStream .116 Bảng 3.7 Các phương thức lớp OutputStream 117 Bảng 3.8 Các phương thức giao diện DataInput 129 Bảng 3.9 Các phương thức giao diện DataOutput 130 Bảng 4.1 Các phương thức Label 141 vii Bảng 4.2 Các phương thức TextField 143 Bảng 4.3 Các phương thức TextArea 144 Bảng 4.4 Các biến thành viên lớp GridBagConstraints 159 Bảng 4.5 Các biến thành viên liệu tĩnh biến fill 159 Bảng 4.6 kiện AWT 164 Bảng 5.1 Các phương thức applet 176 Bảng 5.2 Phạm vi giá trị thành phần màu .190 Bảng 5.3 Các giá trị RGB 190 Bảng 5.4 Các màu thường gặp 191 Bảng 5.5 Các lớp thành phần Swing 199 Bảng 5.6 Các hàm sử dụng JLabel 200 Bảng 5.7 Các số 205 Bảng 6.1 Các phương thức lớp luồng 229 viii DANH MỤC CÁC HÌNH VẼ Hình 1.1 Cách biên dịch truyền thống Hình 1.2 Dịch chương trình Java Hình 1.3 Trang web tải công cụ Java .12 Hình 1.4 Biểu tượng Java Download 12 Hình 1.5 Lựa chọn quyền 12 Hình 1.6 Bộ JDK cho Windows 64 bit 12 Hình 1.7 Màn hình cài đặt 13 Hình 1.8 Màn hình Custom Setup .13 Hình 1.9 Màn hình Description Folder 13 Hình 1.10 Màn hình Description Folder 14 Hình 1.11 Đường dẫn thư mục cài đặt Java 14 Hình 1.12 Màn hình Computer Properties 15 Hình 1.13 Màn hình System Properties .15 Hình 1.14 Màn hình Environment Variables .16 Hình 1.15 Màn hình Edit System Variable 16 Hình 1.16 Màn hình cửa sổ run 16 Hình 1.17 Màn hình Command Prompt 16 Hình 3.1 Minh họa khái niệm String Pool .101 Hình 3.2 Kết chạy ví dụ 3.22 112 Hình 3.3 Kết chạy ví dụ 3.23 114 Hình 3.4 Kết chạy ví dụ 3.25 119 Hình 3.5 Kết chạy ví dụ 3.26 121 Hình 3.6 Kết chạy ví dụ 3.27 125 Hình 3.7 Kết chạy ví dụ 3.28 127 Hình 3.8 Kết chạy ví dụ 3.29 128 Hình 3.9 Kết chạy ví dụ 3.30 132 Hình 4.1 Hệ thống phân cấp lớp AWT .137 Hình 4.2 Kết chạy ví dụ 4.1 138 ix Hình 4.3 Kết chạy ví dụ 4.2 139 Hình 4.4 Các lớp thành phần .140 Hình 4.5 Kết chạy ví dụ 4.3 142 Hình 4.6 Kết chạy ví dụ 4.4 143 Hình 4.7 Kết chạy ví dụ 4.5 145 Hình 4.8 Kết chạy ví dụ 4.6 147 Hình 4.9 Kết chạy ví dụ 4.7 149 Hình 4.10 Kết chạy ví dụ 4.8 151 Hình 4.11 Kết chạy ví dụ 4.9 153 Hình 4.12 BorderLayout 154 Hình 4.13 Kết chạy ví dụ 4.10 156 Hình 4.14 Kết chạy ví dụ 4.10 158 Hình 4.15 Kết chạy ví dụ 4.12 162 Hình 4.16 Kết chạy ví dụ 4.13 167 Hình 4.17 Gói Event 167 Hình 4.18 Event Listener 168 Hình 4.19 Action Listener 168 Hình 4.20 Item Listener .168 Hình 4.21 Window Listener 169 Hình 4.22 Các Component 169 Hình 4.23 Kết chạy ví dụ 4.14 172 Hình 4.24 Pop-up menu .173 Hình 5.1 Kết chạy ví dụ 5.1 178 Hình 5.2 Chu trình sống applet 178 Hình 5.3 Kết chạy ví dụ 5.2 180 Hình 5.4 Kết chạy ví dụ 5.3 184 Hình 5.5 Kết chạy ví dụ 5.4 188 Hình 5.6 Kết chạy ví dụ 5.5 189 Hình 5.7 Kết chạy ví dụ 5.6 194 x os write(s.charAt(i)); os.close(); // mở file abc.txt để đọc FileInputStream is = new FileInputStream("abc.txt"); int ibyts = is.available( ); System.out.println("Input Stream has " + ibyts + " available bytes"); byte ibuf[ ] = new byte[ibyts]; int byrd = is.read(ibuf, 0, ibyts); System.out.println("Number of Bytes read are: " + byrd); System.out.println("They are: " + new String(ibuf)); is.close(); File fl = new File("abc.txt"); fl.delete(); } } Kết thực chương trình: Hình 3.5 Kết chạy ví dụ 3.26 3.3.5 Nhập xuất lọc Một „Filter‟ kiểu dòng thay đổi cách xử lý dịng có Các lớp, dòng nhập xuất lọc java giúp ta lọc vào/ra theo số cách Về bản, lọc dùng để thích nghi dịng theo nhu cầu chương trình cụ thể 121 Bộ lọc nằm dịng nhập dịng xuất Nó thực xử lý q trình byte truyền từ đầu vào đến đầu Các lọc ghép với đầu lọc trở thành đầu vào lọc Lớp FilterInputStream Đây lớp trừu tượng Nó cha tất lớp dòng nhập lọc Lớp cung cấp khả tạo dịng từ dịng khác Một dịng đọc đưa kết cho dòng khác Biến „in‟ sử dụng để làm điều Biến dùng để trì đối tượng tách biệt lớp InputStream Lớp FilterInputStream thiết kế cho có khả kết chuỗi nhiều lọc Để thực điều dùng vài tầng lồng Mỗi lớp truy cập đầu lớp trước với trợ giúp biến „in‟ Lớp FilterOutputStream Lớp dạng bổ trợ cho lớp FilterInputStream Nó lớp cha tất lớp dòng xuất lọc Lớp tương tự lớp FilterInputStream chỗ trì đối tượng lớp OutputStream làm biến „out‟ Dữ liệu ghi vào lớp sửa đổi theo nhu cầu để thực tác vụ lọc sau chuyển tới đối tượng OutputStream 3.3.6 Vào có sử dụng đệm Vùng đệm kho lưu trữ liệu Chúng ta lấy liệu từ vùng đệm thay quay trở lại nguồn ban đầu liệu Java sử dụng chế nhập/xuất có lập vùng đệm để tạm thời lập cache liệu vào/ra dòng Nó giúp chương trình đọc/ghi lượng liệu nhỏ khơng ảnh hưởng lớn đến hiệu chung hệ thống Trong thực vào có vùng đệm, số lượng byte lớn đọc thời điểm, lưu trữ vùng đệm nhập Khi chương trình đọc dịng nhập thay dịng vào để đọc đọc từ vùng đệm nhập Tiến trình lập vùng đệm thực tương tự liệu chương trình ghi dịng ra, liệu lưu trữ vùng đệm Dữ liệu lưu trữ đến vùng đệm đầy dòng thực xả trống (flush) Cuối liệu vùng đệm chuyển đến dòng Các lọc hoạt động vùng đệm Vùng đệm đặt chương trình dịng vùng đệm Lớp BufferedInputStream Lớp tự động tạo trì vùng đệm để hỗ trợ thao tác vào Nhờ chương trình đọc liệu từ dịng byte mà khơng ảnh hưởng đến tốc độ 122 thực hệ thống Bởi lớp „BufferedInputStream‟ lọc, nên áp dụng cho số đối tượng định lớp InputStream phối hợp với tập tin đầu vào khác Lớp sử dụng vài biến để thực chế lập vùng đệm đầu vào Các biến khai báo protected chương trình khơng thể truy cập trực tiếp Lớp định nghĩa haiphương thức thiết lập Một cho phép định kích cỡ vùng đệm nhập phương thức thiết lập khơng Nhưng hai phương thức thiết lập tiếp nhận đối tượng lớp InputStream làm đối số Lớp định nghĩa chồng phương thức truy cập mà InputStream cung cấp khơng đưa thêm phương thức Lớp BufferedOutputStream Lớp định nghĩa hai phương thức thiết lập, cho phép định kích cỡ vùng đệm xuất, sử dụng kích cỡ vùng đệm ngầm định Lớp định nghĩa chồng tất phương thức OutputStream không đưa thêm phương thức Ví dụ3.27: Dưới mơ tả cách dùng 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 thực chương trình trên: Hình 3.6 Kết chạy ví dụ 3.27 3.3.7 Lớp Reader Writer Đây lớp trừu tượng, lớp cha tất lớp đọc ghi dòng ký tự Unicode Java 1.1 giới thiệu lớp Lớp Reader Lớp hỗ trợ phương thức: read( ) reset( ) skip( ) mark( ) markSupported( ) close( ) Lớp hỗ trợ phương thức „ready()‟ Phương thức trả giá trị kiểu boolean, xem việc đọc có tiếp tục hay khơng Lớp Writer Lớp hỗ trợ phương thức: write( ) flush( ) close( ) 3.3.8 Nhập xuất chuỗi Các lớp „CharArrayReader‟ „CharArrayWriter‟ tương tự lớp ByteArrayInputStream ByteArrayOutputStream chỗ chúng hỗ trợ nhập/xuất từ vùng đệm Các lớp CharArrayReader CharArrayWriter hỗ trợ nhập/ xuất ký tự bit 125 CharArrayReader bổ sung thêm phương pháp nào, dùng phương thức mà lớp Reader cung cấp Lớp CharArrayWriter bổ sung thêm phương thức sau phương thức lớp Writer reset( ) Thiết lập lại vùng đệm size( ) trả kích cỡ hành vùng đệm toCharArray( ) Trả mảng ký tự vùng đệm xuất toString( ) Chuyển đổi vùng đệm xuất thành đối tượng String writeto( ) Ghi vùng đệm luồng xuất khác Lớp StringReader trợ giúp đọc ký tự từ chuỗi Nó khơng bổ sung phương thức phương thức lớp Reader Lớp StringWriter trợ giúp ghi ký tự đối tượng StringBuffer Lớp bổ sung hai phương thức có tên „getBuffer( )‟ „toString()‟ Phương thức „getBuffer( )‟ trả đối tượng StringBuffer tương ứng với vùng đệm xuất, phương thức toString( ) trả chuỗi chứa vùng đệm xuất Ví dụ 3.28: Dưới thự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