1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình Java: Phần 1 - ĐH Sư phạm kỹ thuật Nam Định

146 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài giảng lập trình Java: phần 1 - ĐH Sư phạm kỹ thuật Nam Định
Trường học Đại học Sư phạm Kỹ thuật Nam Định
Chuyên ngành Lập trình Java
Thể loại Tài liệu giảng dạy
Thành phố Nam Định
Định dạng
Số trang 146
Dung lượng 1,39 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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!

Trang 1

LỜI NÓI ĐẦU

Hiện nay có nhiều ngôn ngữ lập trình được sử dụng để viết các ứng dụng trên máy tính như: C++, C#, VB, VB.Net… Mỗi ngôn ngữ đều có một thế mạnh riêng, nếu biết lựa chọn một ngôn ngữ phù hợp để xây dựng ứng dụng sẽ giúp cho các chuyên gia lập trình tích kiệm được thời gian, công sức và giúp xử lý kỹ thuật lập trình đơn giản

và thuận tiện hơn

Java là ngôn ngữ lập trình hướng đối tượng thuần túy với nhiều đặc trưng ưu việt

so với các ngôn ngữ lập trình hướng đối tượng khác như tính độc lập với nên, Tính Đa nhiệm - đa luồng tính bảo mật, khả năng đóng gói, giao tiếp…

Khác với các ngôn ngữ lập trình hướng đối tượng khác như c++ hay c# là ngay

từ khi ra đời mục tiêu của java là phát triển một ngôn ngữ đơn giản, nhỏ nhẹ và có thể chạy trên nhiều môi trường khác nhau, do đó Java đặc biệt thích hợp để viết chương trình cho các ứng dụng trên mạng, trên các thiết bị di động, …, việc việt các ứng dụng này bằng Java dễ dàng hơn nhiều so với các ngôn ngữ khác

Chính vì vậy trong rất nhiều ngôn ngữ lập trình đang được các chuyên gia sử dụng để viết nên các ứng dụng trên máy tính, trong doanh nghiệp, trên các thiết bị cầm tay Java luôn là ngôn ngữ được các chuyên gia lựa chọn ở mức ưu tiên số 1 Java đã được ứng dụng rộng rãi và trở thành một ngôn ngữ lập trình được ưa chuộng bậc nhất hiện nay Ở Việt Nam, Java đang rất phát triển các doanh nghiệp đã sử dụng Java trong các 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ữ này luôn đứng trước sự săn đón của hàng trăm nghìn việc làm và cơ hội thăng tiến

Tập bài giảng này được xây dựng gồm có 6 chương trình bày chi tiết về lập trình Java cơ bản, bám sát theo khung chương trình môn lập trình Java của Trường Đại học

Sư phạm Kỹ thuật Nam Định Nhằm trang bi cho sinh viên những kiến thức cơ bản về lập trình Java tạo nền tảng để sinh viên tiếp cận với ngôn ngữ này cũng như học các học phần khác trong chương trình như thực tập lập trình trên thiết bị di động Tập bài giảng được sử dụng làm tài liệu giảng dạy cho các giáo viên, giảng viên và 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 Ngoài ra có thể làm tài liệu tham khảo cho mọi đối tượng quan tâm đến lập trình Java

Trang 2

MỤC LỤC

CHƯƠNG 1: LẬP TRÌNH JAVA CƠ BẢN 1

1.1 Giới thiệu về Java và cài đặt 1

1.1.1 Lịch sử Java 1

1.1.2 Đặc trưng của Java 1

1.1.3 Các kiểu chương trình Java 5

1.1.4 Máy ảo Java 6

1.1.5 Bộ công cụ phát triển JDK 8

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 dữ liệu cơ sở, hằng, biến 20

1.2.4 Kiểu dữ liệu Mảng (Array) 27

1.2.5 Toán tử và 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 dữ liệu 39

Câu hỏi và bài tập chương 1 43

CHƯƠNG 2: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TRONG JAVA 45

2.1 Giới thiệu về lập trình hướng đối tượng 45

2.2 Trừu tượng hoá dữ liệu 47

2.3 Lớp và định nghĩa lớp trong Java 50

2.4 Đối tượng 62

2.5 Thiết lập và hủy 63

2.5.1 Thiết lập 63

2.5.2 Hủy 65

2.6 Các đặc tính của lớp 66

2.6.1 Tính bền vững 66

Trang 3

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 và bài tập chương 2 84

CHƯƠNG 3: CÁC GÓI VÀ LẬP TRÌNH VÀO RA 92

3.1 Các gói trong 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 và đ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 ra mảng byte 117

3.3.4 Vào ra tập tin 119

3.3.5 Nhập xuất lọc 121

3.3.6 Vào ra có sử dụng bộ đệm 122

3.3.7 Lớp Reader và 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 và bài tập chương 3 133

Trang 4

CHƯƠNG 4: LẬP TRÌNH ĐỒ HOẠ AWT 136

4.1 Giới thiệu về 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 bản 142

4.3.4 Vùng văn bản 144

4.3.5 Nút 145

4.3.6 Checkbox và 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ý các sự kiện 163

4.6 Thực đơn 169

Câu hỏi và bài tập chương 4 173

CHƯƠNG 5: JAVA APPLET VÀ SWING 175

5.1 Java Applet 175

5.1.1 Giới thiệu về Applet 175

5.1.2 Cấu trúc của một Applet 175

5.1.3 Chu trình sống của một Applet 178

Trang 5

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 về Swing 198

5.2.2 Các biểu tượng và nhãn 199

5.2.3 Các trường văn bả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 và bài tập chương 5 210

CHƯƠNG 6: LẬP TRÌNH ĐA LUỒNG 224

6.1 Giới thiệu về lập trình luồng 224

6.2 Luồng và đa luồng 224

6.3 Tạo và quản lý luồng 225

6.4 Vòng đời của luồng 228

6.5 Trạng thái của luồng và các phương thức của 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

Trang 6

6.9 Nhóm luồng 233

6.10 Sự đồng bộ luồng 234

6.10.1 Đồng bộ mã 235

