Package trong java và ví dụ cụ thể

Package trong java là một group (nhóm) các class, interface và các package khác. Trong java chúng ta sử dụng package để tổ chức cấu trúc dự án hợp lý. Thông thường các class, interface và các package khác chứa trong package cha sẽ có những đặc điểm chung và xử lý cho các tình huống cụ thể.

Java có 2 loại package chính: các package tích hợp sẵn, các package do chúng ta tự định nghĩa.

Các package tích hợp được java xây dựng sẵn dựa trên các nhu cầu thường xuyên của các lập trình viên. Ví dụ

import java.util.Scanner;

Từ khóa import dùng để những package khác vào class, interface etc, của chúng ta để sử dụng. Với đoạn code trên chúng ta có:

  • java: package cha
  • util : package con của java
  • Scanner: là một class chứa trong package util.

Sử dụng package trong java cho chúng ta rất nhiều lợi ích, có thể kể đến như: 

Tái sử dụng

Trong một dự án, sẽ có lúc một logic được sử dụng ở nhiều nơi, nếu mỗi chỗ như vậy bạn đều code lại logic thì việc duplicate code sẽ ngày càng nghiêm trọng. Đến khi logic đó thay đổi thì chúng ta lại phải lục lọi tất cả mọi nơi sử dụng logic đó mà sửa lại? Cực lắm phải không nào!.

Sử dụng package, trường hợp này chúng ta sẽ tạo ra package chứa class implement logic đó và import vào những nơi cùng sử dụng. Đến lúc sửa chúng ta chỉ cần tìm đến package chứa class implement nó và sửa lại thôi. Và đoạn code đó sẽ apply cho tất cả những chỗ khác.

Cấu trúc tốt

Trong một dự án lớn, nó có thể chứa đến hàm trăm, hàng ngàn class, interface để thực thi các nhóm chức năng khác nhau. Sử dụng package để phân tầng theo nhóm chức năng và chứa các class liên quan giúp chúng ta quản lý code hiệu quả. Tên package phải nói lên được ý nghĩa của package đó.

Xung đột tên

Đôi lúc chúng ta đặt tên của 2 hoặc nhiều class cùng tên. Dùng package chúng ta có thể tránh được xung đột bằng cách chỉ định đúng đường dẫn từ package cha đến các class cùng tên

conflict name class

Xem hình ở trên chúng ta có package com là package top-level, theo sau đó là company. Mình đặt 2 class đều có tên Example trong package company nhưng được báo lỗi là không thể có 2 class cùng tên trong company. Để giải quyết vấn đề này, mình đã tạo ra 2 package package1package2 để chứa 2 class Example của mình.

// File Example.java trong package1
package com.company.package1;
public class Example {
    public void display() {
        System.out.println("display package 1");
    }
}
// File Example.java trong package2
package com.company.package2;
public class Example {
    public void display() {
        System.out.println("display package 2");
    }
}
// File Main.java
package com.company;

public class Main {
    public static void main(String[] args) {
        com.company.package1.Example example1 = new com.company.package1.Example();
        example1.display();

        com.company.package2.Example example2 = new com.company.package2.Example();
        example2.display();
    }
}

Output:

display package 1
display package 2

Sub package

Trong một package có thể chứa các package khác, các package này được gọi là sub package.

Ví dụ chúng ta có TopPackage chứa SubPackage, và class Example thuộc về SubPackage.

// File Example.java
package TopPackage.SubPackage;

public class Example {
    public void demo() {
        System.out.println("Sub package");
    }
}

Import package với ký tự (*)

Giả sử có 2 class Example1, Example2 chứa trong package packageex. Chúng ta muốn sử dụng cả Example1 Example2.

C1: import từng class vào

import packageex.Example1;
import packageex.Example2;

public class Main {
    public static void main(String[] args) {
        Example1 example1 = new Example1();
        Example2 example2 = new Example2();
        example1.demo();
        example2.demo();
    }
}

C2: Sử dụng (*), chúng ta thấy được rằng ở trên cần dùng tất cả các class trong packageex, thay vì import từng class như vậy sẽ khiến code trở nên dài dòng, chúng ta sẽ sử dụng * với hàm ý import tất cả các class, interface etc chứa trong packageex

// File Example1.java
package packageex;
public class Example1 {
    public void demo() {
        System.out.println("ex 1");
    }
}
// File Example2.java
package packageex;
public class Example2 {
    public void demo() {
        System.out.println("ex 2");
    }
}
// File Main.java

import packageex.*;
public class Main {
    public static void main(String[] args) {
        Example1 example1 = new Example1();
        Example2 example2 = new Example2();
        example1.demo();
        example2.demo();
    }
}

Output: 

ex 1

ex2

Nguồn tham khảo

https://www.geeksforgeeks.org/packages-in-java/

Packages in java and how to use them

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x