Package trong JAVA

0
2197
Package trong Java

Java Package là một nhóm các loại class, interface và sub-package tương tự nhau.

Package trong Java có thể được phân loại theo hai dạng, built-in package (có sẵn) và user-defined package (gói do người dùng định nghĩa)

Có nhiều package có sẵn như java, lang, awt, javax, swing, net, io, sql, v.v.

Ở đây, chúng ta sẽ tìm hiểu chi tiết về cách tạo và sử dụng các package do người dùng định nghĩa.

Ưu điểm của Package trong Java

  • Package trong Java được sử dụng để phân loại các class và interface để chúng có thể dễ dàng bảo trì.
  • Package trong Java cung cấp khả năng bảo vệ quyền truy cập.
  • Package trong Java loại bỏ vấn đề xung đột đặt tên.

Ví dụ về Package trong Java

Từ khóa package được sử dụng để tạo một Package trong java.

// Tên file TestPackage.java 
package testpack;  
public class TestPackage{  
    public static void main(String args[]){  
        System.out.println("Chỗ này để test pack ông ạ");  
    }  
}  

Làm thế nào để biên dịch package?

Nếu bạn không sử dụng bất kỳ IDE nào, bạn cần thực hiện theo cú pháp dưới đây:

javac -d directory javafilename

Ví dụ, chúng ta biên dịch package trên:

javac -d . TestPackage.java

Ký hiệu -d chỉ định đích nơi đặt tệp class đã tạo. Bạn có thể sử dụng bất kỳ tên thư mục nào như /home (trong trường hợp Linux), d:/abc (trong trường hợp windows), v.v. Nếu bạn muốn giữ package trong cùng một thư mục, bạn có thể sử dụng. (dấu chấm).

Cách chạy chương trình package trong Java

Bạn cần sử dụng tên đủ điều kiện, ví dụ: testpack.TestPackage, v.v. để chạy class.

Để biên dịch:

javac -d . TestPackage

Để chạy chương trình:

java testpack.TestPackage

Kết quả:

Chỗ này để test pack ông ạ

-d là một ký hiệu cho trình biên dịch biết nơi đặt tệp class, tức là nó đại diện cho đích. Dấu chấm . đại diện cho thư mục hiện tại.

Làm thế nào truy cập Package từ Package khác?

Có ba cách để truy cập package từ bên ngoài package.

  • import tenpackage. *;
  • import tenpackage.TenClass;
  • Tên đầy đủ

1. Sử dụng import package.*

Nếu bạn sử dụng tenpackage. * thì tất cả các class và interface của package này sẽ có thể truy cập được nhưng không phải là các sub-package.

Từ khóa import được sử dụng để làm cho các class và interface của một package khác có thể truy cập được vào package hiện tại.

Ví dụ:

// Lưu là A.java  
package pack;  
public class A{  
    public void thongBao(){
        System.out.println("Xin chào, đây là A");
    }  
}
// Lưu là B.java
package mypack;
import pack.*;

class B{
    public static void main(String args[]){
       A a = new A();
       a.thongBao();
    }
}

Kết quả:

Xin chào, đây là A

2. Sử dung tenpackage.TenClass

Nếu sử dụng import tenpackage.TenClass thì chỉ class TenClass được khai báo của gói này mới có thể truy cập được.

Ví dụ:

// Lưu là A.java trong package pack
package pack;  
public class A{  
    public void thongBao1(){
        System.out.println("Xin chào, đây là A");
    }  
}
// Lưu là B.java trong package pack
package pack;  
public class B{  
    public void thongBao2(){
        System.out.println("Xin chào, đây là B");
    }  
}
// Lưu là C.java
package mypack;
import pack.A;

class C{
    public static void main(String args[]){
       A a = new A();
       a.thongBao1();
    }
}

Kết quả:

Xin chào, đây là A

Còn nếu:

// Lưu là C.java
package mypack;
import pack.A;

class C{
    public static void main(String args[]){
       B b = new B(); // Lỗi
       b.thongBao2(); // Lỗi
    }
}

3. Sử dụng tên đầy đủ

Nếu bạn sử dụng tên đầy đủ thì chỉ class được khai báo của gói này mới có thể truy cập được.

Bây giờ không cần phải import. Nhưng bạn cần sử dụng tên đầy đủ mỗi khi truy cập vào class hoặc interface.

Nó thường được sử dụng khi hai gói có cùng tên lớp

Ví dụ: Các gói java.utiljava.sql đều chứa lớp Date. trong trường hợp này chúng ta sẽ sử dụng tên đẩy đủ để truy cập.

Ví dụ đơn giản minh họa cách sử dụng tên đầy đủ:

// Lưu là A.java trong package pack
package pack;  
public class A{  
    public void thongBao(){
        System.out.println("Xin chào, đây là A");
    }  
}
// Lưu là B.java trong package mypack
package mypack;
import pack.*;