6.10.2 Sử dụng khối đồng bộ (Synchronized Block) 237

6.10.3 Ưu điểm của các phương thức đồng bộ 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 và bài tập chương 6 250

TÀI LIỆU THAM KHẢO 254

Trang 7

DANH MỤC CÁC HÌNH VẼ

Bảng 1.1 Bảng các ký hiệu ghi chú 18

Bảng 1.2 Các từ khóa củ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 trê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 trê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 hằng số thực 26

Bảng 1.10 Toán tử 2 ngôi 30

Bảng 1.11 Danh sách các toán tử đơn 30

Bảng 1.12 Danh sách các toán tử gán 31

Bảng 1.13 Danh sách các toán tử trên kiểu số thực 31

Bảng 1.14 Danh sách các phép toán logic 31

Bảng 2.1 Một ví dụ về hai phương pháp giải quyết OOP và Structured 47

Bảng 2.2 Sử dụng các 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 của Throwable 84

Bảng 3.1 Truy cập đến các thành phần của lớp 99

Bảng 3.2 Các lớp trình bao bọc cho các kiểu dữ 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 của 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 của giao diện DataInput 129

Bảng 3.9 Các phương thức của giao diện DataOutput 130

Bảng 4.1 Các phương thức của Label 141

Trang 8

Bảng 4.2 Các phương thức của TextField 143

Bảng 4.3 Các phương thức của TextArea 144

Bảng 4.4 Các biến thành viên của lớp GridBagConstraints 159

Bảng 4.5 Các biến thành viên dữ liệu tĩnh của biến fill 159

Bảng 4.6 các sự kiện của AWT 164

Bảng 5.1 Các phương thức của một applet 176

Bảng 5.2 Phạm vi giá trị của các 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 của JLabel 200

Bảng 5.7 Các hằng số 205

Bảng 6.1 Các phương thức của một lớp luồng 229

Trang 9

DANH MỤC CÁC HÌNH VẼ

Hình 1.1 Cách biên dịch truyền thống 3

Hình 1.2 Dịch chương trình Java 3

Hình 1.3 Trang web tải bộ công cụ Java 12

Hình 1.4 Biểu tượng Java Download 12

Hình 1.5 Lựa chọn bản quyền 12

Hình 1.6 Bộ JDK cho Windows bản 64 bit 12

Hình 1.7 Màn hình cài đặt đầu tiên 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 của 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 của String Pool 101

Hình 3.2 Kết quả chạy ví dụ 3.22 112

Hình 3.3 Kết quả chạy ví dụ 3.23 114

Hình 3.4 Kết quả chạy ví dụ 3.25 119

Hình 3.5 Kết quả chạy ví dụ 3.26 121

Hình 3.6 Kết quả chạy ví dụ 3.27 125

Hình 3.7 Kết quả chạy ví dụ 3.28 127

Hình 3.8 Kết quả chạy ví dụ 3.29 128

Hình 3.9 Kết quả chạy ví dụ 3.30 132

Hình 4.1 Hệ thống cây phân cấp lớp AWT 137

Hình 4.2 Kết quả chạy ví dụ 4.1 138

Trang 10

Hình 4.3 Kết quả 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 quả chạy ví dụ 4.3 142

Hình 4.6 Kết quả chạy ví dụ 4.4 143

Hình 4.7 Kết quả chạy ví dụ 4.5 145

Hình 4.8 Kết quả chạy ví dụ 4.6 147

Hình 4.9 Kết quả chạy ví dụ 4.7 149

Hình 4.10 Kết quả chạy ví dụ 4.8 151

Hình 4.11 Kết quả chạy ví dụ 4.9 153

Hình 4.12 BorderLayout 154

Hình 4.13 Kết quả chạy ví dụ 4.10 156

Hình 4.14 Kết quả chạy ví dụ 4.10 158

Hình 4.15 Kết quả chạy ví dụ 4.12 162

Hình 4.16 Kết quả 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 quả chạy ví dụ 4.14 172

Hình 4.24 Pop-up menu 173

Hình 5.1 Kết quả chạy ví dụ 5.1 178

Hình 5.2 Chu trình sống của một applet 178

Hình 5.3 Kết quả chạy ví dụ 5.2 180

Hình 5.4 Kết quả chạy ví dụ 5.3 184

Hình 5.5 Kết quả chạy ví dụ 5.4 188

Hình 5.6 Kết quả chạy ví dụ 5.5 189

Hình 5.7 Kết quả chạy ví dụ 5.6 194

Trang 11

Hình 5.8 Kết quả chạy ví dụ 5.7 196

Hình 5.9 Kết quả chạy ví dụ 5.8 198

Hình 6.1 Kết quả thực hiện ví dụ 6.2 227

Hình 6.2 Vòng đời của luồng 228

Hình 6.3 Kết quả chạy ví dụ 6.3 231

Hình 6.4 Kết quả chạy ví dụ 6.4 233

Hình 6.5 Kết quả chạy ví dụ 6.5 237

Hình 6.6 Kết quả hiển thị của ví dụ 6.5 không có sự đồng bộ 237

Hình 6 7 Kết quả sau mỗi lần kích chuột 243

Hình 6.8 Kết quả thực hiện ví dụ 6.8 246

Hình 6 9 Kết quả chạy ví dụ 6.9 249

Trang 12

CHƯƠNG 1: LẬP TRÌNH JAVA CƠ BẢN 1.1 Giới thiệu về Java và cài đặt

đã xây dựng một ngôn ngữ lập trình mới đặt tên là Oaktương tự như C++ nhưng loại

bỏ một số tính năng nguy hiểmcủa C++ và có khả năng chạy trên nhiều nền phần cứng khácnhau Cùng lúc đó WorldWide Web bắt đầu phát triển và Sun đãthấy được tiềm năng của ngôn ngữ Oak nên đã đầu tư cải tiếnvà phát triển Sau đó không lâu ngôn ngữ mới với tên gọi làJava ra đời và được giới thiệu năm 1995

Đến quý II năm 1995, Sun Microsystems công bố chính thức Java và nó trở thành một công cụ mạnh mẽ cho việc phát triển các ứng dụng trên Internet

