Thứ Hai, 30 tháng 7, 2018

Gói trong lập trình java

Các gói được sử dụng trong lập trình Java để ngăn chặn xung đột tên, để kiểm soát truy cập, để tìm kiếm / định vị và sử dụng các lớp, giao diện, liệt kê và chú thích dễ dàng hơn, v.v.

Một gói có thể được định nghĩa là một nhóm các kiểu liên quan (các lớp, các giao diện, các liệt kê và các chú thích) cung cấp khả năng bảo vệ truy cập và quản lý không gian tên.

Một số gói hiện có trong Java là

java.lang - gói các lớp cơ bản

java.io - các lớp cho các hàm đầu vào, đầu ra được gói trong gói này

Các lập trình viên có thể định nghĩa các gói riêng của họ để nhóm các lớp / giao diện, vv. Thực hành tốt để nhóm các lớp liên quan do bạn thực hiện để người lập trình có thể dễ dàng xác định rằng các lớp, giao diện, liệt kê và chú thích có liên quan.

Vì gói tạo ra một không gian tên mới nên sẽ không có bất kỳ xung đột tên nào với các tên trong các gói khác. Sử dụng các gói, nó dễ dàng hơn để cung cấp kiểm soát truy cập và nó cũng dễ dàng hơn để xác định vị trí các lớp liên quan.

Tạo một gói

Trong khi tạo một gói, bạn nên chọn tên cho gói và bao gồm một tuyên bố góicùng với tên đó ở trên cùng của mỗi tệp nguồn chứa các lớp, các giao diện, các liệt kê và các loại chú thích mà bạn muốn đưa vào gói.

Câu lệnh gói phải là dòng đầu tiên trong tệp nguồn. Chỉ có thể có một tuyên bố gói trong mỗi tệp nguồn và nó áp dụng cho tất cả các loại trong tệp.

Nếu không sử dụng câu lệnh gói thì lớp, giao diện, liệt kê và các loại chú thích sẽ được đặt trong gói mặc định hiện tại.

Để biên dịch các chương trình Java với các câu lệnh gói, bạn phải sử dụng tùy chọn -d như được hiển thị bên dưới.

javac -d Destination_folder file_name.java

Sau đó, một thư mục với tên gói đã cho được tạo trong đích đã chỉ định, và các tệp lớp được biên dịch sẽ được đặt trong thư mục đó.

Thí dụ

Chúng ta hãy xem một ví dụ tạo ra một gói được gọi là động vật . Thực hành tốt là sử dụng tên của các gói có chữ thường để tránh xung đột với tên của các lớp và giao diện.

Ví dụ sau gói chứa giao diện có tên là động vật 
/* File name : Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}
Bây giờ, chúng ta hãy thực hiện giao diện trên trong cùng một gói động vật
package animals;
/* File name : MammalInt.java */

public class MammalInt implements Animal {

   public void eat() {
      System.out.println("Mammal eats");
   }

   public void travel() {
      System.out.println("Mammal travels");
   } 

   public int noOfLegs() {
      return 0;
   }