class B{
    public static void main(String args[]){
       pack.A a = new pack.A(); // Sử dụng tên đầy đủ
       a.thongBao();
    }
}

Kết quả:

Xin chào, đây là A

Lưu ý: Nếu bạn import một package, các sub-package sẽ không được import

Nếu bạn import một package, tất cả các class và interface của package đó sẽ được import ngoại trừ các class và interface của các sub-package. Do đó, bạn cũng cần phải import sub-package nếu muốn sử dụng chúng.

Lưu ý: Trình tự của chương trình phải là package, sau đó và import rồi đến class.

Ghi chú: Tham gia ngay khóa học KHÓA HỌC JAVA WEB để đi làm sớm với ngôn ngữ Java, hiểu sâu hơn về ngôn ngữ, hệ sinh thái của Java.

Sub-package trong Java

Package bên trong package được gọi là sub-package. Nó được tạo để phân loại package.

Hãy lấy một ví dụ, Sun Microsystem đã xác định một package có tên java chứa nhiều class như System, String, Reader, Writer, Socket, v.v.

Các class này đại diện cho một nhóm cụ thể, ví dụ: Các lớp Reader và Writer dành cho hoạt động Input / Output, các class Socket và ServerSocket dành cho mạng, v.v.

Vì vậy, Sun đã phân loại gói java thành các gói con như lang, net, io, v.v. và đặt các class liên quan đến Input / Output trong gói io, các class Server và ServerSocket trong các gói net, v.v.

Tiêu chuẩn để định nghĩa package viết thường, tuy nhiên trong các dự án chuyên nghiệp, người ta có thể sử dụng là domain.company.package, ví dụ: com.laptrinhvienjava.bean hoặc org.sssit.dao.

Ví dụ:

package com.laptrinhvienjava.core;  
class Test{  
    public static void main(String args[]){  
        System.out.println("Xin chào sub-package");  
   }  
} 

Để biên dịch:

javac -d . Test.java

Để chạy chương trình:

javac com.laptrinhvienjava.core.Test

Kết quả:

Xin chào sub-package

Làm thế nào để gửi file class đến một thư mục hoặc ổ đĩa khác?

Có một tình huống trong khi lập trình, có thể bạn sẽ muốn đặt tệp class của tệp nguồn A.java trong thư mục lớp của ổ đĩa C:

Ví dụ:

// Lưu là Test.java  
package mypack;  
public class Test{  
    public static void main(String args[]){  
        System.out.println("Xin chào");  
    }
}

Để biên dịch:

e:\sources> javac -d c:\classes Test.java

Để chạy chương trình:

Để chạy chương trình này từ thư mục e:\source, bạn cần thiết lập classpath của thư mục chứa file class.

e:\sources> set classpath=c:\classes;.;
e:\sources> java mypack.Test

Một cách khác để chạy chương trình bằng -classpath

Ký hiệu -classpath có thể được sử dụng với javac và java tool.

Để chạy chương trình này từ thư mục e:\source, bạn có thể sử dụng ký hiệu -classpath của java để cho biết nơi tìm file class.

Ví dụ:

e:\sources> java -classpath c:\classes mypack.Test

Kết quả:

Xin chào

Cách tải file class hoặc file jar

Có hai cách để tải tệp lớp tạm thời và vĩnh viễn.

Tạm thời:

  • Bằng cách thiết lập classpath trong command prompt
  • Sử dụng -classpath

Dài hạn:

  • Bằng cách thiết lập classpath trong các biến môi trường
  • Bằng cách tạo tệp jar, chứa tất cả các file class và sao chép file jar trong thư mục jre/lib/ext

Quy tắc: Chỉ có thể có một public class trong tệp nguồn java và nó phải được lưu bằng tên lớp public.

// Lưu là C.java nếu không thì sẽ lỗi biên dịch
  
class A{}  
class B{}  
public class C{}  

Làm thế nào để đặt hai file public trong một package?

Nếu bạn muốn đặt hai file public trong một package, hãy có hai tệp nguồn java chứa một lớp public, nhưng giữ nguyên tên package.

Ví dụ:

// Lưu là A.java  
  
package laptrinhvienjava;  
public class A{}  
// Lưu là B.java  
  
package laptrinhvienjava;  
public class B{}  

Như vậy, bài viết này mình đã giúp bạn tìm hiểu về package trong Java. Giống như đã nói ở trên, package được sử dụng để chia tách chương trình thành các phần nhỏ, dễ bảo trì hơn, loại bỏ xung đột về đặt tên và tăng thêm bảo mật.

Các lợi ích này đặc biệt hữu ích trong các dự án lớn, chuyên nghiệp. Do đó, bạn sẽ sử dụng nó nhiều khi đi làm chuyên nghiệp.

Chúc bạn học tốt.