Java được xây dựng chủ yếu trong bộ công cụ phát triển JDK (Java Development Kit) nó gồm các trình biên dịch, thông dịch, giúp đỡ, soạn tài liệu, thư viện chuẩn… sau đó các nhà phát triển phần mềm đã xây dựng thêm rất nhiều nhánh mới như Java Mail (Java-Thư tín), Java TAPI (Java-Viễn thông)…

Bắt đầu với JDK 1.0 vào 1995, đến năm 1996 Sun đưa ra phiên bản JDK 1.1, năm 1998 ra đời phiên bản JDK 1.2 và hiện nay đã có phiên bản JDK 1.7

Java là tên gọi của một hòn đảo ở Indonexia, Đây là nơinhóm nghiên cứu phát triển đã chọn để đặt tên cho ngôn ngữlập trình Java trong một chuyến đi tham quan và làm việc trênhòn đảo này Hòn đảo Java này là nơi rất nổi tiếng với nhiềukhu vườn trồng cafe, đó chính là lý do chúng ta thường thấybiểu tượng ly cafe trong nhiều sản phẩm phần mềm, công cụ lậptrình Java của Sun cũng như một số hãng phần mềm khác đưara

1.1.2 Đặc trưng của Java

 Đơn giản

Trang 13

 Hướng đối tượng

b) Hướng đối tượng

Java được thiết kế xoay quanh mô hình hướng đối tượng Vì vậy trong Java, tiêu điểm là dữ liệu và các phương pháp thao tác lên dữ liệu đó Dữ liệu và các phương pháp mô tả trạng thái và cách ứng xử của một đối tượng trong Java

Tính độc lập ở mức nhị phân, một chương trình đã biên dịch có thể chạy trên nhiều nền (phần cứng, hệ điều hành) khác mà không cần dịch lại mã nguồn Tuy vậy cần có phần mềm máy ảo Java (sẽ đề cập đến ở phần sau) hoạt động như một trình thông dịch tại máy thực thi

Trang 14

Hình 1.1 Cách biên dịch truyền thống

Đối với các chương trình viết bằng C, C++ hoặc một ngôn ngữ nào khác, trình biên dịch sẽ chuyển tập lệnh thành mã máy (Machine code),hay lệnh của bộ vi xử lý Những lệnh này phụ thuộc vào CPU hiện tại trên máy bạn Nên khi muốn chạy trên loại CPU khác, chúng ta phải biên dịch lại chương trình Hình 1.2 thể hiện quá trình để thực thi chương trình viết bằng C++ trên các loại máy khác nhau

Hình 1.2 Quá trình thực thi chương trình viết bằng Java trên các loại máy khác nhau

Môi trường phát triển của Java được chia làm hai phần: Trình biên dịch và trình thông dịch Không như C hay C++, trình biên dịch của Java chuyển mã nguồn thành dạng bytecode độc lập với phần cứng mà có thể chạy trên bất kỳ CPU nào

Nhưng để thực thi chương trình dưới dạng bytecode, tại mỗi máy cần phải có trình thông dịch của Java hay còn gọi là máy ảo Java Máy ảo Java chuyển bytecode thành mã lệnh mà CPU thực thi được

d) Mạnh mẽ

Java là ngôn ngữ yêu cầu chặt chẽ về kiểu dữ liệu Phải khai báo kiểu dữ liệu tường minh khi viết chương trình Java kiểm tra lúc biên dịch và cả trong thời gian thông dịch vì vậy Java loại bỏ một số loại lỗi lập trình nhất định

Hình 1.2 Dịch chương trình Java

Trang 15

Java không sử dụng con trỏ và các phép toán con trỏ Java kiểm tra tất cả các truy nhập đến mảng, chuỗi khi thực thi để đảm bảo rằng các truy nhập đó không ra ngoài giới hạn kích thước Java kiểm tra sự chuyển đổi kiểu dữ liệu từ dạng này sang dạng khác lúc thực thi

Trong các môi trường lập trình truyền thống, lập trình viên phải tự mình cấp phát

bộ nhớ Trước khi chương trình kết thúc thì phải tự giải phóng bộ nhớ đã cấp Vấn đề nảy sinh khi lập trình viên quên giải phóng bộ nhớ đã xin cấp trước đó Trong chương trình Java, lập trình viên không phải bận tâm đến việc cấp phát bộ nhớ Quá trình cấp phát, giải phóngđược thực hiện tự động, nhờ dịch vụ thu nhặt những đối tượng không còn sử dụng nữa (garbage collection).Cơ chế bẫy lỗi của Java giúp đơn giản hóa quá trình xử lý lỗi và hồi phục sau lỗi

e) Bảo mật

Viruses là nguyên nhân gây ra sự lo lắng trong việc sử dụng máy tính Trước khi

có Java, các lập trình viên phải quétVirus các tệp trước khi tải về hay thực hiện chúng Thông thường việc này cũng không loại trừ hoàn toàn Virus Ngoài ra chương trình khi thực thi có khả năng tìm kiếm và đọc các thông tin nhạy cảm trên máy của người

sử dụng mà người sử dụng không hề hay biết

Java cung cấp một môi trường quản lý thực thi chương trình Nó cho rằng không

có một đoạn mã nào là an toàn cả Vì vậy Java không chỉ là ngôn ngữ lập trình thuần tuý mà còn cung cấp nhiều mức để kiểm soát tính an toàn khi thực thi chương trình

Ở lớp đầu tiên, dữ liệu và các phương thức được đóng gói bên trong lớp Chúng chỉ được truy xuất thông qua các giao diện mà lớp cung cấp Java không hỗ trợ con trỏ

vì vậy không cho phép truy xuất bộ nhớ trực tiếp Nó cũng ngăn chặn không cho truy xuất thông tin bên ngoài kích thước của mảng bằng kỹ thuật tràn và cũng cung cấp kỹ thuật dọn rác trong bộ nhớ Các đặc trưng này tạo cho Java an toàn tối đa và có khả năng cơ động cao

