Pakej Java
Untuk mengatur kelas dengan lebih baik, Java menyediakan mekanisme pakej untuk membezakan ruang nama nama kelas.
Peranan pakej
1 Susun kelas atau antara muka dengan fungsi yang serupa atau berkaitan ke dalam pakej yang sama untuk memudahkan carian dan penggunaan kelas .
2 Seperti folder, pakej juga disimpan dalam direktori pokok. Nama kelas dalam pakej yang sama adalah berbeza, dan nama kelas dalam pakej berbeza boleh sama Apabila kelas dengan nama kelas yang sama dalam dua pakej berbeza dipanggil pada masa yang sama, nama pakej harus ditambah untuk membezakan. mereka. Oleh itu, pakej boleh mengelakkan konflik nama.
3 Pakej juga mengehadkan kebenaran akses. Hanya kelas dengan kebenaran akses pakej boleh mengakses kelas dalam pakej tertentu.
Java menggunakan mekanisme pakej untuk mengelakkan konflik penamaan, kawalan akses dan menyediakan carian dan lokasi untuk kelas, antara muka, penghitungan dan anotasi )tunggu. Format sintaks bagi
pernyataan pakej ialah:
package pkg1[.pkg2[.pkg3…]];
Contohnya, jika fail Something.java mempunyai kandungannya
package net.java.util public class Something{ ... }
, maka laluannya hendaklah net/java/ util/Something .java disimpan seperti ini. Fungsi pakej adalah untuk mengklasifikasikan dan menyimpan program Java yang berbeza supaya ia boleh dipanggil oleh program Java lain dengan lebih mudah.
Pakej boleh ditakrifkan sebagai satu set jenis yang saling berkaitan (kelas, antara muka, penghitungan dan anotasi), menyediakan perlindungan akses dan fungsi pengurusan ruang nama untuk jenis ini.
Berikut ialah beberapa pakej dalam Java:
kelas asas java.lang-packaging
java.io- Functions mengandungi fungsi input dan output
Pembangun boleh membungkus set kelas dan antara muka dengan sendiri dan menentukan pakej mereka sendiri. Dan adalah wajar untuk menyokong untuk melakukan ini dalam pembangunan sebenar Selepas anda menyelesaikan sendiri pelaksanaan kelas, pengelompokan kelas yang berkaitan boleh memudahkan pengaturcara lain untuk menentukan kelas, antara muka, penghitungan, anotasi, dll.
Oleh kerana pakej mencipta ruang nama baharu, ia tidak akan menyebabkan konflik penamaan dengan mana-mana nama dalam pakej lain. Menggunakan mekanisme pakej memudahkan untuk melaksanakan kawalan akses dan memudahkan untuk mencari kelas yang berkaitan.
Membuat pakej
Apabila membuat pakej, anda perlu memberikan nama yang sesuai pada pakej. Kemudian, jika fail sumber lain mengandungi kelas, antara muka, penghitungan atau jenis anotasi yang disediakan oleh pakej ini, pengisytiharan pakej mesti diletakkan pada permulaan fail sumber.
Pengisytiharan pakej hendaklah berada pada baris pertama fail sumber hanya boleh ada satu pengisytiharan pakej bagi setiap fail sumber, dan setiap jenis dalam fail ini digunakan untuknya.
Jika tiada pengisytiharan pakej digunakan dalam fail sumber, kelas, fungsi, penghitungan, anotasi, dsb. akan diletakkan dalam pakej yang tidak dinamakan.
Contoh
Mari kita lihat contoh yang mencipta pakej yang dipanggil haiwan. Biasanya gunakan huruf kecil untuk mengelakkan konflik dengan nama kelas dan antara muka.
Tambahkan antara muka pada pakej haiwan:
/* 文件名: Animal.java */ package animals; interface Animal { public void eat(); public void travel(); }
Seterusnya, tambahkan pelaksanaan antara muka pada pakej yang sama:
package animals; /* 文件名 : 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(); } }
Kemudian, susun dua fail ini dan letakkan dalam subdirektori yang dipanggil haiwan. Gunakan arahan berikut untuk menjalankan:
$ mkdir animals $ cp Animal.class MammalInt.class animals $ java animals/MammalInt Mammal eats Mammal travel
kata kunci import
Untuk menggunakan ahli pakej tertentu, kami perlu mengimport pakej secara eksplisit dalam program Java. Fungsi ini boleh dicapai menggunakan pernyataan "import".
Dalam fail sumber java, penyataan import harus terletak selepas penyataan pakej dan sebelum takrifan semua kelas mungkin tidak ada atau berbilang penyataan ialah:
import package1[.package2…].(classname|*);
Jika ia berada dalam package , jika kelas ingin menggunakan kelas lain dalam pakej ini, nama pakej boleh diabaikan.
Contoh
Pakej gaji berikut sudah mengandungi kelas Pekerja Seterusnya, tambahkan kelas Boss pada pakej gaji. Kelas Boss tidak perlu menggunakan awalan gaji apabila merujuk kelas Pekerja Contoh kelas Boss adalah seperti berikut.
package payroll; public class Boss { public void payEmployee(Employee e) { e.mailCheck(); } }
Apa yang berlaku jika kelas Boss tiada dalam pakej gaji? Kelas Boss mesti menggunakan salah satu daripada kaedah berikut untuk merujuk kelas dalam pakej lain
Gunakan nama penuh kelas, sebagai contoh:
payroll.Employee
Diperkenalkan dengan kata kunci import, gunakan kad bebas " *"
import payroll.*;
Gunakan kata kunci import untuk memperkenalkan kelas Pekerja
import payroll.Employee;
Nota:
Fail kelas boleh mengandungi sebarang bilangan penyata import. Kenyataan import mesti datang selepas pengisytiharan pakej dan sebelum pengisytiharan kelas.
Struktur direktori pakej
Akan ada dua keputusan utama apabila kelas diletakkan dalam pakej:
Nama pakej menjadi sebahagian daripada nama kelas, seperti yang kita bincangkan sebelum ini.
Nama pakej mesti sepadan dengan struktur direktori di mana kod bait yang sepadan terletak.
Berikut ialah cara mudah untuk mengurus fail anda sendiri dalam Java:
Letakkan kod sumber kelas, antara muka, dll. dalam teks, nama fail ini adalah nama jenis ini, dengan .java sebagai sambungan. Contohnya:
// 文件名 : Car.java package vehicle; public class Car { // 类实现 }
Seterusnya, letakkan fail sumber dalam direktori yang sepadan dengan nama pakej di mana kelas berada.
....\vehicle\Car.java
Kini, nama kelas dan laluan yang betul akan kelihatan seperti ini:
Nama kelas->.Kereta
Pathname-> vehicleCar.java (dalam tingkap)
Biasanya, syarikat menggunakan bentuk terbalik nama domain Internetnya sebagai nama pakejnya ialah apple .com, semua nama pakej bermula dengan com.apple. Setiap bahagian nama pakej sepadan dengan subdirektori.
Contohnya: Syarikat ini mempunyai pakej com.apple.computers, yang mengandungi fail sumber yang dipanggil Dell.java Selaras dengan itu, perlu ada satu siri subdirektori seperti berikut:
....\com\apple\computers\Dell.java
Apabila. menyusun, pengkompil mencipta fail output yang berbeza untuk setiap jenis kelas, antara muka, dsb. yang ditakrifkan dalam pakej Nama fail output ialah nama jenis ini, dengan .class sebagai akhiran sambungan. Sebagai contoh:
// 文件名: Dell.java package com.apple.computers; public class Dell{ } class Ups{ }
Sekarang, kami menggunakan pilihan -d untuk menyusun fail ini seperti berikut:
$javac -d . Dell.java
Ini akan meletakkan fail yang disusun seperti berikut:
.\com\apple\computers\Dell.class.\com\apple\computers\Ups.class
Anda boleh mengimport semua kelas, antara muka, dsb. yang ditakrifkan dalam compapplecomputers seperti berikut:
import com.apple.computers.*;
Fail .class yang disusun hendaklah sama dengan fail sumber .java dan direktori tempat ia diletakkan hendaklah sama dengan pakej padankan dengan nama. Walau bagaimanapun, ia tidak diperlukan bahawa laluan fail .class adalah sama dengan laluan .java yang sepadan. Anda boleh mengatur direktori sumber dan kelas secara berasingan.
<path-one>\sources\com\apple\computers\Dell.java <path-two>\classes\com\apple\computers\Dell.class
Dengan cara ini, anda boleh berkongsi direktori kelas anda dengan pengaturcara lain tanpa mendedahkan kod sumber anda. Menguruskan kod sumber dan fail kelas dengan cara ini membolehkan pengkompil dan Java Virtual Machine (JVM) mencari semua jenis yang digunakan dalam program anda.
Laluan mutlak ke direktori kelas dipanggil laluan kelas. Tetapkan dalam pembolehubah sistem CLASSPATH. Pengkompil dan mesin maya Java membina laluan ke fail .class dengan menambahkan nama pakej pada laluan kelas.
<path-two>class ialah laluan kelas, nama pakej ialah com.apple.computers, dan pengkompil dan JVM akan mencari fail .class dalam <path-two>classescomapplecompters.
Laluan kelas mungkin mengandungi beberapa laluan. Berbilang laluan harus dipisahkan oleh pembatas. Secara lalai, pengkompil dan JVM melihat dalam direktori semasa. Fail JAR mengandungi kelas yang berkaitan dengan platform Java, jadi direktori mereka diletakkan dalam laluan kelas secara lalai.
Tetapkan pembolehubah sistem CLASSPATH
Gunakan arahan berikut untuk memaparkan pembolehubah CLASSPATH semasa:
Platform Windows (di bawah baris arahan DOS) -> tetapkan CLASSPATH
Platform UNIX (di bawah cangkang Bourne) -> % echo $CLASSPATH
Platform Windows (di bawah baris arahan DOS) -> tetapkan CLASSPATH=
Platform UNIX (di bawah cangkang Bourne) -> % nyahset CLASSPATH; Platform Windows (di bawah baris arahan DOS) -> tetapkan CLASSPATH=C:usersjackjavaclasses
Platform UNIX (di bawah cangkang Bourne)-> % CLASSPATH=/home/jack/java/classes;