1. Kiến trúc chương trình Java
Dạng cơ bản của một tập tin mã nguồn Java có cấu trúc như sau :
Một tệp mã nguồn Java có thể có ba phần chính:
• Phần khai báo tên gói (khối) bằng từ khoá package.
• Phần khai báo thư viện tham khảo bằng từ khoá import.
• Phần khai báo nội dung lớp bằng từ khoá class.
Khai báo Package
Package được dùng để đóng gói các lớp trong chương trình lại với nhau thành một khối. Đây là một cách hữu hiệu để lưu trữ các lớp gần giống nhau hoặc có cùng một module thành một khối thống nhất.
Cú pháp khai báo tên gói bằng từ khoá package:
package;
Để đặt tên package trong chương trình, người ta có thể tiến hành như đặt tên thư mục trên ổ đĩa. Nghĩa là bắt dầu bằng tên có phạm vi lớn, cho đến các tên có phạm vi nhỏ, cuối cùng là tên các gói trực tiếp chứa các lớp. Phạm vi đặt tên gói, trên thực tế, được tiến hành theo thứ tự phạm vi lớn đến nhỏ như sau:
• Tên tổ chức
• Tên công ty
• Tên dự án
• Tên modul trong dự án
• Tên các chức năng trong modul.
Ví dụ:
• Tên miền của công ty là syz.com
• Tên dự án là pro
• Dự án có hai modul là mod1và mod2
• Modul mod1 có hai chức năng là kết nối cơ sở dữ liệu connection và biểu diễn dữ liệu bean.
• Modul mod2 có hai chức năng là giao tiếp interface và xử lí yêu cầu process.
Ưu điểm của package:
• Cho phép nhóm các lớp vào với nhau thành các đơn vị nhỏ hơn. Việc thao tác trên các đơn vị khối sẽ gọn hơn thao tác trên một tập các lớp.
• Tránh việc xung đột khi đặt tên lớp. Vì các lớp không cùng package thì có thể đặt tên trùng nhau. Khi số lượng lớp của chương trình quá lớn ta có thể tránh phải đặt tên khác nhau cho các lớp bằng cách đặt chúng vào các package khác nhau.
• Cho phép bảo vệ các lớp. Khi chương trình lớn, việc chia nhỏ chương trình thành các package sẽ thuận lợi hơn cho việc quản lí và phát triển.
• Tên gói còn được dùng để định danh lớp trong ứng dụng.
Lưu ý:
• Dòng lệnh khai báo tên khối phải được đặt đầu tiên trong tện tin mã chương trình.
• Chỉ được khai báo tối đa một tên khối đối với mỗi tệp mã nguồn Java.
• Các tệp tin của các lớp nằm cùng gói ứng dụng phải được lưu trong cùng một thư mục (tên thư mục là tên khối) theo cấu trúc khối của dự án.
• Tên khối nên đặt theo chữ thường vì tên khối sẽ là tên thư mục tương ứng trong ổ đĩa, tránh nhầm lẫn với tên các tệp tin là tên các lớp của chương trình.
• Khi không phân chia chương trình thành khối (chương trình đơn giản), không cần thiết phải khai báo tên khối ở đầu chương trình.
Khai báo thư viện
Khai báo thư viện để chỉ ra những thư viện đã được định nghĩa sẵn mà chương trình sẽ tham khảo
tới. Cú pháp khai báo thư viện với từ khóa import như sau:
import;
Java chuẩn cung cấp một số thư viện như sau:
• java.lang: cung cấp các hàm thao tác trên các kiểu dữ liệu cơbản, xử lí lỗi và ngoại lệ, xử lí vào ra trên các thiết bị chuẩn như bàn phím và màn hình.
• java.applet: cung cấp các hàm cho xây dựng các applet
• java.awt: cung cấp các hàm cho xây dựng các ứng dụng đồ hoạ với các thành phần giao diện multi media (sẽ trình bày chi tiết trong Chương 6).
• java.io: cung cấp các hàm xử lí vào/ra trên các thiêt bị chuẩn và các thiết bị ngoại vi.
• java.util: cung cấp các hàm tiện ích trong xử lí liên quan đến các kiểu dữ liệu có cấu trúc như Date, Stack, Vector.
Ví dụ, nếu trong chương trình cần đến các thao tác chuyển kiểu đổi dữ liệu tường minh (từ kiểu string sang kiểu int), thì ta sẽphải tham khảo thư viện java.lang: import java.lang.*;
Lưu ý:
• Nếu muốn khai báo tham khảo nhiều thư viện, phải khai báo tham khảo mỗi thư viện với một từ khóa import.
• Nếu chỉ tham khảo một vài lớp trong một thư viện, nên chỉ rõ tham khảo lớp nào, thay vì phải khai báo tham khảo cả gói (bằng kí hiệu “*”) vì tham khảo cả gói sẽ tăng kích cỡ tệp tin class sau khi biên dịch.
• Nếu không tham khảo thư viện nào, không cần thiết phải khai báo các tham khảo với từ khoá import.
Khai báo lớp
Phần thứ ba là phần khai báo lớp và nội dung của lớp, phần này luôn bắt buộc phải có đối với một tệp mã nguồn Java:
• Khai báo tên lớp với từ khoá class.
• Khái báo các thuộc tính của lớp.
• Khai báo các phương thức của lớp
Chương trình Java đầu tiên
Chương trình sau đây cho phép hiển thị một thông điệp (Nằm trong tệp mã nguồn First.java):
package vidu.chuong3;
Đây là dòng khai báo tên khối của chương trình, vì tên khối của chương trình được đặt theo hai
mức:
• Mức thứ nhất là kiểu bài: ví dụ(vidu) hoặc bài tập (baitap).
• Mức thứ hai là tên của chương: chuong3, chuong4, chuong5, chuong6
Vì đây là ví dụ, nằm ở chương 3 nên thuộc vào gói vidu.chuong3. Đồng thời, tệp tin First.java sẽ
nằm trong thưmục: ../vidu/chuong3/.
Chương trình này không tham khảo thư viện nào nên không cần lệnh import nào.
// Đây là chương trình “First.java”
Ký hiệu “// ” dùng để chú thích dòng lệnh. Trình biên dịch sẽ bỏ qua dòng chú thích này. Java hỗ trợ hai loại chú thích:
• Loại chú thích trên một dòng, dùng “//”. Trình biên dịch sẽ bỏ qua nội dung bắt đầu từ kí
hiệu “//” cho đến hết dòng lệnh chứa nó.
• Loại chú thích trên nhiều dòng có thể bắt đầu với “/*” và kết thúc với “*/”. Trình biên dịch sẽ bỏ qua nội dung nằm giữa hai kí hiệu này.
Dòng kế tiếp khai báo lớp có tên First: Bắt đầu với từ khóa class, kế đến là tên lớp class First
Một định nghĩa lớp nằm trọn vẹn giữa hai ngoặc móc mở“{“ và đóng “}”. Các ngoặc này đánh dấu bắt đầu và kết thúc một khối lệnh.
public static void main(String args[ ])
Đây là phương thức chính, từ đây chương trình bắt đầu việc thực thi của mình. Tất cả các ứng dụng java đều sử dụng một phương thức main này.
• từ khóa public là một chỉ định truy xuất. Nó cho biết thành viên của lớp có thể được truy xuất từ bất cứ đâu trong chương trình.
• từ khóa static cho phép main được gọi tới mà không cần tạo ra một thể hiện (instance) của lớp. Nó không phụ thuộc vào các thể hiện của lớp được tạo ra.
• từ khóa void thông báo cho máy tính biết rằng phương thức sẽ không trả lại bất cứ giá trị nào khi thực thi chương trình.
• String args[]là tham số dùng trong phương thức main. Khi không có một thông tin nào được chuyển vào main, phương thức được thực hiện với các dữ liệu rỗng – không có gì trong dấu ngoặc đơn.
• System.out.println(“Hello World”); Dòng lệnh này hiển thị chuỗi “Hello World” trên màn hình. Lệnh println()cho phép hiển thị chuỗi được truyền vào lên màn hình.
Dạng cơ bản của một tập tin mã nguồn Java có cấu trúc như sau :
package packageName; // Khai báo tên gói, nếu có import java.awt.*; // Khai báo tên thưviện sẵn có, nếu cần dùng class className // Khai báo tên lớp { /* Đây là dòng ghi chú */ int var; // Khai báo biến public void methodName() // Khai báo tên phương thức { /* Phần thân của phương thức */ statement(s); // Lệnh thực hiện } }
Một tệp mã nguồn Java có thể có ba phần chính:
• Phần khai báo tên gói (khối) bằng từ khoá package.
• Phần khai báo thư viện tham khảo bằng từ khoá import.
• Phần khai báo nội dung lớp bằng từ khoá class.
Khai báo Package
Package được dùng để đóng gói các lớp trong chương trình lại với nhau thành một khối. Đây là một cách hữu hiệu để lưu trữ các lớp gần giống nhau hoặc có cùng một module thành một khối thống nhất.
Cú pháp khai báo tên gói bằng từ khoá package:
package
Để đặt tên package trong chương trình, người ta có thể tiến hành như đặt tên thư mục trên ổ đĩa. Nghĩa là bắt dầu bằng tên có phạm vi lớn, cho đến các tên có phạm vi nhỏ, cuối cùng là tên các gói trực tiếp chứa các lớp. Phạm vi đặt tên gói, trên thực tế, được tiến hành theo thứ tự phạm vi lớn đến nhỏ như sau:
• Tên tổ chức
• Tên công ty
• Tên dự án
• Tên modul trong dự án
• Tên các chức năng trong modul.
Ví dụ:
• Tên miền của công ty là syz.com
• Tên dự án là pro
• Dự án có hai modul là mod1và mod2
• Modul mod1 có hai chức năng là kết nối cơ sở dữ liệu connection và biểu diễn dữ liệu bean.
• Modul mod2 có hai chức năng là giao tiếp interface và xử lí yêu cầu process.
Ưu điểm của package:
• Cho phép nhóm các lớp vào với nhau thành các đơn vị nhỏ hơn. Việc thao tác trên các đơn vị khối sẽ gọn hơn thao tác trên một tập các lớp.
• Tránh việc xung đột khi đặt tên lớp. Vì các lớp không cùng package thì có thể đặt tên trùng nhau. Khi số lượng lớp của chương trình quá lớn ta có thể tránh phải đặt tên khác nhau cho các lớp bằng cách đặt chúng vào các package khác nhau.
• Cho phép bảo vệ các lớp. Khi chương trình lớn, việc chia nhỏ chương trình thành các package sẽ thuận lợi hơn cho việc quản lí và phát triển.
• Tên gói còn được dùng để định danh lớp trong ứng dụng.
Lưu ý:
• Dòng lệnh khai báo tên khối phải được đặt đầu tiên trong tện tin mã chương trình.
• Chỉ được khai báo tối đa một tên khối đối với mỗi tệp mã nguồn Java.
• Các tệp tin của các lớp nằm cùng gói ứng dụng phải được lưu trong cùng một thư mục (tên thư mục là tên khối) theo cấu trúc khối của dự án.
• Tên khối nên đặt theo chữ thường vì tên khối sẽ là tên thư mục tương ứng trong ổ đĩa, tránh nhầm lẫn với tên các tệp tin là tên các lớp của chương trình.
• Khi không phân chia chương trình thành khối (chương trình đơn giản), không cần thiết phải khai báo tên khối ở đầu chương trình.
Khai báo thư viện
Khai báo thư viện để chỉ ra những thư viện đã được định nghĩa sẵn mà chương trình sẽ tham khảo
tới. Cú pháp khai báo thư viện với từ khóa import như sau:
import
Java chuẩn cung cấp một số thư viện như sau:
• java.lang: cung cấp các hàm thao tác trên các kiểu dữ liệu cơbản, xử lí lỗi và ngoại lệ, xử lí vào ra trên các thiết bị chuẩn như bàn phím và màn hình.
• java.applet: cung cấp các hàm cho xây dựng các applet
• java.awt: cung cấp các hàm cho xây dựng các ứng dụng đồ hoạ với các thành phần giao diện multi media (sẽ trình bày chi tiết trong Chương 6).
• java.io: cung cấp các hàm xử lí vào/ra trên các thiêt bị chuẩn và các thiết bị ngoại vi.
• java.util: cung cấp các hàm tiện ích trong xử lí liên quan đến các kiểu dữ liệu có cấu trúc như Date, Stack, Vector.
Ví dụ, nếu trong chương trình cần đến các thao tác chuyển kiểu đổi dữ liệu tường minh (từ kiểu string sang kiểu int), thì ta sẽphải tham khảo thư viện java.lang: import java.lang.*;
Lưu ý:
• Nếu muốn khai báo tham khảo nhiều thư viện, phải khai báo tham khảo mỗi thư viện với một từ khóa import.
• Nếu chỉ tham khảo một vài lớp trong một thư viện, nên chỉ rõ tham khảo lớp nào, thay vì phải khai báo tham khảo cả gói (bằng kí hiệu “*”) vì tham khảo cả gói sẽ tăng kích cỡ tệp tin class sau khi biên dịch.
• Nếu không tham khảo thư viện nào, không cần thiết phải khai báo các tham khảo với từ khoá import.
Khai báo lớp
Phần thứ ba là phần khai báo lớp và nội dung của lớp, phần này luôn bắt buộc phải có đối với một tệp mã nguồn Java:
• Khai báo tên lớp với từ khoá class.
• Khái báo các thuộc tính của lớp.
• Khai báo các phương thức của lớp
Chương trình Java đầu tiên
Chương trình sau đây cho phép hiển thị một thông điệp (Nằm trong tệp mã nguồn First.java):
package vidu.chuong3; // Đây là chương trình “First.java” class First { public static void main(String args[]) { System.out.println(“Hello World”); } }Trong Java, tất cả mã lệnh đều phải được tổ chức vào trong một lớp nhất định. Do đó, mỗi tệp tin mã nguồn xác định ít nhất một lớp Java và tên tệp tin phải trùng với tên lớp. Java phân biệt chữ hoa và chữ thường, cho nên tên tập tin của chương trình trên phải trùng với tên lớp: First.java.
package vidu.chuong3;
Đây là dòng khai báo tên khối của chương trình, vì tên khối của chương trình được đặt theo hai
mức:
• Mức thứ nhất là kiểu bài: ví dụ(vidu) hoặc bài tập (baitap).
• Mức thứ hai là tên của chương: chuong3, chuong4, chuong5, chuong6
Vì đây là ví dụ, nằm ở chương 3 nên thuộc vào gói vidu.chuong3. Đồng thời, tệp tin First.java sẽ
nằm trong thưmục: ../vidu/chuong3/.
Chương trình này không tham khảo thư viện nào nên không cần lệnh import nào.
// Đây là chương trình “First.java”
Ký hiệu “// ” dùng để chú thích dòng lệnh. Trình biên dịch sẽ bỏ qua dòng chú thích này. Java hỗ trợ hai loại chú thích:
• Loại chú thích trên một dòng, dùng “//”. Trình biên dịch sẽ bỏ qua nội dung bắt đầu từ kí
hiệu “//” cho đến hết dòng lệnh chứa nó.
• Loại chú thích trên nhiều dòng có thể bắt đầu với “/*” và kết thúc với “*/”. Trình biên dịch sẽ bỏ qua nội dung nằm giữa hai kí hiệu này.
Dòng kế tiếp khai báo lớp có tên First: Bắt đầu với từ khóa class, kế đến là tên lớp class First
Một định nghĩa lớp nằm trọn vẹn giữa hai ngoặc móc mở“{“ và đóng “}”. Các ngoặc này đánh dấu bắt đầu và kết thúc một khối lệnh.
public static void main(String args[ ])
Đây là phương thức chính, từ đây chương trình bắt đầu việc thực thi của mình. Tất cả các ứng dụng java đều sử dụng một phương thức main này.
• từ khóa public là một chỉ định truy xuất. Nó cho biết thành viên của lớp có thể được truy xuất từ bất cứ đâu trong chương trình.
• từ khóa static cho phép main được gọi tới mà không cần tạo ra một thể hiện (instance) của lớp. Nó không phụ thuộc vào các thể hiện của lớp được tạo ra.
• từ khóa void thông báo cho máy tính biết rằng phương thức sẽ không trả lại bất cứ giá trị nào khi thực thi chương trình.
• String args[]là tham số dùng trong phương thức main. Khi không có một thông tin nào được chuyển vào main, phương thức được thực hiện với các dữ liệu rỗng – không có gì trong dấu ngoặc đơn.
• System.out.println(“Hello World”); Dòng lệnh này hiển thị chuỗi “Hello World” trên màn hình. Lệnh println()cho phép hiển thị chuỗi được truyền vào lên màn hình.