Trong lớp thứ hai, trình biên dịch kiểm soát để đảm bảo mã là an toàn, và tuân theo các nguyên tắc của Java

Lớp thứ ba được đảm bảo bởi trình thông dịch Chúng kiểm tra xem bytecode có đảm bảo các qui tắc an toàn trước khi thực thi

Lớp thứ tư kiểm soát việc nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới hạn truy xuất trước khi nạp vào hệ thống

f) Phân tán

Trang 16

Java có thể dùng để xây dựng các ứng dụng có thể làm việc trên nhiều phần cứng, hệ điều hành và giao diện đồ họa Java được thiết kế hỗ trợ cho các ứng dụng chạy trên mạng Vì vậy chúng được sử dụng rộng rãi như là công cụ phát triển trên Internet, nơi sử dụng nhiều nền tảng khác nhau

g) Đa luồng

Chương trình Java đa luồng(Multithreading) để thực thi các công việc đồng thời Chúng cũng cung cấp giải pháp đồng bộ giữa các luồng Đặc tính hỗ trợ đa luồngnày cho phép xây dựng các ứng dụng trên mạng chạy hiệu quả

h) Động

Java được thiết kế như một ngôn ngữ động để đáp ứng cho những môi trường

mở Các chương trình Java chứa rất nhiều thông tin thực thi nhằm kiểm soát và truy nhập đối tượng lúc chạy Điều này cho phép khả năng liên kết động mã

1.1.3 Các kiểu chương trình Java

Chúng ta có thể xây dựng các loại chương trình Java như sau:

a) Applets

Applet là chương trình được tạo ra để sử dụng trên Internet thông qua các trình duyệt hỗ trợ Java như IE hay Netscape Bạn có thể dùng Java để xây dựng Applet Applet được nhúng bên trong trang Web Khi trang Web hiển thị trong trình duyệt, Applet sẽ được tải về và thực thi tại trình duyệt

Trang 17

dùng để xử lý dữ liệu, thực thi các giao dịch và thường được thực thi thông qua máy chủ Web

e) Ứng dụng cơ sở dữ liệu

Các ứng dụng này sử dụng JDBC API để kết nối tới cơ sở dữ liệu Chúng có thể

là Applet hay ứng dụng, nhưng Applet bị giới hạn bởi tính bảo mật

1.1.4 Máy ảo Java

Máy ảo là một phần mềm mô phỏng một máy tính thật Nó có tập hợp các lệnh logic để xác định các hoạt động của máy tính và có một hệ điều hành ảo Người ta có thể xem nó như một máy tính thật Nó thiết lập các lớp trừu tượng cho: Phần cứng bên dưới, hệ điều hành, mã đã biên dịch

Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không phụ thuộc vào phần cứng cụ thể Trình thông dịch trên mỗi máy sẽ chuyển tập lệnh này thành chương trình thực thi Máy ảo tạo ra một môi trường bên trong để thực thi các lệnh bằng cách:

 Các “Frame” chứa các trạng thái của các phương thức

 Các toán hạng của mã bytecode

 Các tham số truyền cho phương thức

a) Quản lý bộ nhớ và dọn rác

Trong C, C++ hay Pascal người lập trình sử dụng phương pháp trực tiếp để cấp phát và thu hồi bộ nhớ ở vùng “Heap” Heap là vùng bộ nhớ lớn được phân chia cho tất cả các luồng

Trang 18

Để quản lý Heap, bộ nhớ được theo dõi qua các danh sách sau:

 Danh sách các vùng nhớ chưa sử dụng

 Danh sách các vùng đã cấp

Khi có một yêu cầu về cấp phát bộ nhớ, hệ thống xem xét trong danh sách chưa cấp phát để lấy ra khối bộ nhớ đầu tiên có kích cỡ sát nhất với lượng bộ nhớ cần thiết

Kỹ thuật cấp phát này giảm tối thiểu việc phân mảnh của heap

“Coalescing” là kỹ thuật khác cũng giảm thiểu việc phân mảnh của heap bằng

cách gom lại các vùng nhớ chưa dùng liền nhau thành một khối lớn hơn Còn kỹ thuật sắp xếp lại các phần đã dùng để tạo vùng nhớ chưa sử dụng lớn hơn gọi là

“Compaction”

Java sử dụng hai heap riêng biệt cho cấp phát vùng nhớ tĩnh và vùng nhớ động Một heap (heap tĩnh) chứa các định nghĩa về lớp, các hằng và danh sách các phương thức Heap còn lại (heap động) được chia làm hai phần được cấp phát theo hai chiều ngược nhau Một bên chứa đối tượng còn một bên chứa con trỏ trỏ đến đối tượng đó

“Handle” là cấu trúc bao gồm hai con trỏ Một trỏ đến bảng phương thức của đối

tượng, con trỏ thứ hai trỏ đến chính đối tượng đó Chú ý rằng khi “Compaction” cần cập nhật lại giá trị con trỏ của cấu trúc “handle”

Thuật toán dọn rác có thể áp dụng cho các đối tượng đặt trong heap động Khi có yêu cầu về bộ nhớ, trình quản lý heap trước tiên kiểm tra danh sách bộ nhớ chưa cấp phát Nếu không tìm thấy khối bộ nhớ nào phù hợp (về kích cỡ) thì trình dọn rác sẽ được kích hoạt khi hệ thống rỗi Nhưng khi đòi hỏi bộ nhớ cấp bách thì trình dọn rác

sẽ được kích hoạt ngay

Trình dọn rác gọi phương thức finalize của đối tượng trước khi dọn dẹp đối tượng Hàm này sẽ dọn dẹp các tài nguyên bên ngoài như các file đang mở Công việc này không được trình dọn rác thực thi

b) Quá trình kiểm tra file class

Việc kiểm tra được áp dụng cho tất cả các file class sắp được nạp lên bộ nhớ để đảm bảo tính an toàn Trình “Class Loader” sẽ kiểm tra tất cả các file class không thuộc hệ điều hành với mục đích giám sát sự tuân thủ các nghi thức để phát hiện các file class có nguy cơ gây hư hỏng đến bộ nhớ, hệ thống file cục bộ, mạng hoặc hệ điều hành Quá trình kiểm tra sẽ xem xét tổng thể tính nguyên vẹn của một lớp

File class bao gồm ba phần logic là:

 Bytecode

 Thông tin về Class như phương thức, giao diện và các giá trị hằng số được tập hợp trong quá trình biên dịch

Trang 19

 Các thuộc tính về lớp

Các thông tin của file class được xem xét riêng rẽ trong các bảng sau:

 Bảng Field chứa các thuộc tính

 Bảng Method chứa các hàm của class

 Bảng Interface và các hằng số

Quá trình kiểm tra file class được thực hiện ở bốn mức:

 Mức đầu tiên thực hiện việc kiểm tra cú pháp để đảm bảo tính cấu trúc và tính toàn vẹn cú pháp của file class được nạp

 Mức thứ hai sẽ xem xét file class để đảm bảo các file này không vi phạm các nguyên tắc về sự nhất quán ngữ nghĩa

 Mức thứ ba sẽ kiểm tra bytecode Trong bước này sẽ kiểm tra số thông số truyền vào phương thức, khả năng truy xuất sai chỉ số của mảng, chuỗi, biểu thức

 Mức thứ tư sẽ kiểm tra trong thời gian thực thi để giám sát các việc còn lại

mà ba bước trên chưa làm Ví dụ như liên kết tới các lớp khác trong khi thực thi, hay kiểm tra quyền truy xuất Nếu mọi điều thỏa mãn, lớp sẽ được khởi tạo

1.1.5 Bộ công cụ phát triển JDK

Sun Microsystem đưa ra ngôn ngữ lập trình Java qua sản phẩm có tên là Java Development Kit (JDK) Từ khi phát triển phiên bản đầu tiên từ năm 1995 đến nay, bộ công cụ Java đã được phát triển qua nhiều phiên bản và cũng có nhiều sự thay đổi, sau đây là một số phiên bản đã được phát hành:

Trang 20

Java SE 7(còn gọi là Dolphin), được bắt đầu từ tháng 8 năm 2006 và công bố ngày 28 tháng 7 năm 2011

Hiện tại đang phát triển và thử nghiệm bản Java JDK 8

JDK bao gồm Java Plug-In, chúng cho phép chạy trực tiếp Java Applet hay JavaBean bằng cách dùng JRE thay cho sử dụng môi trường thực thi mặc định của trình duyệt

JDK chứa các công cụ sau:

javap [options] classname

Công cụ sinh tài liệu, 'javadoc'

Tiện ích này cho phép ta tạo ra tệp HTML dựa trên các lời giải thích trong mã chương trình (phần nằm trong cặp dấu /* */)

Cú pháp:

Trang 21

javadoc [options] sourcecodename.java

Chương trình tìm lỗi - Debug, „jdb‟

Cú pháp:

jdb [options] sourcecodename.java

hay

jdb -host -password [options] sourcecodename.java

Chương trình xem Applet , „appletviewer‟

Cú pháp:

appletviewer [options] url

Java Core API

Nhân Java API được thay thế bởi phiên bản JFC 1.1

Một số package thông dụng được:

Trang 22

Cung cấp khả năng giao tiếp với máy từ xa Cho phép tạo và kết nối tới Socket hoặc URL

Package này chứa Java DataBase Connectivity (JDBC), dùng để truy xuất cơ sở

dữ liệu quan hệ như Oracle, SQL Server,

Trang 23

Hình 1.3 Trang web tải bộ công cụ Java

Bước 2: Kích chọn biểu tượng Java Download như hình sau:

Hình 1.4 Biểu tượng Java Download

Bước 3: Kích chọn AcceptLicense Agreement

Hình 1.5 Lựa chọn bản quyền

Bước 4: Lựa chọn góijdk-7u45-windows-x64.exe rồi tải về máy như hình sau:

Hình 1.6 Bộ JDK cho Windows bản 64 bit

2) Cài đặt JDK

Sau khi đã tải được file chương trình về máy tính, chạy file chương trình đãdownload được và thực hiện theo các chỉ dẫn của chương trình cho đến khi hoàn thành thì sẽ được chương trình JDK cài trên máy tính

Ví dụ 1.2: Hướng các bước cài đặt JDK cho Windows 7 64 bit

Bước 1: Chạy file jdk-7u45-windows-x64.exe đã tải về máy tính được màn hình Setup như sau:

Trang 24

Hình 1.7 Màn hình cài đặt đầu tiên

Bước 2: Kích chuột vào Next để tiếp tục cài đặt, khi đó được màn hình custom setup như hình sau:

Hình 1.8 Màn hình Custom Setup

Bước 3:Lựa chọn các thành phần cài đặt trong Feature và lựa chọn thư mục chứa chương trình cài đặt trong mục Install to, sau đó chọn Next để tiếp tục cài đặt sẽ được màn hình Description Folder

Hình 1.9 Màn hình Description Folder

Trang 25

Bước 4: Trong màn hình này có thể thay đổi thư mục cài đặt trong change của mục Install to theo mặc định đường dẫn thư mục cài đặt sẽ là c:\Program Files\Java, chọn Next để tiếp tục, khi đó được màn hình Progress

Trong ví dụ 1.3 dưới đây sẽ hướng dẫn cách cài đặt và cấu JDK trên hệ điều hành Windows 7 bản 64 bit

Ví dụ1.3: Cấu hình JDK trên Windows 7 bản 64 bit

Bước 1: Mở Explore trên Windows và copy tên đường dẫn đến thư mục chứa chương trình cài đặt của Java như hình sau:

Hình 1.11 Đường dẫn của thư mục cài đặt Java

Bước 2: Kích chuột phải vào My Computer chọn Properties được màn hình sau:

Trang 27

Hình 1.14 Màn hình Environment Variables

Bước 5: Trong mục System Avariables chọn Path rồi chọn edit được màn hình Edit System Variable Dán (Pate) đường dẫn đã copy ở bước 1 vào phần cuối của mục Variable value rồi chọn ok

