Cùng tìm hiểu về package trong Java. Bạn sẽ học được khái niệm package trong Java là gì, cách sử dụng package để đóng gói class, cũng như cách import package trong Java sau bài học này.
Tóm Tắt
package là gì trong Java
package trong Java hay còn gọi là gói trong Java là một cơ chế để phân loại và nhóm các class (lớp) và API (giao diện) sử dụng trong chương trình Java.
Ngôn ngữ Java được xây dựng trên nền tảng class, và để viết một chương trình Java chúng ta cần phải tạo ra rất nhiều class khác nhau, và tất cả các class này đều không được trùng tên nhau.
Để có thể quy hoạch và quản lý các class trong Java, chúng ta cần phải phân loại, chia nhỏ và gộp nhóm chúng để dễ sử dụng. Khi đã phân loại chúng trong các group rồi, chúng ta có thể sử dụng các class với cùng tên nhau miễn là chúng thuộc các group khác nhau. Và từng group chứa các class đã được phân loại này được gọi là package trong Java.
Việc phân loại các class vào các package về bản chất là chia nhỏ một file chứa mã nguồn chương trình Java thành các file nhỏ hơn và lưu vào các thư mục khác nhau trong thư mục chứa mã nguồn chương trình Java.
Nói cách khác, package thực chất là một thư mục (folder) nằm bên trong thư mục gốc chứa chương trình Java chứa các file nhỏ, với mỗi file đó sẽ được dùng để lưu mã nguồn của class cần đóng gói bên trong package.
Ví dụ, chúng ta có thư mục gốc src chứa chương trình chính là Main.java. Từ thư mục gốc này, chúng ta có package hello với đường dẫn src/lang/ulti/hello chứa các file .java khác nhau bên trong nó, với mỗi file chứa mã nguồn của một class cần đóng gói vào package như sau:
src/ ├---lang ├ ├---ulti ├ ├---hello ├ ├--- HelloJava.java ├ ├--- HelloPython.java ├ ├--- HelloC.java ├---Main.java
Các loại package trong Java
Giống như class thì chúng ta cũng có 2 loại package trong Java, đó là package được xây dựng sẵn, và package do người dùng định nghĩa.
Một số các package được xây dựng sẵn trong Java được sử dụng phổ biến có thể kể đến như sau:
Chức năngTên PackageLớp cơ sởjava.langTruy cậpjava.io, java.nio, java.netTính toán số họcjava.mathGraphicjava.awt, javax.swingXử lý textjava.textXử lý hình ảnhjava.awt.image, javax.imageioBảo mậtjava.security, javax.cryptoCơ sở dữ liệujava.sqlScriptjava.scriptAppletjava.appletJavaBeansjava.beans
Ngoài các package được xây dựng sẵn, chúng ta cũng có thể tự tạo ra các package để chứa các class, giúp tái sử dụng các class nhiều lần trong chương trình và tiết kiệm công sức viết code.
Tạo package trong Java
Để tạo package trong Java, trước hết chúng ta cần tạo ra các thư mục chứa thư mục được dùng làm package cần tạo trong thư mục gốc chứa mã nguồn chương trình Java. Ví dụ với package hello ở trên, thì thư mục gốc (chứa chương trình sample.java) cần chạy là thư mục src, và trong thư mục này, chúng ta cần phải tạo ra các thư mục con cấp 1, cấp 2 là lang, ulti, và thư mục đầu cuối dùng làm package là thư mục hello.
Sau đó, chúng ta sẽ cần tạo ra các file .java dùng để viết và lưu nội dung các class cần đóng gói vào trong package này. Tất nhiên, tên các file này cũng cần phải trùng với tên class được khai báo trong nó, theo quy tắc viết class của Java.
Cấu trúc một file chứa mã nguồn class cần đóng gói trong package gồm 2 phần, một phần là để khai báo tên package, và phần còn lại là để khai báo class.
package package_name;
public class ClassName {
//...
}
Trong đó:
package
là từ khóa dùng để khai báo package trong Javapackage_name
là tên package cần khai báo. Tên package được đặt theo tên của các thư mục chứa nó (không bao gồm thư mục gốc) cách nhau bởi dấu chấm, ví dụ như làlang.ulti.hello
chẳng hạn. Lưu ý là tên các folder nên đặt dưới dạng chữ thường.public class ClassName{}
dùng để khai báo nội dung class cần đóng gói. VàClassName
là tên của class cần đóng gói, cũng được sử dụng làm tên file dùng để lưu các nội dung này.
Ví dụ, chúng ta có thể tạo ra các file bên trong thư mục lang/ulti/hello
để lưu mã nguồn của các class cần đóng gói vào package hello như sau:
-
File HelloJava.java chứa mã nguồn class HelloJava như sau:
package
lang.ulti.hello;public
class
HelloJava
{public
void
msg
()
{System.out.println(
"Hello Java!"
);}
}
-
File HelloPython.java chứa mã nguồn class HelloPython như sau:
package
lang.ulti.hello;public
class
HelloPython
{public
void
msg
()
{System.out.println(
"Hello Python!"
);System.out.println(
"Java "
+"Python"
);}
}
Tên lớp đủ điều kiện trong Java
Sau khi đã đóng gói một class trong một Package, chúng ta có 2 phương pháp để sử dụng nó trong chương trình chính, đó là sử dụng tên lớp đủ điều kiện của nó, hoặc là nạp package chứa nó vào trong chương trình bằng lệnh import.
Trước tiên, hãy cùng tìm hiểu về phương pháp sử dụng một class đã được đóng gói thông qua tên lớp đủ điều kiện trong Java.
Tên lớp đủ điều kiện trong Java là gì
Tên lớp đủ điều kiện trong Java hay còn gọi là fully-qualified class name là tên gọi đầy đủ của một class, bao gồm cả tên của package chứa nó.
Ví dụ, với package hello mà chúng ta đã tạo ở trên, thì tên lớp đủ điều kiện của nó sẽ là lang.ulti.hello.
Tương tự với các package được tạo sẵn, ví dụ như tên lớp đủ điều kiện của class inner là java.lang.Character$Subset chẳng hạn.
Cách lấy tên lớp đủ điều kiện trong Java
Để lấy tên lớp đủ điều kiện trong Java, chúng ta sẽ dùng đến một phương thức gọi là getName().
Ví dụ, chúng ta lấy tên lớp đủ điều kiện của class String như sau:
public
class
Main
{
public
static
void
main
(String[] argv)
throws
Exception {Class cls = java.lang.String.class;
String name = cls.getName();
System.out.println(name);
}
}
Kết quả:
java.lang.String
Sử dụng class đã đóng gói bằng tên lớp đủ điều kiện
Để sử dụng một class đã đóng gói trong một package, chúng ta có thể viết tên đủ điều kiện của nó, bao gồm cả package chứa nó, mỗi khi cần dùng nó trong chương trình.
Ví dụ, để sử dụng class HelloJava trong package hello đã tạo ở trên trong chương trình chính Main.java, chúng ta có thể viết như sau:
import
lang.ulti.hello.HelloJava;import
lang.ulti.hello.HelloPython;
public
class
Main
{
public
static
void
main
(String[] args)
{lang.ulti.hello.HelloJava hello1 =
new
lang.ulti.hello.HelloJava();hello1.msg();
lang.ulti.hello.HelloJava hello2 =
new
lang.ulti.hello.HelloJava();hello2.msg();
}
}
Kết quả, class HelloJava được gọi 2 lần trong chương trình và in ra màn hình như sau:
Hello Java!
Hello Java!
import package trong Java
Sau khi tạo package, chúng ta có thể sử dụng tới tên lớp đủ điều kiện của các class trong nó khi cần thiết trong chương trình.
Tuy nhiên bạn có thể thấy rõ, việc viết tên lớp đủ điều kiện như vậy trong từng lần gọi là khá rườm rà, do đó để tiết kiệm công sức thì chúng ta sẽ có phương pháp thứ hai để sử dụng class được đóng gói trong một package, đó chính là import package trong Java.
Với phương pháp này, chúng ta có thể nạp package chứa class cần sử dụng một lần vào trong chương trình chính, và sử dụng các class cũng như các API, phương thức được đóng gói trong nó với tên rút gọn trong các lần sử dụng trong chương .
Để nạp một package vào chương trình, chúng ta cần sử dụng tới từ khoá import. Cách import package trong Java đã được Kiyoshi hướng dẫn chi tiết trong bài:
Ví dụ cụ thể, chúng ta import package hello ở trên vào trong chương trình chính Main.java như sau:
import
lang.ulti.hello.HelloJava;import
lang.ulti.hello.HelloPython;
public
class
Main
{
public
static
void
main
(String[] args)
{HelloJava hello1 =
new
HelloJava();hello1.msg();
HelloPython hello2 =
new
HelloPython();hello2.msg();
}
}
Sau khi import các class HelloJava và HelloPython chứa trong package hello vào chương trình, chúng ta có thể sử dụng các phương thức msg() tương ứng trong các class này để in ra màn hình kết quả như sau:
Hello Java!
Hello Python!
Java Python
Tổng kết
Trên đây Kiyoshi đã hướng dẫn bạn về cách sử dụng package trong Java rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.
Và hãy cùng tìm hiểu những kiến thức sâu hơn về Java trong các bài học tiếp theo.