Bỏ qua để đến nội dung

Package và import

Package là cách Java tổ chức các class liên quan vào cùng một “thư mục logic”, giúp code có cấu trúc rõ ràng và tránh trùng tên class giữa các thư viện khác nhau:

package com.bumbii.app; // khai báo package - PHẢI là dòng đầu tiên của file (bỏ qua comment)
public class Main {
public static void main(String[] args) {
System.out.println("Hello from com.bumbii.app");
}
}

Tên package theo quy ước chữ thường, thường đặt theo domain đảo ngược (com.tencongty.tenduán), và phải khớp với cấu trúc thư mục chứa file .java (ví dụ package com.bumbii.app phải nằm trong đường dẫn com/bumbii/app/Main.java).

package com.bumbii.app;
import java.util.List; // import một class cụ thể
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
}
}

Có thể import tất cả class trong một package bằng * (không khuyến khích trong code thực tế vì kém rõ ràng):

import java.util.*; // import mọi class trong java.util

Gói java.lang (chứa String, Object, Integer, Math, System,…) được tự động import vào mọi file Java - đây là lý do bạn dùng được String, System.out.println mà không cần dòng import nào.

// Không cần import java.lang.String, java.lang.System,...
String message = "Xin chào";
System.out.println(message);

Các class nằm trong cùng một package có thể dùng trực tiếp lẫn nhau, không cần import:

package com.bumbii.app;
public class Helper {
static void greet() { System.out.println("Xin chào từ Helper"); }
}
package com.bumbii.app; // CÙNG package với Helper
public class Main {
public static void main(String[] args) {
Helper.greet(); // dùng trực tiếp, không cần import vì cùng package
}
}

Modifier truy cập (public, private, không ghi gì (package-private), protected) quyết định một class/thành viên có dùng được từ package khác hay không. Chi tiết về các modifier này sẽ được nói kỹ ở phần Hướng đối tượng (Encapsulation).

  • package tổ chức các class liên quan vào cùng một nhóm logic, khai báo ở dòng đầu file
  • import để dùng class từ package khác; java.lang được tự động import, không cần khai báo
  • Class trong cùng package dùng được lẫn nhau mà không cần import
  • Tên package theo domain đảo ngược, phải khớp với cấu trúc thư mục chứa file