Hình 1.15 Màn hình Edit System Variable

Bước 6: Kiểm tra quá trình cấu hình bằng cách vào run nhận lệnh cmd để mở cửa

số Command Prompt, trong cửa sổ này ở thư mục bất kỳ nhập lệnh java – version nếu xuất hình như hình 1.7 dưới đây là quá trình cài cấu hình thành công

Hình 1.16 Màn hình cửa sổ run

Hình 1.17 Màn hình Command Prompt

Trang 28

1.2 Ngôn ngữ lập trình Java

1.2.1 Mở đầu lập trình với Java

Java là một ngôn ngữ lập trình hướng đối tượng Tất cả các lớp trong Java đều dựa trên lớp Object, là cha của tất cả các lớp Các lớp có liên quan được tổ chức thành các gói (packages) Các gói cũng có thể chứa các gói khác hoặc các giao diện Một giao diện là một loạt các phương pháp mà các lớp Java có thể thực thi

Các chương trình mã nguồn Java (*.java) đầu tiên được biên dịch thành các file bytecode (tập tin mã nhị phân) (*.class) Sau đó trình thông dịch Java sẽ chuyển đổi các bytecode thành các mã máy theo bộ xử lý cụ thể

1.2.2 Cấu trúc chương trình Java

Về cơ bản cấu trúc chung của một chương trình Java có dạng như sau:

import packages //chỉ định các gói hay lớp sẽ được dùng trong chương trình class Classname

}

Trong đó phần đầu của một chương trình Java, “import packages” xác định thông tin môi trường Để làm được việc này, chương trình được chia thành các lớp hoặc các gói riêng biệt Những gói này sẽ được chỉ dẫn trong chương trình Thông tin này được chỉ ra với sự trợ giúp của lệnh nhập “import” Mỗi chương trình có thể có nhiều hơn một lệnh nhập Dưới đây là một ví dụ về lệnh nhập:

import java awt.*;

Lệnh này nhập gói „awt‟ Gói này dùng để tạo các đối tượng GUI Ở đây java là tên của thư mục chứa gói „awt‟ Ký hiêu “*” chỉ tất cả các lớp thuộc gói này

Trong java, tất cả các mã, bao gồm các biến và cách khai báo nên được thực hiện trong phạm vi một lớp Bởi vậy, từng khai báo lớp được tiến hành sau lệnh nhập Một chương trình đơn giản có thể chỉ có một vài lớp Những lớp này có thể mở rộng thành các lớp khác Mỗi lệnh đều được kết thúc bởi dấu chấm phảy “;” Chương trình còn có thể bao gồm các ghi chú, chỉ dẫn Khi dịch, chương trình dịch sẽ tự loại bỏ các ghi chú này

Trang 29

Các ghi chú dùng để gợi nhớ lại quá trình suy nghĩ, kiểm nghiệm các lập luận hoặc khi cần bổ sung, sửa chữa, nâng cấp chương trình Java hỗ trợ 3 cách ghi chú sau:

cho JavaDoc

Bảng 1.1 Bảng các ký hiệu ghi chú

Có thể phân chia các thành phần trong một chương trình Java làm 5 loại sau:

- Các tên định danh (identifiers): là tên các biến, các phương thức và các lớp để trình biên dịch định danh duy nhất Tên định danh gồm các mẫu tự, dấu _ hoặc dấu $, các ký tự đặc biệt không khác được dùng

- Các từ khoá (keywords): là các tên định danh sẵn được Java dành riêng, không được dùng các từ khóa để dùng làm các tên định danh Các từ khoá của Java gồm:

abstract dùng để thông báo một phương thức trừu tượng, cần có một

phương thức con không trừu tượng lấp lên Một phương thức là trừu tượng sẽ không có phần mã lệnh (MethodBody)

boolean kiểu biến logic, chỉ có hai giá trị đúng, sai (TRUE, FALSE)

Chúng khác với C/C++ biến kiểu này chỉ chiếm 1 bit trong bộ nhớ break từ khoá dùng để thoát ra khỏi vòng lặp

byte kiểu dữ liệu có giá trị 8 bit

case một trường hợp trong cấu trúc switch

catch sử dụng khi nhận về các kết quả lỗi, được sử dụng trong xử lý

ngoại lệ

continue dùng để nhảy về đầu vòng lặp

default giá trị mặc định trong cấu trúc lựa chọn

Trang 30

do nằm trong câu lệnh vòng lặp (do … while)

else nằm trong cấu trúc lựa chọn (if … else …)

extends dẫn xuất, được sử dụng để khai báo một lớp được kế thừa từ một

lớp khác final Dùng để khai báo hằng số, phương thức không thể ghi đè, hoặc

lớp không thể kế thừa finally phương thức kết thúc

for dùng để thực hiện một vòng lặp xác định

if nằm trong cặp lệnh điều khiển if then … else

implements cài đặt, dùng để khai báo một lớp là cài đặt của một giao diện import cho biết dùng các thư viện nào

instanceof dùng trong kiểu định danh thời gian chạy(Runtime Type

Identification) kiểm tra một đối tượng có phải là một thể hiện của lớp hay không

interface giao diện, sử dụng để khai báo giao diện

native nguồn, gốc: Khai báo phương thức được viết bằng ngôn ngữ biên

dịch C++

package gói, đóng gói

private từ khóa khai đối tượng tiếp sau là cục bộ

protected không bị chồng, sử dụng trong các lớp dẫn xuất

public đối tượng khai báo tiếp theo sau là biến toàn cục

return trở về lệnh gọi

statictis đối tượng khai báo tiếp theo sau là tĩnh

Trang 31

swith dùng trong cấu trúc lựa chọn (switch case)

synchronized đồng bộ, sử dụng để khai báo một phương thức độc quyền truy

xuất trên một đối tượng this đối tượng hiện đang xét

throws cho biết phương thức hay biến sẽ trả về (báo) khi có lỗi (dùng

trong khai báo phương thức) transient Giá trị của biến được khai báo kiểu này sẽ không được lưu giữ như

trước khi một đối tượng (chứa biến đó) được lưu trữ

