1. Pakej

Program Java biasa melibatkan sejumlah besar kelas. Berapa banyak? Beribu, berpuluh ribu. Dan jika anda juga mengambil kira fakta bahawa program ini menggunakan pelbagai perpustakaan yang mengandungi kelas yang ditulis oleh pengaturcara lain, maka bilangan kelas dengan mudah boleh diukur dalam berjuta-juta!

Adalah mustahil untuk menghasilkan nama unik untuk semua berjuta-juta, atau bahkan beribu-ribu, kelas.

Sudah tentu, kita boleh membayangkan nama seperti A123dan B345, tetapi jika kita bercakap tentang memilih nama kelas yang baik, nama yang memudahkan untuk memahami kelas (seperti Stringuntuk rentetan, contohnya), maka walaupun menjana seribu nama unik adalah banyak. kerja.

Itulah sebabnya di Java adalah kebiasaan untuk mengumpulkan kelas ke dalam pakej menggunakan kata kunci pakej.

Kelas Java dan pakejnya sangat serupa dengan fail dan folder pada komputer.

Sebagai contoh, jika anda perlu menyimpan 10 dokumen pada komputer anda, anda mungkin hanya menyimpannya dalam satu folder. Tetapi bagaimana jika anda mempunyai beribu-ribu dokumen (contohnya, repositori semua dokumen syarikat)?

Dengan beribu-ribu dokumen untuk disimpan, satu penyelesaian ialah mencipta pelbagai peringkat folder dengan nama deskriptif yang baik. Dan kemudian dalam folder di peringkat terakhir, simpan dokumen yang berkaitan dengan folder tertentu itu. Nama deskriptif yang baik untuk dokumen juga tidak menyakitkan.

Malah, kami melakukan semua ini untuk kelas di Jawa.

Fail yang mengandungi kelas disimpan dalam direktori (folder) berbeza dan nama penuh folder kelas dengan semua subfoldernya ialah nama pakej. Contoh:

Laluan ke fail Nama pakej Nama kelas
\com\codegym\tasks\Solution.java
com.codegym.tasks
Solution
\com\io\FileInputStream.java
com.io
FileInputStream
\java\util\ArrayList.java
java.util
ArrayList

Tidak seperti nama folder, nama pakej menggunakan titik sebagai pembatas. Dengan kata lain, folder \com\codegym\tasks\sepadan dengan com.codegym.taskspakej.


2. srcfolder

Di Java, adalah kebiasaan untuk menyimpan semua kelas untuk program dalam satu folder (dan subfolder). Folder ini biasanya dipanggil src(singkatan dari source ).

Folder ini dipanggil akar projek (atau akar sumber ), dan semua laluan pakej adalah relatif kepadanya. Contoh:

Folder Nama pakej
c:\projects\data\my\src\com\codegym\tasks\
com.codegym.tasks
d:\files\git\data\project\src\com\codegym\tasks\
com.codegym.tasks

Dalam situasi ini, pengaturcara mengatakan sesuatu seperti "kami mempunyai projek bernama my, yang terletak dalam c:\projects\datafolder" atau "kami mempunyai projek bernama project, yang terletak dalam d:\files\git\datafolder"

