GIỚ I THI Ệ U NGÔN NG Ữ L Ậ P TRÌNH JAVA
Đặc điể m ngôn ng ữ l ậ p trình Java
1.1 Lịch sửra đời và phát triển của ngôn ngữ Java
Java là một ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 6 năm 1995 Từ đó, nó đã trở thành một trong những công cụ lập trình của các lập trình viên chuyên nghiệp Java được xây dựng trên nền tảng của C và C++ Do vậy nó sử dụng các cú pháp của C và các đặc trưng hướng đối tượng của C++
Vào những năm 1991, một nhóm các kỹ sư của Sun Microsystems có ý định thiết kế một ngôn ngữ lập trình để điều khiển các thiết bị điện tử như Tivi, máy giặt, lò nướng,… Mặc dù C và C++ có khả năng làm việc này nhưng trình biên dịch lại phụ thuộc vào từng loại CPU
Trình biên dịch thường phải tốn thời gian để xây dựng nên rất đắt Vì vậy để mỗi loại CPU có một trình biên dịch riêng là rất tốn kém Do đó nhu cầu thực tế đòi hỏi một ngôn ngữ chạy nhanh, gọn, hiệu quảvà độc lập thiết bị tức là có thể chạy trên nhiều loại CPU khác nhau, dưới các môi trường khác nhau “Oak” đã ra đời và vào năm 1995 được đổi tên thành Java Mặc dù mục tiêu ban đầu không phải cho
Internet nhưng do đặc trưng không phụ thuộc thiết bịnên Java đã trở thành ngôn ngữ lập trình cho Internet
Java là một trong những ngôn ngữ lập trình hướng đối tượng Nó được sử dụng trong phát triển phần mềm, trang web, game hay ứng dụng trên các thiết bị di động
Java được khởi đầu bởi James Gosling và bạn đồng nghiệp ở Sun MicroSystem năm
1991 Ban đầu Java được tạo ra nhằm mục đích viết phần mềm cho các sản phẩm gia dụng, và có tên là Oak
Java được phát hành năm 1994, đến năm 2010 được Oracle mua lại từ Sun MicroSystem
Java được tạo ra với tiêu chí “Viết (code) một lần, thực thi khắp nơi” (Write
Once, Run Anywhere – WORA) Chương trình phần mềm viết bằng Java có thể chạy trên mọi nền tảng (platform) khác nhau thông qua một môi trường thực thi với điều kiện có môi trường thực thi thích hợp hỗ trợ nền tảng đó
Java là ngôn ngữ vừa biên dịch vừa thông dịch Đầu tiên mã nguồn được biên dịch bằng công cụ JAVAC để chuyển thành dạng ByteCode Sau đó được thực thi trên từng loại máy cụ thể nhờ chương trình thông dịch
1.3 Các đặc trưng của Java
• Độc lập phần cứng và hệ điều hành
Java hướng đến sự đơn giản và quen thuộc đối với nhiều lập trình viên Nó loại bỏ các tính năng phức tạp của C và C++ như con trỏ, nạp chồng hàm, Java cũng không sử dụng lệnh "goto" hay tệp tiêu đề (.h) Các cấu trúc "struct" và "union" không có trong Java.
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
Lập trình hướng đối tượng (Object Oriented Programing – OOP) là một phương pháp để thiết kế một chương trình bởi sử dụng các lớp và các đối tượng
Java là một ngôn ngữ lập trình hướng đối tượng vì vậy nó cũng hỗ trợ các đặc tính của lập trình hướng đối tượng:
• Trừu tượng (Abstraction) c) Độc lập phần cứng và hệ điều hành Đây là khả năng một chương trình được viết tại một máy nhưng có thể chạy được bất kỳđâu Chúng được thể hiện ở mức mã nguồn và mức nhị phân Ở mức mã nguồn, người lập trình cần mô tả kiểu cho mỗi biến Kiểu dữ liệu trong
Java nhất quán cho tất cả các hệ điều hành và phần cứng khác nhau Java có riêng một thư viện các lớp cơ sở Vì vậy, chương trình Java được viết trên một máy có thể dịch và chạy trơn tru trên các loại máy khác nhau mà không cần viết lại
Tính độc lập nền tảng trong Java đạt được thông qua biên dịch bytecode, một dạng mã trung gian chạy trên Java Virtual Machine (JVM) JVM có vai trò như trình thông dịch tại máy thực thi, cho phép chương trình Java chạy trên nhiều nền tảng phần cứng và hệ điều hành mà không cần biên dịch lại mã nguồn.
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 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 2 thể hiện quá trình thực thi chương trình viết bằng Java chạy trên nhiều hệ máy khác nhau
Hình 1.2: Dịch chương trình Java
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
Để chạy được chương trình dưới dạng bytecode, mỗi máy tính đều cần có trình thông dịch của Java (còn gọi là máy ảo Java) Nhiệm vụ của máy ảo Java là chuyển đổi bytecode thành mã lệnh mà CPU có thể thực thi, giúp Java trở nên đa nền tảng và mạnh mẽ.
Java yêu cầu chặt chẽ về kiểu dữ liệu và phải mô tả rõ ràng khi viết chương trình Chúng sẽ 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ỏ các kiểu dữ liệu dễ gây ra lỗi e) Bảo mật
Các ki ể u ứ ng d ụ ng trong Java
2.1 Console: Ứng dụng Console là ứng dụng nhập xuất ở chế độ văn bản tương tự như màn hình Console của hệ điều hành MS-DOS Loại chương trình ứng dụng này thích hợp với những ai bước đầu làm quen với ngôn ngữ lập trình Java Các ứng dụng kiểu Console thường được dùng để minh họa các ví dụcơ bản liên quan đến cú pháp ngôn ngữ, các thuật toán, và các chương trình ứng dụng không cần thiết đến giao diện người dùng đồ họa
Java Applet là loại ứng dụng có thể nhúng và chạy trong trang web của một trình duyệt web Từ khi Internet mới ra đời, Java Applet cung cấp một khả năng lập trình mạnh mẽ cho các trang web Nhưng gần đây khi các chương trình duyệt web đã phát triển với khả năng lập trình bằng VB Script, Java Script, HTML,
DHTML, cùng với sự cạnh tranh khốc liệt của Microsoft và Sun đã làm cho Java Applet lu mờ Và cho đến bây giờ gần như các lập trình viên đều không còn “mặn mà” với Java Applet nữa
2.3 Desktop bằng AWT và JFC:
Việc phát triển các chương trình ứng dụng có giao diện người dùng đồ họa trực quan giống như những chương trình được viết dùng ngôn ngữ lập trình C++ hay Visual Basic đã được Java giải quyết bằng thư viện AWT và JFC JFC là thư viện rất phong phú và hỗ trợ mạnh mẽhơn nhiều so với AWT JFC giúp cho người lập trình có thể tạo ra một giao diện trực quan của bất kỳ ứng dụng nào
Java hỗ trợ mạnh mẽ đối với việc phát triển các ứng dụng Web thông qua công nghệ J2EE (java 2 Enterprise Edition) Công nghệ J2EE hoàn toàn có thể tạo ra các ứng dụng Web một cách hiệu quả không thua kém công nghệ NET mà Microsoft đang quảng cáo Hiện nay có rất nhiều trang Web nổi tiếng ở Việt Nam cũng như khắp nơi trên thế giới được xây dựng và phát triển dựa trên nền công nghệ Java Số ứng dụng Web được xây dựng dùng công nghệ Java chắc chắn không ai có thể biết được con số chính xác là bao nhiêu, nhưng chúng tôi đưa ra đây vài ví dụ để thấy rằng công nghệ Java của Sun là một “đối thủđáng gờm” của Microsoft
J2ME (The Java 2 Platform, Micro Edition) là công nghệ của Sun giúp hỗ trợ phát triển chương trình và phần mềm nhúng Công nghệ này cung cấp một môi trường để phát triển các ứng dụng có khả năng chạy trên các thiết bị cá nhân như điện thoại di động, máy tính bỏ túi PDA, Palm và nhiều thiết bị nhúng khác.
L ập trình căn bả n v ớ i ngôn ng ữ l ậ p trình Java
Java cung cấp một vài kiểu dữ liệu Chúng được hỗ trợ trên tất cả các nền Trong Java kiểu dữ liệu được chia thành hai loại:
❖ Các kiểu dữ liệu nguyên thủy (primitive)
❖ Các kiểu dữ liệu tham chiếu (reference) a) Dữ liệu kiểu nguyên thủy
Java cung cấp tám kiểu dữ liệu nguyên thủy
Kiểu dữ liệu Độ dài theo số bit
Byte 8 -128 đến 127 Số liệu kiểu byte là một loại điển hình dùng đểlưu trữ một giá trị bằng một byte Chúng được sử dụng rộng rãi khi xử lý một file văn bản
Kiểu Char sử dụng để lưu tên hoặc các dữ liệu ký tự
Dữ liệu boolean dùng để lưu các giá trị “đúng” hoặc “sai”
Short 16 -32768 đến 32767 Kiểu short dùng để lưu các số có giá trị nhỏdưới 32767
Kiểu int dùng để lưu một số có giá trị lớn đến 2,147,483,647
Long 64 -2^63 đến 2^62 Kiểu long được sử dụng để lưu một số có giá trị rất lớn đến 2^62
Kiểu float dùng đểlưu các số thập phân đến IEEE754
Kiểu double dùng để lưu các số thập phân có giá trị lớp đến IEEE754
Bảng 1.1 Dữ liệu kiểu nguyên thủy b) Kiểu dữ liệu tham chiếu (reference)
Trong Java có 3 kiểu dữ liệu tham chiếu
Kiểu dữ liệu Mô tả
Mảng (Array) Tập hợp các dữ liệu cùng loại
Lớp (Class) Tập hợp các biến và các phương thức
Là một lớp trừu tượng được tạo ra để bổ sung cho các kế thừa đa lớp trong Java
Bảng 1.2 Dữ liệu kiểu tham chiếu
3.2 Các toán tử a) Các toán tử
Java cung cấp nhiều dạng toán tử, bao gồm:
Các toán tử số học:
Các toán hạng của các toán tử số học phải ở dạng số Các toán hạng kiểu Boolean không sử dụng được, song các toán hạng ký tự cho phép sử dụng loại toán tử này Một vài kiểu toán tử được liệt kê trong bảng dưới đây:
+ Cộng Trả về giá trị tổng hai toán hạng
- Trừ Trả về giá trị khác nhau giữa hai toán hạng hoặc giá trị phủ định của toán hạng
* Nhân Trả về giá trị là tích của hai toán hạng
/ Chia Trả về giá trị là thương của hai toán hạng
% Phép lấy modulo Giá trị trả về là phần dư của toán tử chia
++ Tăng dần Tăng giá trị của biến lên 1
Giảm dần Giảm giá trị của biến xuống 1 đơn vị
+= Cộng và gán giá trị Cộng các giá trị của toán hạng bên trái vào toán hạng bên phải và gán giá trị trả về vào toán hạng bên trái
-= Trừ và gán giá trị Trừ các giá trị của toán hạng bên trái vào toán hạng bên phải và gán giá trị trả về vào toán hạng bên trái
*= Nhân và gán giá trị Nhân các giá trị của toán hạng bên trái vào toán hạng bên phải và gán giá trị trả về vào toán hạng bên trái /= Chia và gán giá trị Chia các giá trị của toán hạng bên trái vào toán hạng bên phải và gán giá trị trả về vào toán hạng bên trái
%= Lấy số dư và gán Chia giá trị của toán hạng bên trái vào toán hạng bên phải và gán giá trị trả về vào toán hạng bên trái
Bảng 1.3 Các toán tử số học
Các toán tử dạng Bit cho pháp ta tạo những Bit riêng biệt trong các kiểu dữ liệu nguyên thủy Toán tử Bit dựa trên cơ sở đại số Boolean Nó thực hiện phép tính trên hai đối sốlà các bit để tạo ra một kết quả mới Một vài dạng toán tử kiểu này được liệt kê dưới đây:
~ Phủ định (NOT) Trả về giá trị phủ định của một số
& Toán tử AND Trả về giá trị là 1 nếu các toán hạng là 1 và 0 trong các trường hợp khác
I Toán tử OR Trả về giá trị là 1 nếu một trong các toán hạng là 1 và 0 trong các trường hợp khác
^ Exclusive OR Trả về giá trị là 1 nếu chỉ một trong các toán hạng là 1 và trả về 0 trong các trường hợp khác
>> Dịch sang phải Chuyển toàn bộ các bit của một số sang phải một vị trí, giữ nguyên dấu của số âm Toán hạng bên trái là số bị dịch còn số bên phải chỉ số vị trí mà các bit cần dịch
Dịch số sang trái dịch chuyển toàn bộ các bit của một số sang trái một vị trí, duy trì dấu của số âm Toán hạng bên trái là số bị dịch, trong khi toán hạng bên phải chỉ định số vị trí các bit cần dịch.
Bảng 1.4 Các toán tử Bit
Các toán tử quan hệ:
Các toán tử quan hệ kiểm tra mối quan hệ giữa hai toán hạng Kết quả của một biểu thức có dùng các toán tử quan hệ là những giá trị Boolean Các toán tử quan hệ được sử dụng trong các cấu trúc điều khiển
= = So sánh bằng Toán tử này kiểm tra sự tương đương của hai toán hạng
!= So sánh khác Kiểm tra sự khác nhau của hai toán hạng
> Lớn hơn Kiểm tra giá trị của toán hạng bên phải lớn hơn toán hạng bên trái hay không
< Nhỏ hơn Kiểm tra giá trị của toán hạng bên phải nhỏ hơn toán hạng bên trái hay không
>= Lớn hơn hoặc bằng Kiểm tra giá trị của toán hạng bên phải lớn hơn hoặc bằng toán hạng bên trái hay không
, =,