11/08/2018, 19:02

Package trong java

Lớp và đối tượng trong java 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 ...

Lớp và đối tượng trong java

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.

Lợi thế của việc sử dụng package trong java

  1. Package được sử dụng để phân loại lớp và interface giúp dễ dàng bảo trì.
  2. Package cung cấp bảo vể truy cập
  3. Package khắc phục được việc đặt trùng tên.
Package trong java

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
Note: Nếu bạn import một package thì package con của package đó không được import.
Thứ tự của chương trình phải là package->import->class.
thứ tự của package trong java

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.

Tiêu chuẩn để định nghĩa tên package trong java là domain.company.package ví dụ như: vn.viettuts.action hoặc org.sssit.dao.

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:

Ví dụ cách tổ chức package chuyên nghiệp trong java
Lớp và đối tượng trong java

:

  • Access Modifier trong Java
  • Tính đóng gói trong java
0