void Dùng để khai báo một phương thức không trả về giá trị

volatile Giá trị của biến được khai báo kiểu này có thể được thay đổi đột

xuất bởi các phần khác của chương trình while dùng trong cặp lệnh vòng lặp

Bảng 1.2 Các từ khóa của Java

- Các dấu cách (separators): thông báo cho trình biên dịch java cách xác định các thành phần ngữ nghĩa của chương trình

- Các hằng (literals): là các giá trị bất biến trong một chương trình Các hằng có thể là các số, các chuỗi, các ký tự, hoặc các giá trị Boolean

- Các toán tử (operators): chỉ định một đánh giá hoặc một phép toán được thực hiện trên dữ liệu hay các đối tượng Ví dụ : +, -, *, /, %

1.2.3 Kiểu dữ liệu cơ sở, hằng, biến

a) Các kiểu dữ liệu cơ sở:

Java cung cấp các kiểu dữ liệu cơ sở Các kiểu dữ liệu này được dùng để tạo các kiểu dữ liệu dẫn xuất

- Kiểu số nguyên, Java có bốn loại số nguyên: byte, short, int, long

Kiểu Kích thước Giá trị nhỏ nhất Giá trị lớn nhất

Trang 32

~ Phép toán phủ định trên bit

& Phép toán AND trên bit

<< Dịch chuyển sang trái n bit

>> Dịch chuyển sang phải n bit

>>> Dịch chuyển sang phải và điền 0 vào bit

trống

Bảng 1.4 Các phép toán trên kiểu số nguyên

Nếu hai toán hạng đều dạng long thì kết quả sẽ là dạng long 64 bits Nếu có một toán hạng không phải dạng long thì sẽ được chuyển sang dạng long trước khi thực hiện

Trang 33

phép toán Nếu cả hai toán hạng không phải là long (byte, short) thì sẽ được đổi sang int trước khi thực hiện phép toán Trong Java không thể chuyển biến boolean sang int như các ngôn ngữ khác

-Kiểu số thực, Java có 2 loại số thực là: float và double

Kiểu Kích cỡ Giá trị nhỏ nhất Giá trị lớn nhất

double 64 bits -1.79769313486231570E+308 1.79769313486231570E+308

Bảng 1.6 Các phép toán trên kiểu số thực

Biến kiểu float và double có thể được chuyển sang các kiểu dữ liệu số khác nhưng không thể chuyển sang kiểu dữ liệu boolean.Khi thực hiện phép tính java sẽ chuyển các toán hạng về kiểu dữ liệu cao nhất rồi mới tính toán Java đưa ra một số thực NaN (Not a Number) dùng cho các giá trị không thể xác định được trong khoảng

từ vô cực âm đến vô cực dương Nó giải quyết lỗi phép chia cho 0

-Kiểu dữ liệu char:

Trang 34

Char là kiểu dữ liệu về ký tự, một biến char sẽ có giá trị là một ký tự Unicode, có kích thước 16 bits từ „\u0000‟ đến „\uFFFF‟

-Kiểu dữ liệu boolean:

Boolean là kiểu dữ liệu chỉ có hai giá trị là True và False dùng để xác định kết quả một điều kiện và có kích thước là một bit Do đó ta không thể chuyển kiểu giữa boolean sang int hay ngược lại

-Chuyển kiểu (type casting):

Trong một biểu thức của chương trình không phải lúc nào các biến cũng thuộc về cùng một kiểu dữ liệu Vì vậy để các biến thuộc về cùng một kiểu dữ liệu nào đó Java cho phép chuyển kiểu đối với một biến ở 2 hướng: chuyển kiểu hẹp (Narrowing conversion – từ kiểu lớn về kiểu nhỏ) và chuyển kiểu nới rộng (Widening conversion -

Trang 35

System.out.println (“a = “+a); // a = 12.0 float b = 15.682f;

int c = (int) b + 20;

System.out.println (“c = “+c); // c = 35 }

}

chuyển kiểu mở rộng(Widening) – quá trình làm tròn số theo hướng mở rộng không làm mất thông tin về độ lớn của mỗi giá trị.Biến đổi theo hướng mở rộng chuyển một giá trị sang một dạng khác có độ rộng phù hợp hơn so với nguyên bản Biến đổi theo hướng lại thu nhỏ lại (Narrowing) làm mất thông tin về độ lớn của giá trị được chuyển đổi Chúng không được thực hiện khi thực hiện phép gán Ở ví dụ trên giá trị thập phân sau dấu phảy sẽ bị mất

b) Đặt tên (Identifier)

Một tên là một chuỗi các ký tự gồm các chữ, số, dấu gạch dưới (_), và dấu dollar ($)

Việc đặt tên cho một hằng và biến cần theo những quy tắc sau:

- Ký tự đầu phải là ký tự chữ, dấu _, hay dấu $.Không thể bắt đầu bởi một số

- Sau ký tự đầu, có thể dùng các ký tự chữ, ký số, dấu _, dấu $

- Không được có khoảng trắng

- Không được trùng với các từ khóa

c) Hằng (literal):

Hằng là một giá trị thực được sử dụng trong chương trình, được biểu diễn như chính nó chứ không phải là một giá trị của một biến hay một kết quả của một biểu thức Ví dụ hằng 3.14159 thay cho số Pi

- value là giá trị của hằng

Ví dụ sau sẽ khai báo một hằng tên PI thuộc kiểu số thực (float) có giá trị là 3.14159

Trang 36

Hằng ký tự:

Một hằng ký tự là một ký tự đơn hay một chuỗi ESCAPE, được đặt trong hai dấu nháy đơn Chuỗi ESCAPE được dùng để biểu diễn các ký tự đặc biệt như tab („\t‟) hay một động tác đặc biệt như xuống dòng („\n‟) Ta có bảng liệt kê các chuỗi ESCAPE thường dùng:

Trang 37

\‟ Dấu nháy đơn

Khi sử dụng một hằng chuỗi ký tự, ta xem như đã tạo ra một đối tượng của lớp String và không cần chú ý đến các thao tác về bộ nhớ như tạo và xóa các vùng nhớ cho các hằng chuỗi ký tự Java có một hệ thống quản lý vùng nhớ tự động làm việc này