Adalah lebih baik untuk sentiasa meletakkan kelas dalam pakej dan tidak terus dalam folder akar ( src. Jika anda hanya mempunyai beberapa kelas, ini tidak menimbulkan masalah. Tetapi apabila terdapat banyak kelas, ia sangat mudah untuk dikelirukan. Jadi , sentiasa buat kelas anda hanya dalam pakej.

Di Jawa, adalah kebiasaan untuk memberikan nama yang bermakna kepada kelas dan pakej. Banyak syarikat mengeluarkan perpustakaan mereka sendiri (satu set kelas) dan, untuk mengelakkan kekeliruan, mereka memasukkan nama syarikat/tapak web/projek ke dalam nama pakej:

Nama pakej Nama syarikat/projek
org.apache.common
org.apache.tomcat
org.apache.util
projek Apache
com.oracle.jdbc
syarikat Oracle
java.io
javax.servlet
Syarikat Oracle, projek Java
com.ibm.websphere
Syarikat IBM, projek WebSphere
com.jboss
Projek JBoss

3. Kandungan fail

Menurut standard bahasa Java, maklumat tentang nama kelas dan nama pakejnya mesti disertakan dalam fail dengan kod. Bentuk umum ditunjukkan di bawah:

package package-name;

public class ClassName
{

}

Nama pakej mesti sepadan dengan nama folder, dan nama fail mesti sepadan dengan nama kelas awam.

Jika anda mempunyai fail, maka ia harus mengandungi ini:...\src\com\project\Service.java

package com.project;

public class Service
{

}

4. Mengimport kelas

Nama kelas dan nama pakej membentuk apa yang dipanggil nama kelas yang layak sepenuhnya .

Contoh:

Nama yang layak sepenuhnya Nama pakej Nama kelas
java.io.FileInputStream
java.io
FileInputStream
java.lang.String
java.lang
String
java.util.ArrayList
java.util
ArrayList
org.apache.tomcat.Servlet
org.apache.tomcat
Servlet
Cat
tiada
Cat

Berita baiknya:

Nama kelas yang layak sepenuhnya sentiasa unik dalam projek. Lagipun, anda tidak boleh mencipta dua fail dengan nama yang sama dalam satu folder.

Berita buruknya:

Nama kelas yang layak sepenuhnya biasanya sama ada panjang atau sangat panjang. Dan menulis nama panjang (contohnya java.util.ArrayList) setiap kali dalam kod adalah sangat menyusahkan.

Itulah sebabnya Java menambah keupayaan untuk mengimport kelas .

Anda boleh menggunakan nama pendek kelas dalam kod anda, tetapi anda mesti terlebih dahulu memberitahu pengkompil mana nama kelas yang layak sepenuhnya sepadan dengan nama pendek . Bagaimana jika anda kini berbilang kelas dengan nama yang sama dalam projek anda? Atau anda pada asalnya mempunyai satu, tetapi kemudian 15 lagi ditambahkan...

Untuk menggunakan nama kelas pendek dalam kod anda, anda perlu menambah binaan berikut:

import fully-qualified-class-name;

Pengisytiharan ini mesti ditambah pada permulaan kelas, sejurus selepas packagepengisytiharan.

Contoh:

package com.codegym.tasks.task01;

import java.util.Scanner;
import com.test.helper.special.ArrayList;

public class Solution
{
   public static void main(String[] args)
   {
     Scanner console = new Scanner(System.in);
     ArrayList list = new ArrayList();
   }
}

Kami mengimport dua kelas ( java.util.Scannerdan com.test.helper.special.ArrayList), supaya kami boleh menggunakan nama pendek mereka dalam kod kami. Dan pengkompil akan mengetahui kelas mana yang hendak digunakan.

Dan inilah rupa kod yang sama jika kita tidak menggunakan import:

package com.codegym.tasks.task01;

public class Solution
{
   public static void main(String[] args)
   {
     java.util.Scanner console = new java.util.Scanner(System.in);
     com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
   }
}

Ngomong-ngomong, jika projek anda mempunyai dua kelas bernama Scanner, anda tidak akan dapat mengimport kedua-duanya ke dalam fail yang sama: anda perlu menggunakan nama panjang untuk salah satu daripadanya.

Katakan anda mempunyai Jen dalam pasukan anda. Tiada masalah komunikasi, kerana semua orang tahu siapa dia. Tetapi jika terdapat tiga Jen, maka nama yang layak sepenuhnya perlu digunakan untuk membezakan mereka.

Nota 1

Ngomong-ngomong, jika anda terlalu malas untuk menambah banyak pernyataan import ke kelas anda, anda boleh menggunakan versi malasnya: bukannya nama kelas tertentu, letakkan asterisk:

import package-name.*;

Itu akan membolehkan anda menggunakan nama pendek semua kelas dalam pakej.

Nota 2

Semua kelas dalam java.langpakej diimport secara automatik, jadi anda tidak perlu menulis importpernyataan untuk mereka. Anda pasti sudah mengetahui salah satu daripada kelas ini: java.lang.String. Ya, betul. Ini ialah Stringkelas yang telah kami gunakan untuk bekerja dengan rentetan.