1. แพ็คเกจ

โปรแกรม Java ทั่วไปเกี่ยวข้องกับคลาสจำนวนมาก เท่าไหร่? หลายพันหลายหมื่น. และถ้าคุณคำนึงถึงข้อเท็จจริงที่ว่าโปรแกรมใช้ไลบรารีต่างๆ ที่มีคลาสที่เขียนโดยโปรแกรมเมอร์คนอื่นๆ ก็สามารถวัดจำนวนคลาสได้อย่างง่ายดายในหลักล้าน!

คงเป็นไปไม่ได้เลยที่จะคิดชื่อเฉพาะสำหรับคลาสทั้งหมดนับล้านหรือแม้แต่หลายพันคลาส

แน่นอน เราสามารถจินตนาการถึงชื่อเช่นA123และB345แต่ถ้าเรากำลังพูดถึงการเลือกชื่อคลาสที่ดี ชื่อที่ทำให้เข้าใจคลาสได้ง่ายขึ้น (เช่นStringสำหรับสตริง เป็นต้น) ดังนั้น แม้แต่การสร้างชื่อเฉพาะหนึ่งพันชื่อก็เป็นเรื่องที่มาก ของการทำงาน.

นั่นเป็นเหตุผลที่ใน Java เป็นเรื่องปกติที่จะจัดกลุ่มคลาสเป็นแพ็คเกจโดยใช้คำหลักแพ็คเกจ

คลาส Java และแพ็คเกจนั้นคล้ายกับไฟล์และโฟลเดอร์ในคอมพิวเตอร์มาก

ตัวอย่างเช่น หากคุณต้องการจัดเก็บเอกสาร 10 ฉบับในคอมพิวเตอร์ของคุณ คุณอาจเก็บไว้ในโฟลเดอร์เดียว แต่ถ้าคุณมีเอกสารเป็นพันๆ ฉบับ (เช่น ที่เก็บเอกสารทั้งหมดของบริษัท)

ด้วยเอกสารนับพันที่ต้องจัดเก็บ ทางออกหนึ่งคือการสร้างโฟลเดอร์หลายระดับพร้อมชื่อที่สื่อความหมายที่ดี จากนั้นในโฟลเดอร์ที่ระดับสุดท้าย ให้จัดเก็บเอกสารที่เกี่ยวข้องกับโฟลเดอร์นั้นๆ ชื่อที่สื่อความหมายที่ดีสำหรับเอกสารก็ไม่เสียหายเช่นกัน

อันที่จริง เราทำทั้งหมดนี้สำหรับคลาสในภาษาจาวา

ไฟล์ที่มีคลาสจะถูกจัดเก็บไว้ในไดเร็กทอรี (โฟลเดอร์) ที่แตกต่างกัน และชื่อเต็มของโฟลเดอร์ของคลาสที่มีโฟลเดอร์ย่อยทั้งหมดคือชื่อของแพ็คเกจ ตัวอย่าง:

เส้นทางไปยังไฟล์ ชื่อแพ็คเกจ ชื่อชั้น
\com\codegym\tasks\Solution.java
com.codegym.tasks
Solution
\com\io\FileInputStream.java
com.io
FileInputStream
\java\util\ArrayList.java
java.util
ArrayList

ชื่อแพ็คเกจใช้จุดเป็นตัวคั่น ซึ่งแตกต่างจากชื่อโฟลเดอร์ กล่าวอีกนัยหนึ่งคือโฟลเดอร์นั้น\com\codegym\tasks\สอดคล้องกับcom.codegym.tasksแพ็คเกจ


2. srcโฟลเดอร์

ใน Java เป็นเรื่องปกติที่จะเก็บคลาสทั้งหมดสำหรับโปรแกรมไว้ในโฟลเดอร์เดียว (และโฟลเดอร์ย่อย) โฟลเดอร์นี้มักจะเรียกว่าsrc(ย่อมาจากsource )

โฟลเดอร์นี้เรียกว่าโปรเจ็กต์รูท (หรือซอร์สรูท ) และพาธของแพ็กเกจทั้งหมดสัมพันธ์กัน ตัวอย่าง:

โฟลเดอร์ ชื่อแพ็คเกจ
c:\projects\data\my\src\com\codegym\tasks\
com.codegym.tasks
d:\files\git\data\project\src\com\codegym\tasks\
com.codegym.tasks

ในสถานการณ์นี้ โปรแกรมเมอร์จะพูดว่า "เรามีโครงการชื่อmyซึ่งอยู่ในc:\projects\dataโฟลเดอร์" หรือ "เรามีโครงการชื่อprojectซึ่งอยู่ในd:\files\git\dataโฟลเดอร์"