d Biến

Các ứng dụng sử dụng các biến để lưu trữ các dữ liệu cần thiết hoặc các dữ liệu được tạo ra trong quá trình thực thi chương trình Các biến được xác định bởi một tên biến và có một phạm vi tác động Phạm vi tác động của biến được xác định một cách

rõ ràng trong chương trình

Việc khai báo một biến bao gồm 3 thành phần: kiểu biến, tên của nó và giá trị ban đầu được gán cho biến (không bắt buộc) Để khai báo nhiều biến ta sử dụng dấu phẩy để phân cách các biến Khi khai báo biến, luôn nhớ rằng Java phân biệt chữ thường và chữ in hoa (case -sensitive)

Cú pháp:

Datatype identifier [=value] [, identifier[=value]… ];

Để khai báo một biến nguyên (int) có tên là counter dùng để lưu giá trị ban đầu

là 1, ta có thể thực hiện như sau:

int counter = 1;

Java có những yêu cầu hạn chế đặt tên biến mà bạn có thể gán giá trị vào Những hạn chế này cũng giống các hạn chế khi đặt tên cho các định danh mà ta đã thảo luận ở

các phần trước của chương này

Java cho phép khai báo biến khá linh hoạt như sau:

char ch; //khai báo một biến kiểu char

int count, num ; //khai báo hai biến trên cùng dòng

int count =10; char ch =‟A‟; //khai báo và khởi tạo biến

int num = 012; //gán giá trị bát phân

int num = 0x18; // gán giá trị thập lục phân

float dec=1.0F; //khai báo và gán giá trị cho biến kiểu float

Trang 38

char ch=‟\u0020‟; //khai báo và khởi tạo một giá trị Unicode cho biến ch

int a=5, b=10; //khai báo và khởi tạo nhiều biến cùng lúc

int c=a+b; //khởi tạo biến bằng biểu thức

e) Phạm vi hoạt động của hằng và biến

Tất cả các biến trong ứng dụng Java đều có một phạm vi (scope), hay là các đặc trưng xác định nơi có thể truy cập biến chỉ bằng tên của nó Nếu biến nằm trong vùng phạm vi, thì có thể tương tác với nó bằng tên Nếu biến nằm ngoài vùng phạm vi thì điều này là không thể

Có nhiều mức phạm vi trong ngôn ngữ Java, được xác định bởi vị trí khai báo của biến ở đâu Đoạn mã dưới đây chỉ ra vị trí khai báo các biến:

public class SomeClass {

member variable scope

public void SomeMethod(parameters ) {

method parameter scope

local variable declaration(s)

1.2.4 Kiểu dữ liệu Mảng (Array)

Mảng được dùng để lưu trữ các khoản mục (items) cùng kiểu dữ liệu liền kề nhau trong bộ nhớ Mỗi lần ta khai báo kích thước của một mảng, nó sẽ không thể thay đổi

Dữ liệu trên mảng có thể là kiểu dữ liệu nguyên thủy hoặc đối tượng Cũng như các biến, ta có thể gán các giá trị vào mảng tại các phần tử được tạo ra trong mảng Nếu không, Java sẽ gán giá trị mặc định vào tất cả các phần tử của mảng, giá trị mặc định phụ thuộc vào kiểu dữ liệu Ví dụ nếu kiểu dữ liệu là nguyên (int) thì giá trị mặc định ban đầu sẽ là 0

Khai báo mảng

Trang 39

Đặc trưng của mảng là một cặp dấu ngoặc vuông ([]), một mảng được khai báo bằng hai cách :

Cặp ngoặc vuông đặt sau tên biến

Cặp ngoặc vuông đặt sau kiểu dữ liệu

Cú pháp như sau:

Datatype identifier[]; hoặc Datatype[] identifier;

Ví dụ 1.5:

int arrInt[]; hoặc int[] arrInt;

int[] arrInt1, arrInt2, arrInt3;

Cấp phát bộ nhớ cho mảng

Sau khi khai báo, bản thân mảng chưa được xác định (chưa được cấp phát bộ nhớ), bởi vì Java không cho phép chỉ định số phần tử khi khai báo Để định vị cho một mảng trong bộ nhớ ta cần dùng từ khóa new

Cú pháp như sau:

Identifier = new datatype[n];

Trong đó Identifier là tên biến mảng đã được khai báo, datatype là kiểu dữ liệu của mảng, n là số phần tử của mảng

Ví dụ 1.6: để cấp phát một vùng nhớ cho một mảng arrInt đã khai báo ở trên gồm

100 phần tử kiểu int ta thực hiên như sau:

int arrInt = new int[100];

Tuy nhiên Java cũng cho phép thực hiện việc cấp phát vùng nhớ cho mảng trong khi khai báo theo cú pháp như sau:

Datatype identifier[] = new Datatype[n];

Ví dụ 1.7:

char ch[] = new char [10]; // khai báo và cấp phát bộ nhớ bằng từ khóa new

Lệnh này sẽ tạo ra mảng ch có 10 phần tử kiểu char được đánh số từ 0 đến 9

Khởi tạo mảng

Chúng ta có thể khởi tạo giá trị ban đầu cho các phần tử của mảng khi nó được khai báo

Ví dụ 1.8:

Trang 40

Ví dụ 1.9: khai báo mảng

int arrInt[] = {1, 2, 3};

int x = arrInt[0]; // x sẽ có giá trị là 1

int y = arrInt[1]; // y sẽ có giá trị là 2

int z = arrInt[2]; // z sẽ có giá trị là 3

1.2.5 Toán tử và biểu thức

a) Toán tử

Toàn tử là các ký hiệu sử dụng cho các phép toán, thường được tham gia vào việc thành lập các biểu thức

Trong Java có các loại toán tử sau:

Toán tử hai ngôi:

a << n dịch số a sang trái n bit

>> dịch chuyển bit sang a >> b dịch số a sang phải n bit

Ngày đăng: 08/06/2021, 14:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN