Hướng dẫn tự học Java/J2EE và SOA

Package trong Java là gì Cách tạo và sử dụng Package  Aptech Buôn Ma Thuột

Bài 6: Packages trong Java:Cách tạo và sử dụng các packages trong Java

Một trong những tính năng sáng tạo nhất của Java là khái niệm về các gói package. Các gói package trong Java là một cách để đóng gói một nhóm các lớp, giao diện, bảng liệt kê, chú thích và các gói package phụ. Về mặt khái niệm, bạn có thể hiểu các gói package giống...

Trong bài viết này, chúng ta sẽ đề cập đến những điều cơ bản của các gói package trong Java. Dưới đây là các chủ đề được đề cập trong bài viết này:
Gói package trong Java là gì?
Gói package tích hợp
Gói package do người dùng xác định
       Tạo một gói package trong Java
       Đặt một lớp trong gói package Java
       Tạo một lớp bên trong gói package trong khi import gói package khác
       Sử dụng tên đủ điều kiện trong khi nhập một lớp
Static import trong Java
Bảo vệ truy cập trong các gói package Java
Những điểm cần nhớ

Gói package trong Java là gì?

Gói package Java là một cơ chế nhóm các loại lớp, giao diện và các lớp con tương tự nhau dựa trên chức năng. Khi phần mềm được viết bằng ngôn ngữ lập trình Java , nó có thể bao gồm hàng trăm hoặc thậm chí hàng ngàn lớp riêng lẻ. Nó ý nghĩa trong việc tổ chức mọi thứ bằng cách đặt các lớp và giao diện liên quan vào các gói package.
Sử dụng các gói package trong khi lập trình cung cấp rất nhiều lợi thế như:

  • 1.Khả năng sử dụng lại: Các lớp có trong các gói package của chương trình khác có thể dễ dàng sử dụng lại
  • 2.Tên Xung đột: Gói package giúp chúng ta xác định duy nhất một lớp, ví dụ, chúng ta có thể có các lớp như company.sales.Employeecompany.marketing.Employee
  • 3. Truy cập được kiểm soát: Cung cấp bảo vệ truy cập như bảo vệ lớp class (lớp mặc định và lớp riêng)
  • 4. Đóng gói dữ liệu : Chúng cung cấp một cách để ẩn các lớp, ngăn các chương trình khác truy cập các lớp chỉ dành cho sử dụng nội bộ
  • 5. Bảo trì: Với các gói package, bạn có thể tổ chức dự án của mình tốt hơn và dễ dàng xác định vị trí các lớp liên quan

Đó là một cách thực hành tốt để sử dụng các gói package trong khi lập trình bằng Java. Là một lập trình viên, bạn có thể dễ dàng tìm ra các lớp , giao diện, bảng liệt kê và chú thích có liên quan. Có hai loại gói package trong java. 

Các loại gói package trong Java

Dựa trên việc gói package được xác định bởi người dùng hay không, các gói package được chia thành hai loại:
- Gói package được xây dựng sẵn (buit-in)
- Gói package do người dùng xác định (defined)

Gói package được xây dựng sẵn

Các gói package dựng sẵn hoặc các gói package được xác định trước là các gói package đi kèm như một phần của JDK (Bộ công cụ phát triển Java) để đơn giản hóa nhiệm vụ của lập trình viên Java. Chúng bao gồm một số lượng lớn các lớp và giao diện được xác định trước là một phần của API Java. Một số gói package tích hợp thường được sử dụng là java.lang, java.io, java.util, java.applet, v.v ... Dưới đây là một chương trình đơn giản sử dụng gói package tích hợp:

import java.util.ArrayList;public class BuiltInPackage {     public static void main(String[] args) {         ArrayList<Integer> myList = new ArrayList<>(3);         myList.add(3);         myList.add(2);         myList.add(1);             System.out.println("Cac thanh phan cua danh sach la: " + myList);    }}

Kết quả:

Sử dụng gói package được xây dựng sẵn

Lớp ArrayList thuộc gói package java.util. Để sử dụng nó, chúng ta phải nhập gói package bằng cách sử dụng câu lệnh import để nhập gói package bằng dòng đầu tiên của đoạn code 'import java.util.ArrayList'. Nghĩa là import gói package java.util và sử dụng lớp ArrayList có trong gói package phụ util.

Gói package do người dùng xác định

Các gói package do người dùng định nghĩa là các gói package được người dùng phát triển để nhóm các lớp, giao diện và gói package phụ liên quan. Với sự trợ giúp của một chương trình ví dụ, hãy xem cách tạo các gói package, biên dịch các chương trình Java bên trong các gói package và thực thi chúng như thế nào dưới đây:

Cách tạo một gói package trong Java

Tạo một gói package trong Java là một công việc rất dễ dàng. Chọn một cái tên cho gói package và sử dụng một câu lệnh package để đặt trước trong file .java. Tệp nguồn java có thể chứa các lớp, giao diện, bảng liệt kê và các loại chú thích mà bạn muốn đưa vào gói package. Ví dụ: câu lệnh sau tạo một gói package có tên MyPackage.

package MyPackage;

Câu lệnh package chỉ đơn giản chỉ định gói package nào mà các lớp được định nghĩa thuộc về

Lưu ý: Nếu bạn bỏ qua câu lệnh package, tên lớp được đặt vào gói package mặc định, không có tên. Mặc dù gói package mặc định là tốt cho các chương trình ngắn, nhưng nó không đủ cho các ứng dụng thực. 

Đặt một class trong gói package Java

Để tạo một lớp bên trong một gói package, bạn nên khai báo tên gói package là câu lệnh đầu tiên của chương trình của bạn. Sau đó bao gồm các lớp class như là một phần của gói package. Nhưng, hãy nhớ rằng, một lớp chỉ có thể có một khai báo gói package. Đây là một chương trình đơn giản để hiểu khái niệm.

package MyPackage;public class Compare {    int num1, num2;    Compare(int n, int m) {        num1 = n;        num2 = m;    }public void getmax(){    if ( num1 > num2 ) {        System.out.println("Maximum value of two numbers is " + num1);    }    else {        System.out.println("Maximum value of two numbers is " + num2);    }}public static void main(String args[]) {    Compare current[] = new Compare[3];        current[1] = new Compare(5, 10);        current[2] = new Compare(123, 120);        for(int i=1; i < 3 ; i++)        {            current[i].getmax();        }    }}

Kết quả: Maximum value of two numbers is 10
              Maximum value of two numbers is 123

Như bạn có thể thấy, tôi đã khai báo một gói package có tên MyPackage và tạo một lớp Compare bên trong gói package đó. Java sử dụng các thư mục hệ thống file để lưu trữ các gói package. Vì vậy, chương trình này sẽ được lưu trong một tệp dưới dạng compare.java và sẽ được lưu trong thư mục có tên MyPackage. Khi tệp được biên dịch, Java sẽ tạo một tệp .class và lưu trữ nó trong cùng thư mục. Hãy nhớ rằng tên của gói package phải giống với thư mục mà tệp này được lưu.

Bạn có thể tự hỏi làm thế nào để sử dụng class Compare này từ một class trong gói package khác?

Tạo một lớp bên trong gói package trong khi import gói package khác

Chà, nó khá đơn giản. Bạn chỉ cần import nó. Chỉ một lần nó được import, bạn có thể truy cập nó bằng tên của nó. Đây là một chương trình mẫu thể hiện khái niệm này.

package AptechBuonMaThuot;import MyPackage.Compare;public class Demo{    public static void main(String args[]) {        int n=10, m=10;        Compare current = new Compare(n, m);        if(n != m) {            current.getmax();        }        else {            System.out.println("Both the values are same");        }       }}

Kết quả: Both the values are same

Đầu tiên tôi đã khai báo gói package AptechBuonMaThuot, sau đó import class Compare từ gói package MyPackage. Vì vậy, thứ tự khi chúng ta tạo một lớp bên trong một gói package trong khi nhập gói package khác là:

  • - Khai báo 1 gói package
  • - Import class từ một gói package khác

Chà, nếu bạn không muốn sử dụng câu lệnh import , có một cách khác để truy cập tệp lớp của gói package từ gói package khác. Bạn chỉ có thể sử dụng tên đủ điều kiện trong khi import một lớp .

Sử dụng tên đủ điều kiện trong khi import một lớp

Đây là một ví dụ để hiểu khái niệm trên. Tôi sẽ sử dụng cùng một gói package mà tôi đã khai báo trước đó trong bài viết này là MyPackage .

package AptechBuonMaThuot;public class Demo{    public static void main(String args[]) {        int n=10, m=11;        //Using fully qualified name instead of import        MyPackage.Compare current = new MyPackage.Compare(n, m);        if(n != m) {             current.getmax();        }        else {            System.out.println("Both the values are same");        }   }}

Kết quả: Maximum value of two numbers is 11
Trong lớp Demo, thay vì nhập gói package, tôi đã sử dụng tên đủ điều kiện như MyPackage.Compare để tạo đối tượng của nó. Vì chúng ta đang nói về việc nhập các gói package, bạn cũng có thể kiểm tra khái niệm Static import trong Java.

Static import trong Java

Tính năng nhập tĩnh được giới thiệu trong Java từ phiên bản 5. Nó tạo điều kiện cho lập trình viên Java truy cập trực tiếp vào bất kỳ thành viên tĩnh nào của lớp mà không cần sử dụng tên đủ điều kiện.

package MyPackage;import static java.lang.Math.*; //static importimport static java.lang.System.*;// static importpublic class StaticImportDemo {       public static void main(String args[]) {          double val = 64.0;          double sqroot = sqrt(val); // Access sqrt() method directly          out.println("Sq. root of " + val + " is " + sqroot);          //We don't need to use 'System.out       }    }

Kết quả: Sq. root of 64.0 is 8.0
Mặc dù sử dụng static import bao gồm ít mã hóa hơn, việc lạm dụng nó có thể khiến chương trình không thể đọc được và không thể nhận ra. Bây giờ hãy chuyển sang chủ đề tiếp theo, kiểm soát truy cập trong các gói package.

Bảo vệ truy cập trong các gói package Java

Bạn có thể nhận thức được các khía cạnh khác nhau của cơ chế kiểm soát truy cập của Java và các bộ chỉ định truy cập của Java . Các gói package trong Java thêm một mẫu khác để kiểm soát truy cập. Cả hai lớp và gói package là một phương tiện đóng gói package dữ liệu . Trong khi các gói package đóng vai trò là các thùng chứa cho các lớp và các gói package cấp dưới khác, các lớp đóng vai trò là các thùng chứa dữ liệu và mã. Do sự tương tác giữa các gói package và các lớp này, các gói package Java có bốn loại khả năng hiển thị cho các thành viên của lớp:

  • - Các lớp con (Sub-classes) trong cùng một gói package
  • - Không phải lớp con (non-Subclasses) trong cùng một gói package
  • - Các lớp con (Sub-classes) trong các gói package khác nhau
  • - Các lớp không nằm trong cùng một gói package như các lớp con

Bảng bên dưới cung cấp một hình ảnh thực tế về loại truy cập nào là có thể và không phải là khi sử dụng các gói package trong Java:

  Private  No Modifier Protected Public

Same Class

Yes

Yes

Yes

Yes

Same Package Subclasses

No

Yes

Yes

Yes

Same Package Non-Subclasses

No

Yes

Yes

Yes

Different Packages Subclasses

No

No

Yes

Yes

Different Packages Non- Subclasses

No

No

No

Yes

Chúng ta có thể đơn giản hóa dữ liệu trong bảng trên như sau:
1. Bất cứ điều gì tuyên bố công khai public có thể được truy cập từ bất cứ nơi nào
2. Bất cứ điều gì được tuyên bố là riêng tư private chỉ có thể được nhìn thấy trong lớp đó
3. Nếu chỉ định truy cập không được đề cập, một phần tử sẽ hiển thị cho các lớp con cũng như các lớp khác trong cùng một gói package
4. Cuối cùng, bất kỳ phần tử được bảo vệ nào được khai báo đều có thể được nhìn thấy bên ngoài gói package hiện tại của bạn, nhưng chỉ với các lớp mà phân lớp của nó trong lớp của bạn

Theo cách này, các gói package Java cung cấp kiểm soát truy cập cho các lớp.
Dưới đây là một số điểm mà bạn nên ghi nhớ khi sử dụng các gói package trong Java .
 

Những điểm cần nhớ

  • - Mỗi lớp là một phần của một số gói package. Nếu bạn bỏ qua câu lệnh package, tên lớp được đặt vào gói package mặc định
  • - Một lớp chỉ có thể có một câu lệnh package nhưng nó có thể có nhiều câu lệnh import package
  • - Tên của gói package phải giống với thư mục lưu tệp
  • - Khi nhập gói package khác, khai báo gói package phải là câu lệnh đầu tiên, tiếp theo là import package

Tác giả bài viết: Aptech Buôn Ma Thuột

Ý kiến bạn đọc

Tham gia thảo luận

Mã an toàn Mã bảo mật   

Theo dòng sự kiện

Bài 5:Bytecode trong Java là gì? Nó hoạt động như thế nào?
Bài 4:Tìm hiểu cách sử dụng đối số của Java bằng các ví dụ cụ thể
Bài 3:Tự học Java: Viết chương trình đầu tiên "Hello World" bằng Java
Bài 2: Hướng dẫn cài đặt java và thiết lập đường dẫn cho Java.
Bài 1: Java là gì? Hướng dẫn cho người mới bắt đầu về Java

Những tin mới hơn

Bài 7: Modifiers trong Java? Cách thức truy cập Access Modifiers

Những tin cũ hơn

Bài 5:Bytecode trong Java là gì? Nó hoạt động như thế nào?
Bài 4:Tìm hiểu cách sử dụng đối số của Java bằng các ví dụ cụ thể
Bài 3:Tự học Java: Viết chương trình đầu tiên "Hello World" bằng Java
Bài 2: Hướng dẫn cài đặt java và thiết lập đường dẫn cho Java.
Bài 1: Java là gì? Hướng dẫn cho người mới bắt đầu về Java