1. Paket

Program Java biasa melibatkan sejumlah besar kelas. Berapa banyak? Ribuan, puluhan ribu. Dan jika Anda juga memperhitungkan fakta bahwa program menggunakan berbagai perpustakaan yang berisi kelas yang ditulis oleh pemrogram lain, maka jumlah kelas dapat dengan mudah diukur dalam jutaan!

Akan sangat mustahil untuk menghasilkan nama unik untuk jutaan, atau bahkan hanya ribuan, kelas ini.

Tentu saja, kita dapat membayangkan nama seperti A123dan B345, tetapi jika kita berbicara tentang memilih nama kelas yang bagus, yang membuatnya lebih mudah untuk memahami kelas tersebut (seperti Stringuntuk string, misalnya), maka menghasilkan seribu nama unik pun banyak. pekerjaan.

Itu sebabnya di Java biasanya mengelompokkan kelas ke dalam paket menggunakan kata kunci package .

Kelas Java dan paketnya sangat mirip dengan file dan folder di komputer.

Misalnya, jika Anda perlu menyimpan 10 dokumen di komputer, Anda mungkin akan menyimpannya dalam satu folder. Tetapi bagaimana jika Anda memiliki ribuan dokumen (misalnya, tempat penyimpanan semua dokumen perusahaan)?

Dengan ribuan dokumen yang akan disimpan, salah satu solusinya adalah membuat beberapa level folder dengan nama deskriptif yang bagus. Dan kemudian di folder di tingkat terakhir, simpan dokumen yang terkait dengan folder tersebut. Nama deskriptif yang bagus untuk dokumen juga tidak ada salahnya.

Faktanya, kami melakukan semua ini untuk kelas-kelas di Java.

File yang berisi kelas disimpan di direktori (folder) yang berbeda, dan nama lengkap folder kelas dengan semua subfoldernya adalah nama paketnya. Contoh:

Jalur ke file Nama paket 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 paket menggunakan titik sebagai pembatas. Dengan kata lain, folder tersebut \com\codegym\tasks\sesuai dengan com.codegym.taskspaket.


2. srcmap

Di Java, biasanya menyimpan semua kelas untuk suatu program dalam satu folder (dan subfolder). Folder ini biasa disebut src(kependekan dari source ).

Folder ini disebut root proyek (atau root sumber ), dan semua jalur paket relatif terhadapnya. Contoh:

Folder Nama paket
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, pemrogram mengatakan sesuatu seperti "kami memiliki proyek bernama my, yang terletak di c:\projects\datafolder" atau "kami memiliki proyek bernama project, yang terletak di d:\files\git\datafolder"

Yang terbaik adalah selalu meletakkan kelas dalam paket dan tidak langsung di folder root ( src. Jika Anda hanya memiliki beberapa kelas, ini tidak menimbulkan masalah. Tetapi ketika ada banyak kelas, sangat mudah untuk menjadi bingung. Jadi , selalu buat kelas Anda hanya dalam paket.

Di Java, biasanya memberi nama yang bermakna untuk kelas dan paket. Banyak perusahaan merilis perpustakaan mereka sendiri (satu set kelas) dan, untuk menghindari kebingungan, mereka memasukkan nama perusahaan/situs web/proyek ke dalam nama paket:

Nama paket Nama perusahaan/proyek
org.apache.common
org.apache.tomcat
org.apache.util
proyek Apache
com.oracle.jdbc
Perusahaan Oracle
java.io
javax.servlet
Perusahaan Oracle, proyek Java
com.ibm.websphere
Perusahaan IBM, proyek WebSphere
com.jboss
proyek JBoss

3. Isi berkas

Menurut standar bahasa Java, informasi tentang nama kelas dan nama paketnya harus disertakan dalam file dengan kode tersebut. Bentuk umum ditunjukkan di bawah ini:

package package-name;

public class ClassName
{

}

Nama paket harus sesuai dengan nama folder, dan nama file harus sesuai dengan nama kelas publik.

Jika Anda memiliki file, maka itu harus berisi ini:...\src\com\project\Service.java

package com.project;

public class Service
{

}

4. Mengimpor kelas

Nama kelas dan nama paket membentuk apa yang disebut nama kelas yang sepenuhnya memenuhi syarat .

Contoh:

Nama yang sepenuhnya memenuhi syarat Nama paket 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
tidak ada
Cat

Berita bagus:

Nama kelas yang memenuhi syarat selalu unik dalam sebuah proyek. Lagi pula, Anda tidak dapat membuat dua file dengan nama yang sama dalam satu folder.

Kabar buruknya:

Nama kelas yang memenuhi syarat biasanya panjang atau sangat panjang. Dan menulis nama panjang (misalnya java.util.ArrayList) setiap kali dalam kode sangat merepotkan.

Itu sebabnya Java menambahkan kemampuan untuk mengimpor kelas .

Anda dapat menggunakan nama pendek kelas dalam kode Anda, tetapi pertama-tama Anda harus memberi tahu kompiler nama kelas yang memenuhi syarat mana yang sesuai dengan nama pendek tersebut . Bagaimana jika Anda sekarang memiliki banyak kelas dengan nama yang sama di proyek Anda? Atau Anda awalnya memiliki satu, tetapi kemudian ditambahkan 15 lagi ...

Untuk menggunakan nama kelas pendek dalam kode Anda, Anda perlu menambahkan konstruksi berikut:

import fully-qualified-class-name;

Deklarasi ini harus ditambahkan di awal kelas, tepat setelah deklarasi package.

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 mengimpor dua kelas ( java.util.Scannerdan com.test.helper.special.ArrayList), sehingga kami dapat menggunakan nama pendeknya dalam kode kami. Dan kompiler akan mengetahui kelas mana yang akan digunakan.

Dan inilah tampilan kode 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();
   }
}

Omong-omong, jika proyek Anda memiliki dua kelas bernama Scanner, Anda tidak akan dapat mengimpor keduanya ke dalam file yang sama: Anda harus menggunakan nama panjang untuk salah satunya.

Katakanlah Anda memiliki Jen di tim Anda. Tidak ada masalah komunikasi, karena semua orang tahu siapa dia. Tetapi jika ada tiga Jen, maka nama yang memenuhi syarat harus digunakan untuk membedakannya.

Catatan 1

Omong-omong, jika Anda terlalu malas untuk menambahkan banyak pernyataan impor ke kelas Anda, Anda dapat menggunakan versi malasnya: alih-alih nama kelas tertentu, beri tanda bintang:

import package-name.*;

Itu akan memungkinkan Anda untuk menggunakan nama pendek dari semua kelas dalam paket.

Catatan 2

Semua kelas dalam java.langpaket diimpor secara otomatis, jadi Anda tidak perlu menulis importpernyataan untuknya. Anda pasti sudah tahu salah satu dari kelas ini: java.lang.String. Ya itu betul. Ini adalah Stringkelas yang kami gunakan untuk bekerja dengan string.