เป็นการดีที่สุดที่จะใส่คลาสในแพ็คเกจเสมอและไม่ใช่ในโฟลเดอร์รูทโดยตรง ( src.หากคุณมีคลาสเพียงไม่กี่คลาส สิ่งนี้จะไม่แสดงปัญหา แต่เมื่อมีหลายคลาส มันง่ายมากที่จะสับสน ดังนั้น , สร้างคลาสของคุณในแพ็คเกจเท่านั้น

ใน Java เป็นธรรมเนียมที่จะต้องตั้งชื่อที่สื่อความหมายให้กับคลาสและแพ็กเกจ หลายบริษัทออกไลบรารีของตนเอง (ชุดของคลาส) และเพื่อหลีกเลี่ยงความสับสน บริษัทจึงรวมชื่อของบริษัท/เว็บไซต์/โครงการไว้ในชื่อของแพ็คเกจ:

ชื่อแพ็คเกจ ชื่อบริษัท/โครงการ
org.apache.common
org.apache.tomcat
org.apache.util
โครงการอาปาเช่
com.oracle.jdbc
บริษัท ออราเคิล
java.io
javax.servlet
บริษัท Oracle โครงการ Java
com.ibm.websphere
บริษัท IBM โครงการ WebSphere
com.jboss
โครงการเจบอส

3. เนื้อหาไฟล์

ตามมาตรฐานภาษา Java ข้อมูลเกี่ยวกับชื่อคลาสและชื่อของแพ็คเกจจะต้องรวมอยู่ในไฟล์พร้อมรหัส แบบฟอร์มทั่วไปแสดงไว้ด้านล่าง:

package package-name;

public class ClassName
{

}

ชื่อแพ็กเกจต้องตรงกับชื่อโฟลเดอร์ และชื่อไฟล์ต้องตรงกับชื่อคลาสสาธารณะ

หากคุณมีไฟล์ ควรมีสิ่งนี้:...\src\com\project\Service.java

package com.project;

public class Service
{

}

4. นำเข้าชั้นเรียน

ชื่อคลาสและชื่อแพ็กเกจเรียกว่าชื่อแบบเต็มของคลาส

ตัวอย่าง:

ชื่อที่มีคุณสมบัติครบถ้วน ชื่อแพ็คเกจ ชื่อชั้น
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
ไม่มี
Cat

ข่าวดี:

ชื่อคลาสแบบเต็มจะไม่ซ้ำกันภายในโปรเจ็กต์เสมอ ท้ายที่สุด คุณไม่สามารถสร้างไฟล์สองไฟล์ที่มีชื่อเดียวกันในโฟลเดอร์เดียวได้

ข่าวร้าย:

ชื่อคลาสแบบเต็มมักจะมีความยาวหรือยาวมาก และการเขียนชื่อยาว ๆ (เช่น java.util.ArrayList) ทุกครั้งในโค้ดนั้นไม่สะดวกอย่างยิ่ง

นั่นเป็นเหตุผลที่ Java เพิ่มความสามารถในการนำเข้าคลาส

คุณสามารถใช้ ชื่อย่อ ของคลาสในโค้ดของคุณได้ แต่ก่อนอื่นคุณต้องแจ้งให้คอมไพเลอร์ทราบว่าชื่อคลาสใดที่มีคุณสมบัติครบถ้วนตรงกับชื่อย่อ จะเกิดอะไรขึ้นถ้าคุณมีหลายชั้นเรียนที่มีชื่อเดียวกันในโครงการของคุณ หรือเดิมมีอยู่แล้วแต่เพิ่มมาอีก 15...

หากต้องการใช้ชื่อคลาสแบบสั้นในโค้ดของคุณ คุณต้องเพิ่มโครงสร้างต่อไปนี้:

import fully-qualified-class-name;

ต้องเพิ่มการประกาศนี้ที่จุดเริ่มต้นของชั้นเรียนทันทีหลังจากpackageการประกาศ

ตัวอย่าง:

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();
   }
}

เรานำเข้าสองคลาส ( java.util.Scannerและcom.test.helper.special.ArrayList) ดังนั้นเราจึงสามารถใช้ชื่อย่อในรหัสของเราได้ และคอมไพเลอร์จะรู้ว่าจะใช้คลาสใด

และนี่คือลักษณะของรหัสเดียวกันหากเราไม่ได้ใช้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();
   }
}

อย่างไรก็ตาม หากโปรเจ็กต์ของคุณมีชื่อคลาส 2 คลาสScannerคุณจะไม่สามารถอิมพอร์ตทั้งสองคลาสลงในไฟล์เดียวกันได้คุณจะต้องใช้ ชื่อยาวสำหรับคลาสใดคลาสหนึ่ง

สมมติว่าคุณมีเจนในทีมของคุณ ไม่มีปัญหาในการสื่อสารเพราะทุกคนรู้ว่าเธอเป็นใคร แต่ถ้ามี Jens สามคนก็ต้องใช้ชื่อที่มีคุณสมบัติครบถ้วนเพื่อแยกความแตกต่าง

หมายเหตุ 1

อย่างไรก็ตาม ถ้าคุณขี้เกียจเพิ่มคำสั่ง import จำนวนมากในชั้นเรียนของคุณ คุณสามารถใช้เวอร์ชันที่ขี้เกียจได้: แทนที่จะใส่ชื่อคลาสเฉพาะ ให้ใส่เครื่องหมายดอกจัน:

import package-name.*;

ซึ่งจะทำให้คุณสามารถใช้ชื่อย่อของคลาสทั้งหมดในแพ็คเกจได้

โน้ต 2

คลาสทั้งหมดในjava.langแพ็คเกจจะถูกนำเข้าโดยอัตโนมัติ ดังนั้นคุณไม่จำเป็นต้องเขียนimportคำสั่งสำหรับคลาสเหล่านั้น คุณต้องรู้จักหนึ่งในคลาสเหล่านี้อย่างแน่นอนjava.lang.String: ถูกต้องเลย. นี่คือStringคลาสที่เราใช้สำหรับทำงานกับสตริง