Một package (gói) trong java là một nhóm các kiểu tương tự của các lớp, giao diện và các package con .
Package trong java có thể được phân loại theo hai hình thức, package được dựng sẵn và package do người dùng định nghĩa.
Có rất nhiều package được dựng sẵn như java, lang, AWT, javax, swing, net, io, util, sql, ...
Trong bài này, chúng ta sẽ học:
- Chi tiết về việc tạo và sử dụng các package người dùng định nghĩa.
- Ví dụ cách tổ chức package chuyên nghiệp trong java.
Nội dung chính
Lợi thế của việc sử dụng package trong java
- Package được sử dụng để phân loại lớp và interface giúp dễ dàng bảo trì.
- Package cung cấp bảo vể truy cập
- Package khắc phục được việc đặt trùng tên.
Ví dụ về java package
Từ khóa package được sử dụng để tạo một package trong java
//Save file Simple.java package mypack; public class Simple { public static void main(String args[]) { System.out.println("Learn java package"); } }
Biên dịch java package
Nếu bạn không sử dụng IDE, bạn cần thực hiện theo cú pháp dưới đây:
javac -d directory javafilename
Ví dụ:
javac -d . Simple.java
Lệnh -d được sử dụng để xách định nơi lưu trữ file .class sau khi biên dịch. Bạn có thể sử dụng bất kỳ tên thư mục nào như /home (Trong Linux OS), D:/temp (Trong Window OS). Nếu bạn muốn giữ các package này trong thư mục hiện tại ban sử dụng dấu chấm (.).
Run java package
Để run java package, bạn cần phải sử dụng tên đầy đủ. Ví dụ mypack.Simple.
Compile: javac -d . Simple.java
Run: java mypack.Simple
Kết quả:
Learn java package
Dấu chấm (.) biển diễn thư mục hiện tại.
Truy cập package từ package khác
Có 3 cách để truy cập package từ package bên ngoài:
- Khai báo import package.*;
- Khai báo import package.classname;
- Sử dụng tên đầy đủ.
1. Sử dụng packagename.*
Nếu bạn sử dụng packagename.*. Thì tất cả các lớp và các interface của các gói này sẽ có thể truy cập, nhưng gói con của gói này thì không được truy cập.
Từ khóa import được sử dụng để truy cập các lớp và interface của gói khác từ gói hiện tại.
Ví dụ:
package pack; public class A { public void msg() { System.out.println("Hello"); } }
package mypack; import pack.*; class B { public static void main(String args[]) { A obj = new A(); obj.msg(); } }
Kết quả:
Hello
2. Sử dụng packagename.classname
Nếu bạn khai báo import package.classname thì chỉ được truy cập tới lớp đã được khai báo của package này.
Ví dụ:
package pack; public class A { public void msg() { System.out.println("Hello"); } }
package mypack; import pack.A; class B { public static void main(String args[]) { A obj = new A(); obj.msg(); } }
Kết quả:
Hello
3. Sử dụng tên đầy đủ
Nếu bạn sử dụng tên đầy đủ thì chỉ được truy cập tới lớp đã được khai báo của package này. Bạn không cần phải sử dụng đến từ khóa import. Nhưng bạn cần phải sử dụng tên đầy đủ mỗi khi bạn truy cập vào các lớp hoặc interface.
Cách này thường được sử dụng khi 2 package có tên lớp giống nhau. Ví dụ, 2 package java.util và java.sql chứa lớp có tên giống nhau là lớp Date
Ví dụ:
package pack; public class A { public void msg() { System.out.println("Hello"); } }
package mypack; class B{ public static void main(String args[]){ pack.A obj = new pack.A(); //Sử dụng tên đầy đủ obj.msg(); } }
Kết quả:
Hello
Thứ tự của chương trình phải là package->import->class.
Package con trong java
Package bên trong một package khác được gọi là subpackage hay package con trong java.
Ví dụ, Sun Microsystem đã định nghĩa một gói có tên java chứa nhiều lớp như System, String, Reader, Writer, Socket, ... Các lớp này đại diện cho một nhóm cụ thể ví dụ như các lớp Reader và Writer cho các hoạt động Input/Output, Socket và ServerSocket các lớp xử lý mạng, ... Vì vậy, Sun đã phân loại lại gói java thành các gói phụ như lang, net, io, ... Và đặt các lớp liên quan đến Input/Output trong gói io, các lớp Server và ServerSocket trong các gói net.
Ví dụ về Subpackage
package vn.viettuts.core; public class Simple { public static void main(String args[]) { System.out.println("Hello subpackage"); } }
Compile: javac -d . Simple.java
Run: java vn.viettuts.core.Simple
Kết quả:
Hello subpackage
Ví dụ cách tổ chức package chuyên nghiệp trong java
Các ví dụ ở trên cung cấp cho bạn cách để compile và run một lớp bên trong package do người dụng định nghĩa một cách thủ công. Khi đi làm về java trong môi trường thực tế, bạn sẽ phải học và sử dụng các IDE như eclipse, netbean, ... Những IDE này cung cấp cho bạn cách tạo và biên dịch cả một dự án đơn giản hơn rất nhiều. Khi đó bạn không cần phải nhớ các lệnh compile và run như ở trên.
Dưới dây là ví dụ cách tổ chức package chuyên nghiệp cho một dự án java web trên eclipse: