Giới thiệu ngôn ngữ lập trình Java
Trang 1Chương 2
Giới thiệu ngôn ngữ lập trình Java
1 Giới thiệu công nghệ Java
1.1 Lịch sử phát triển
Lịch sử phát triển của Java bắt đầu năm 1991 khi SUN tiến hành các dự án lập trình cho
vi xử lý dùng trong các thiết bị điện tử khác nhau C++ không đáp ứng được các yêucầu này vì C++ cho đem mã nguồn từ máy này sang máy khác nhưng sau khi biên dịchlại hoàn toàn phụ thuộc vào từng bộ vi xử lý cụ thể Trong khi đó bộ vi xử lý dùng trongcác thiết bị điện tử rất đa dạng và có vòng đời khá ngắn ngủi Nếu ta thay đổi bộ xử lýdẫn đến cần phải thay đổi trình biên dịch C++, điều này gây lên tốn kém SUN đã thiết
kế một ngôn ngữ lập trình mới có tính khả chuyển cao hơn đó chính là Java Java là tênđịa phương nơi xuất xứ của một loại cà phê ngon nổi tiếng
Java được chính thức công bố năm 1995 và ngay lập tức đã tạo lên một trào lưumới trên toàn thế giới và từ đó đến nay vẫn tạo được sức cuốn hút mạnh mẽ Bởi vìJava không chỉ đơn thuần là một ngôn ngữ lập trình mà nó là giải pháp cho nhiều vấn
đề
1.2 Cấu trúc của máy ảo Java (Java Virtual Machine)
Chương trình ứng dụng hoạt động bằng cách sử dụng các đối tượng của Java (JavaObject) Máy ảo Java tạo thành một cầu nối giữa trình ứng dụng viết bằng Java và hệđiều hành
Máy ảo Java bao gồm các thành phần sau :
Trình nạp lớp (Class Loader): đọc bytecode từ đĩa hoặc từ kết nối mạng
Trình kiểm tra lớp (Class Verifier): Kiểm tra các lớp sẽ không sinh ra các lỗi ảnhhưởng tới hệ thống khi thực thi
Trình thực thi (Execution Unit): sẽ thực hiện các lệnh được quy định trong từngbytecode
Trong bộ công cụ Java, tệp tin java.exe chính là máy ảo Java
1.3 Các đặc trưng của Java
Java là một môi trường độc lập (Independent Platform)
Do cấu trúc của Java nên ta có thể soạn thảo chương trình trên bất kỳ hệ thống nào.Sau khi đã được biên dịch thành tệp tin lớp (*.class) ứng dụng có thể thực thi ở bất kỳ
hệ thống nào Đó là đặc tính mà các ngôn ngữ khác không có
Java là một ngôn ngữ lập trình hướng đối tượng thuần túy (Pure Object Oriented Programming)
Chương trình Java: tập hợp các đối tượng
Máy ảo Java
Hệ điều hành
Trang 2Java là một ngôn ngữ lập trình hướng đối tượng thuần túy, mọi thứ trong Java đều làđối tượng.
Java là một ngôn ngữ có tính khả chuyển (Portibility)
Java có tính khả chuyển đối với cả mã nguồn và bản thân mã biên dịch (bytecode)
Java là môi trường xử lý phân tán (Distributed Enviroments)
Bytecode không phụ thuộc vào hệ thống vì vậy bytecode có thể nằm phân tán trênmạng Việc liên kết với thư viện chỉ được thực hiện vào lúc chạy chương trình do vậy
mã byte thường gọn nhẹ Chương trình Java được nạp dần một cách linh hoạt nênkhông gây quá tải cho mạng Ngoài ra, Java còn cho phép xử lý đa tuyến đoạn Cơ chếtruyền thông điệp thuận tiện cho việc tổ chức mạng
Java là môi trường an toàn
Khi phát triển các ứng dụng phân tán thì một trong nhừng vấn đề được quan tâm hàngđầu là an toàn hệ thống Java được thiết kế để đảm bảo an toàn cho người dùng Javatrên mạng Java có bốn tầng bảo an:
Tầng 1: Mức ngôn ngữ và trình biên dịch Java không có kiểu con trỏ Trình biên dịch
kiểm tra kiểu rất chặt chẽ Mọi chuyển đổi kiểu đều phải được thực hiện một cách tườngminh Trình biên dịch Java từ chối sinh ra mã byte nếu mã nguồn không tuân thủnghiêm ngặt các quy tắc an toàn
Tầng 2: Trình nạp lớp (Class Loader) Có khả năng phân biệt những lớp đến từ mạng và
những lớp nạp từ hệ thống Nhờ khả năng phân biệt như vậy lớp được nạp qua mạngđược khống chế chặt chẽ, không được phép thực hiện các thao tác mức thấp
Tầng 3: Trình kiểm tra mã byte Trình này sẽ kiểm tra mã byte vào lúc chạy chương
trình bảo đảm chương trình Java đã được biên dịch một cách đúng đắn Khi thực hiện
sẽ không gây lỗi ảnh hưởng tới hệ thống cũng như không đụng chạm tới dữ liệu riêng
tư trên máy khách
Tầng 4: Trình bảo an Kiểm tra mã byte vào lúc chạy nhằm bảo đảm mã đang xét không
vi phạm qui tắc an toàn đã được thiết lập Các thao tác của ứng dụng được xem là cókhả năng gây nguy hiểm như đọc, xóa tệp đều phải được Trình bảo an cho phép
Java cung cấp cho người lập trình một thư viện khủng lồ
Java cung cấp cho người lập trình một thư viện khổng lồ các hàm chuẩn, gọi là coreAPI Các hàm chuẩn này được đặt trong các gói
Java có cơ chế quản lý bộ nhớ tự động
Quản lý bộ nhớ là một trong những vấn đề phức tạp đối với C và C++ Khi thực hiệnchương trình người lập trình chịu trách nhiệm khởi tạo các vùng nhớ, sau khi dùng phảigiải phóng các vùng nhớ này Chỉ cần một lỗi nhỏ có thể làm cạn kiệt tài nguyên dẫnđến treo hệ thống
Java đã loại bỏ gánh nặng này cho người lập trình Các vùng nhớ được tự động giảiphóng nếu như nó không tham chiếu đến bất kỳ đối tượng nào đang hoạt động
Chi phí phát triển ứng dụng bằng Java thấp
Khi phát triển ứng dụng dựa trên công nghệ Java thì sẽ có rất nhiều công cụ phát triển
và dịch vụ được cung cấp miễn phí
1.4 Các ấn bản Java
Trang 3 J2SE ( Java 2 Platform, Second Edition)
Đây là ấn bản chuẩn, bao gồm một môi trường thời gian chạy và một tập hợp các API
để xây dựng một loạt các ứng dụng khác nhau từ applet, cho tới các ứng dụng độc lậpchạy trên các nền khác nhau, ứng dụng cho client cho các ứng dụng doanh nghiệp khácnhau
J2EE (Java 2 Platform, Enterprise Edition (J2EE)
J2EE là nền tảng để xây dựng các ứng dụng phía server
J2ME (Java 2 Platform, Micro Edition )
Ấn bản này cho phép xây dựng các ứng dụng Java cho các “vi thiết bị” (các thiết bị cómàn hình hiển thị và hỗ trợ bộ nhớ tối thiểu, như điện thoại di động và các thiết bị trợgiúp cá nhân)
1.5 Công cụ phát triển
SUN cung cấp một số tiện ích cho phép biên dịch bắt lỗi và tạo tài liệu cho một ứngdụng Java JDK bao gồm:
javac: Bộ biên dịch để chuyển mã nguồn thành bytecode
java: Bộ thông dịch để thực thi các ứng dụng Java trực tiếp từ tập tin lớp
apppletviewer: Thực thi Java Applet từ tài liệu html
1.6 Các kiểu ứng dụng trong Java
Để thấy được sự khác biệt giữa hai kiểu ứng dụng nói trên chúng ta có thể xem những
sự khác biệt về đặc trưng của hai kiểu ứng dụng ở bảng dưới đây:
Khai báo Là lớp con của bất kỳ lớp nào
trong các gói thư viện các lớp
Phải là lớp con của Applet
Giao diện đồ họa Tùy chọn Do trình duyệt Web quyết
địnhYêu cầu bộ nhớ Bộ nhớ tối thiểu Bộ nhớ dành cho cả trình
duyệt và applet đóCách nạp chương trình Nạp bằng dòng lệnh Thông qua trang Web
Dữ liệu vào Thông qua các tham số trên
dòng lệnh
Các tham số đặt trong tệpHTML gồm địa chỉ, kích th-
ớc của trình duyệtCách thức thực hiện Mọi hoạt động được bắt đầu và
kết thúc ở main() nh- trong C/C+
Gọi các hàm: init(), start(),stop(), destroy(), paint()
Trang 4+Kiểu ứng dụng Ứng dụng trên các máy chủ
Server Công cụ phát triển phầnmềm, - ứng dụng trên các máykhách
Các ứng dụng trên Web
Bảng 2.1
1.7 Cài đặt chương trình dịch Java và các công cụ
Để cài đặt Java J2SDK ta cần tải về bộ J2SDK tại trang http://www.sun.com ,trang này cập nhật những phiên bản mới nhất của Java Sau đó ta tải về bộ công cụsoạn thảo Edit Plus tại địa chỉ http://www.editplus.com
Các bước cài đặt Java
Bước 1: Cài đặt J2SDK Sau khi cài đặt xong, Java được cài đặt tại thư mục:
C:\Program Files\Java Trong thư mục này có hai thư mục con là: jdk1.5.0_01 vàjre1.5.0_01
Công cụ phát triển nằm trong thư mục:
C:\Program Files\Java\jdk1.5.0_01\bin: Bao gồm các công cụ cho phép ta phát
triển, thực thi, gỡ rối và soạn thảo các chương trình được viết bằng ngôn ngữlập trình Java
Môi trường thời gian chạy (Runtime Environment)
Nằm trong thư mục con JRE Nó bao gồm một máy ảo Java, các thư viện lớp, vàcác tệp tin hỗ trợ việc xử lý các chương trình được viết bằng ngôn ngữ lập trìnhJava
Bước 2: Thiết lập các biến môi trường
Biến môi trường path
Trên desktop ta kích chuột phải vào biểu tượng My Computer, sau đó chọn thẻAdvanced, nháy chuột vào nút lệnh Enviroment Variable, xuất hiện cửa sổ cho phép tathiết lập biến môi trường như sau:
Trang 5Hình 2.1Nháy vào nút lệnh New để nhập vào thông tin về biến môi trường
Hình 2.2Sau đó nháy chuột vào nút lệnh OK để hoàn thành
Thiết lập biến môi trường classpath cũng tiến hành tương tự
Trang 6Lam quen voi ngon ngu lap trinh Java
Chương trình trên ta nhận thấy ngay đây là một chương trình ứng dụng độc lập đơngiản Chương trình thực hiện một tác vụ hết sức đơn giản là nhận một xâu ký tự đượctruyền vào từ đối dòng lệnh sau đó in xâu ký tự lên màn hình Đối dòng lệnh là mộtmảng xâu ký tự String[] args Khi ta thực thi chương trình trên, args[0] được gán bằngxâu ký tự "Lam quen voi ngon ngu lap trinh Java"
Ví dụ 2: Tạo một applet hiển thị một xâu ký tự lên màn hình
import java.applet.*;
import java.awt.*;
Trang 7public class ViDu2 extends Applet
Tạo một trang html để nhúng applet
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
Trang 8Hình 2.4
2 Ngôn ngữ lập trình Java
2.1 Cấu trúc tệp của một chương trình Java
Một tệp tin chương trình Java có thể có các phần được đặc tả như sau:
1 Định nghĩa một gói là tùy chọn thông qua định danh của gói (package)
2 Một số lệnh nhập import (0 hoặc nhiều)
3 Một số định nghĩa lớp và interface có thể định nghĩa theo thứ tự bất kỳ
Ví dụ giả sử có tệp nguồn Java như sau:
Hình 2.5
// Phần 1: Tùy chọn // Định nghĩa gói package GoiNhaTruong;
// Phần 2: (0 hoặc nhiều hơn) //
các gói cần sử dụng import java.io.*;
// Phần 3: (0 hoặc nhiều hơn) //
Định nghĩa các lớp và các interface public class NewApp{ } class C1{ }
interface I1{ } // class Cn { }
interface Im{ }
Trang 9 Khi dịch (javac) thì mỗi lớp trong tệp chương trình sẽ được dịch thànhbyte code và được ghi thành tệp riêng có tên trùng với tên của lớp và cóđuôi class Những lớp này sẽ được nạp vào chương trình lúc thông dịch
và thực hiện theo yêu cầu
Trong chương trình Java không có các khai báo biến, hàm tách biệt khỏilớp và chỉ có các khai báo và định nghĩa các lớp, interface Như thếchương trình Java được xem như là tập các lớp, interface và các đốitượng của chúng trao đổi thông điệp với nhau (bằng các lời gọi hàm) đểthực hiện các nhiệm vụ của ứng dụng
2.2 Định danh, kiểu dữ liệu và khai báo biến
Định danh (Identifier) Tên gọi của các thành phần trong chương trình được gọi là định
danh
Định danh thường được sử dụng để xác định biến, kiểu, phương thức, lớp
Qui tắc cho định danh:
Định danh là một dãy các ký tự gồm các chữ cái, chữ số và các ký tự khác: ‘_’,
$,
Định danh không bắt đầu bằng chữ số
Độ dài của định danh không giới hạn
Java phân biệt chữ hoa và chữ thường
Qui ước đặt tên
Định danh cho các lớp: chữ cái đầu của mỗi từ trong định danh đều viết hoa
Ví dụ: MyClass, HocSinh, SocketServer, URLConnection,
Định danh cho các biến, phương thức, đối tượng: chữ cái đầu của mỗi từ trongđịnh danh đều viết hoa trừ từ đầu tiên
Ví dụ: hoTen (họ tên), namSinh (năm sinh), tinhTong (tính tổng)
Trang 102.3 Các kiểu dữ liệu nguyên thủy (primitive datatype)
Kiểu dữ liệu cơ bản định nghĩa sẵn được gọi là kiểu nguyên thủy
Kiểu nguyên thủy bao gồm các kiểu:
Hình 2.6
Kiểu nguyên: char (ký tự), byte, short, int, long
Kiểu số thực: float, double
Kiểu logic: boolean
Các giá trị kiểu nguyên thủy không phải là đối tượng
Mỗi kiểu dữ liệu có miền xác định và các phép toán xác định trên nó
Mỗi kiểu dữ liệu nguyên thủy có một lớp gói (wrapper class) để sử dụng các kiểunguyên thủy như là các đối tượng
Kiểu dữ liệu Lớp gói
Trang 112.4 Khai báo các biến
a Các loại biến trong Java
Các biến thành phần: là các thành phần của lớp và được khởi tạo giá trị mỗi khimột đối tượng của lớp được tạo ra
Ví dụ:
URL u ;
HocSinh hs = new HocSinh(“Tuan Anh”);
Các biến tham chiếu đối tượng (Object Reference) là biến được sử dụng để xử
lý các đối tượng
Các biễn tĩnh (static variable) là biến của lớp đại diện cho cả lớp
Các biến cục bộ: là biến được khai báo trong các phương thức và trong cáckhối
b Khai báo biến
kieu_du_lieu bien;
Ví dụ:
int i;
char b,c;
float giaBan, dienTich;
c Khởi tạo giá trị cho các biến
Các giá trị mặc định cho các biến thành phần
Kiểu dữ liệu Giá trị mặc định
byte, short, int, long 0float, double +0.0F,+0.0Dtham chiếu đối tượng null
Bảng 2.4Qui tắc chuyển đổi kiểu trong Java
(<kieu>)<bieu_thuc>
Ví dụ
float f = (float)100.15D;
Mở rộng và thu hẹp kiểu
Trang 12 Biểu thức điều kiện
Biểu thức điều kiện A?B:C trả về giá trị B nếu A có giá trị true, trả về giá trị C nếu A
có giá trị false
Ví dụ:
byte b;
Trang 13 int i=b>=0?b:b+255;
Trong ví dụ trên thực hiện việc chuyển đổi các số nguyên kiểu byte có dấu về sốnguyên kiểu int không có dấu Nếu b lớn hơn hoặc bằng 0 thì I nhận giá trị là b,ngược lại I sẽ nhận giá trị là 255+b
2.3.4 Các lệnh điều khiển rẽ nhánh chương trình
Ví dụ: Viết chương trình nhập vào một dãy số nguyên từ đối dòng lệnh, sắp xếp dãy số
đó và hiển thị dãy số sau khi sắp xếp lên màn hình
a=new int[args.length];
}
for(i=0;i<args.length;i++) {
a[i]=Integer.parseInt(args[i]);
System.out.print(a[i]+" ");
} System.out.println();
for(i=0;i<a.length-1;i++)
for(j=i+1;j<a.length;j++)
Trang 14if(a[i]>a[j]) {
tg=a[i];
a[i]=a[j];
a[j]=tg;
} System.out.println("Day so sau khi sap xep la:");
Trang 15<Điều_kiện> có giá trị false.
<Điều_kiện> là biểu thức boolean
Ví dụ: Lập chương trình in ra dãy số Fibonaci có các giá trị nhỏ hơn 50
System.out.println(hi);
hi=lo+hi;
lo=hi-lo;
} }
Trang 16while(<Điều_kiện_lặp>) {
Lệnh break: Được dùng để kết thúc trình tự thực hiện lệnh trong lệnh switch
hoặc được sử dụng để thoát ra khỏi một vòng lặp
Trang 17Ta thấy rằng chương trình không in ra giá trị i=5 vì khi kiểm tra điều kiện chương trình
bỏ qua giá trị i=5 và thực hiện lệnh với giá trị I còn lại của vòng lặp
Lệnh return
Trang 18Được sử dụng để kết thúc việc thực hiện của hàm hiện thời và chuyển điều khiểnchương trình về cho chương trình đã gọi phương thức
2.4 Các lớp và các đối tượng trong Java
Đơn vị cơ bản trong lập trình Java là lớp Các lớp bao gồm các phương thức thực hiệncông việc tính toán Các lớp cũng đưa ra cấu trúc của đối tượng và cơ chế tạo ra đốitượng từ các định nghĩa lớp
2.4.1 Cấu trúc chung của một lớp
[<phạm vi hoặc kiểm soát truy nhập>] class <Tên lớp> [extends <Tên lớp cha>] [implements <Tên giao diện>]
{
<Các thành phần lớp>
}
Khuôn mẫu của một lớp
Các kiểu lớp trong Java
kiểu_dữ_liệun biếnnphương_thức1()phương_thức2()
phương_thứcm()
Trang 19<Kiểu trả về> có thể là kiểu nguyên thủy, kiểu lớp hoặc không có giá trị trả lại (kiểu void)
<Danh sách tham biến hình thức> bao gồm dãy các tham biến (kiểu và tên) phân cách với nhau bởi dấu phẩy
Các kiểu phạm vi hay kiểm soát truy cập
public: Các thành phần được khai báo là public có thể được truy cập ở bất kỳ nơi
nào có thể truy cập được và chúng được thừa kế bởi các lớp con của nó
private: Các thành phần được khai báo là private chỉ có thể được truy cập trong
chính lớp đó
protected: Các thành phần được khai báo là protected có thể được truy cập và
thừa kế bởi các lớp con và có thể truy xuất bởi mã lệnh của cùng gói đó
Constructor
Constructor là một phương thức đặc biệt không có giá trị trả về và có tên trùngvới tên lớp Trường hợp không có constructor nào được đưa ra trình biên dịch cung cấpconstructor mặc định cho lớp đó
Một đối tượng được tạo mới và được cho trước một giá trị khởi đầu Các trường
có thể được khởi tạo bằng một giá trị khi chúng được khai báo, điều này đủ để đảm bảomột trạng thái khởi đầu đúng đắn
Các phương thức
Các phương thức của một lớp thường chứa mã có thể hiểu và thao tác mộttrạng thái của đối tượng Một số lớp có các trường public để người lập trình có thể thaotác trực tiếp, nhưng trong hầu hết các trường hợp điều này không phải là một ý tưởngtốt
public class Point
{
protected double x,y;
public Point(double x,double y)
Trang 20Point p=new Point(3.0,6.0);
System.out.println("Thong tin ve toa do diem ban dau:");
Tham chiếu this
Thông thường, đối tượng nhận phương thức cần phải biết tham chiếu của nó
Trong lớp Point có constructor
public Point(double x,double y)
{
Trang 21this.y=y;
}
Giả sử nếu sửa đổi constructor bằng cách thay đổi như sau:
public Point(double x,double y)
2.4.2 Thừa kế trong Java
class Point3C extends Point2C