   public static void main(String args[]) {
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
} 
Bây giờ biên dịch các tập tin java như hình dưới đây

$ javac -d . Animal.java 
$ javac -d . MammalInt.java

Bây giờ một gói / thư mục với tên động vật sẽ được tạo trong thư mục hiện tại và các tệp lớp này sẽ được đặt trong nó như được hiển thị bên dưới

ảnh minh họa

Bạn có thể thực thi tệp lớp trong gói và nhận kết quả như được hiển thị bên dưới.

Mammal eats
Mammal travels

Từ khóa nhập khẩu

Nếu một lớp muốn sử dụng một lớp khác trong cùng một gói, tên gói không cần được sử dụng. Các lớp trong cùng một gói tìm thấy nhau mà không có bất kỳ cú pháp đặc biệt nào.

Thí dụ

Ở đây, một lớp có tên Boss được thêm vào gói lương đã có nhân viên. Boss sau đó có thể tham khảo lớp Employee mà không cần sử dụng tiền tố tiền lương, như được trình bày bởi lớp Boss sau đây.
package payroll;
public class Boss {
   public void payEmployee(Employee e) {
      e.mailCheck();
   }
}
Điều gì sẽ xảy ra nếu lớp nhân viên không có trong gói biên chế? Lớp Boss sau đó phải sử dụng một trong các kỹ thuật sau đây để tham chiếu đến một lớp trong một gói khác.

Tên đầy đủ của lớp có thể được sử dụng. Ví dụ
payroll.Employee
Gói có thể được nhập bằng cách sử dụng từ khóa nhập khẩu và thẻ hoang dã (*). Ví dụ
import payroll.*;
Bản thân lớp có thể được nhập bằng từ khóa nhập. Ví dụ
import payroll.Employee;
Lưu ý - Một tệp lớp có thể chứa bất kỳ số lượng câu lệnh nhập nào. Các câu lệnh import phải xuất hiện sau câu lệnh package và trước khai báo lớp.

Cấu trúc thư mục của gói

Hai kết quả chính xảy ra khi một lớp được đặt trong một gói

Tên của gói trở thành một phần của tên của lớp, như chúng ta vừa thảo luận trong phần trước.

Tên của gói phải khớp với cấu trúc thư mục, nơi mã byte bytecode tương ứng cư trú.

Đây là cách đơn giản để quản lý các tệp của bạn bằng Java

Đặt mã nguồn cho một loại, giao diện, kiểu liệt kê hoặc loại chú thích trong một tệp văn bản có tên là tên đơn giản của loại và có phần mở rộng là .java .

Ví dụ
// File Name :  Car.java
package vehicle;

public class Car {
   // Class implementation.   
}

Bây giờ, đặt tệp nguồn vào một thư mục có tên phản ánh tên của gói mà lớp đó thuộc về -

....\vehicle\Car.java

Bây giờ, tên lớp và tên đường dẫn đủ điều kiện sẽ như sau:

Tên lớp → vehicle.Car

Tên đường dẫn → xe \ Car.java (trong cửa sổ)

Nói chung, một công ty sử dụng tên miền Internet đảo ngược của nó cho tên gói của nó.

Ví dụ - Tên miền Internet của công ty là apple.com, sau đó tất cả tên gói của nó sẽ bắt đầu bằng com.apple. Mỗi thành phần của tên gói tương ứng với một thư mục con.

Ví dụ - Công ty có gói com.apple.computers chứa tệp nguồn Dell.java, nó sẽ được chứa trong một loạt các thư mục con như thế này

....\com\apple\computers\Dell.java

Tại thời điểm biên dịch, trình biên dịch tạo ra một tệp đầu ra khác nhau cho mỗi lớp, giao diện và liệt kê được xác định trong nó. Tên cơ sở của tệp đầu ra là tên của loại và phần mở rộng của nó là .class .

Ví dụ
// File Name: Dell.java
package com.apple.computers;

public class Dell {
}

class Ups {
}

Bây giờ, biên dịch tập tin này như sau bằng cách sử dụng tùy chọn -d

$javac -d . Dell.java

Các tập tin sẽ được biên dịch như sau:

.\com\apple\computers\Dell.class
.\com\apple\computers\Ups.class

Bạn có thể nhập tất cả các lớp hoặc giao diện được định nghĩa trong \ com \ apple \ computers \ như sau:

import com.apple.computers.*;

Giống như các tệp nguồn .java, các tệp .class được biên dịch phải nằm trong một loạt các thư mục phản ánh tên gói. Tuy nhiên, đường dẫn đến tệp .

class không phải giống với đường dẫn đến tệp nguồn .java. Bạn có thể sắp xếp các thư mục nguồn và lớp của bạn một cách riêng biệt, như

<path-one>\sources\com\apple\computers\Dell.java

<path-two>\classes\com\apple\computers\Dell.class

Bằng cách này, có thể cung cấp quyền truy cập vào thư mục lớp cho các lập trình viên khác mà không tiết lộ các nguồn của bạn. Bạn cũng cần quản lý các tệp nguồn và lớp theo cách này để trình biên dịch và Máy ảo Java (JVM) có thể tìm thấy tất cả các loại chương trình của bạn sử dụng.

Đường dẫn đầy đủ đến thư mục lớp, <path-two> \ classes, được gọi là đường dẫn lớp, và được thiết lập với biến hệ thống CLASSPATH. Cả trình biên dịch và JVM đều xây dựng đường dẫn tới các tệp .class của bạn bằng cách thêm tên gói vào đường dẫn lớp.

Nói <path-two> \ classes là đường dẫn lớp và tên gói là com.apple.computers, sau đó trình biên dịch và JVM sẽ tìm kiếm các tệp .class trong <path-two> \ classes \ com \ apple \ computers.

Đường dẫn lớp có thể bao gồm một số đường dẫn. Nhiều đường dẫn nên được phân tách bằng dấu chấm phẩy (Windows) hoặc dấu hai chấm (Unix). Theo mặc định, trình biên dịch và JVM tìm kiếm thư mục hiện tại và tệp JAR chứa các lớp nền tảng Java để các thư mục này được tự động trong đường dẫn lớp.

Đặt biến hệ thống CLASSPATH

Để hiển thị biến CLASSPATH hiện tại, sử dụng các lệnh sau trong Windows và UNIX (Bourne shell)

Trong Windows → C: \> đặt CLASSPATH

Trong UNIX →% echo $ CLASSPATH

Để xóa nội dung hiện tại của biến CLASSPATH, sử dụng

Trong Windows → C: \> đặt CLASSPATH =

Trong UNIX →% unset CLASSPATH; xuất CLASSPATH

Để đặt biến CLASSPATH

Trong Windows → đặt CLASSPATH = C: \ users \ jack \ java \ classes

Trong UNIX →% CLASSPATH = / home / jack / java / classes; xuất CLASSPATH

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...