1. แพ็คเกจ
โปรแกรม Java ทั่วไปเกี่ยวข้องกับคลาสจำนวนมาก เท่าไหร่? หลายพันหลายหมื่น. และถ้าคุณคำนึงถึงข้อเท็จจริงที่ว่าโปรแกรมใช้ไลบรารีต่างๆ ที่มีคลาสที่เขียนโดยโปรแกรมเมอร์คนอื่นๆ ก็สามารถวัดจำนวนคลาสได้อย่างง่ายดายในหลักล้าน!
คงเป็นไปไม่ได้เลยที่จะคิดชื่อเฉพาะสำหรับคลาสทั้งหมดนับล้านหรือแม้แต่หลายพันคลาส
แน่นอน เราสามารถจินตนาการถึงชื่อเช่นA123
และB345
แต่ถ้าเรากำลังพูดถึงการเลือกชื่อคลาสที่ดี ชื่อที่ทำให้เข้าใจคลาสได้ง่ายขึ้น (เช่นString
สำหรับสตริง เป็นต้น) ดังนั้น แม้แต่การสร้างชื่อเฉพาะหนึ่งพันชื่อก็เป็นเรื่องที่มาก ของการทำงาน.
นั่นเป็นเหตุผลที่ใน Java เป็นเรื่องปกติที่จะจัดกลุ่มคลาสเป็นแพ็คเกจโดยใช้คำหลักแพ็คเกจ
คลาส Java และแพ็คเกจนั้นคล้ายกับไฟล์และโฟลเดอร์ในคอมพิวเตอร์มาก
ตัวอย่างเช่น หากคุณต้องการจัดเก็บเอกสาร 10 ฉบับในคอมพิวเตอร์ของคุณ คุณอาจเก็บไว้ในโฟลเดอร์เดียว แต่ถ้าคุณมีเอกสารเป็นพันๆ ฉบับ (เช่น ที่เก็บเอกสารทั้งหมดของบริษัท)
ด้วยเอกสารนับพันที่ต้องจัดเก็บ ทางออกหนึ่งคือการสร้างโฟลเดอร์หลายระดับพร้อมชื่อที่สื่อความหมายที่ดี จากนั้นในโฟลเดอร์ที่ระดับสุดท้าย ให้จัดเก็บเอกสารที่เกี่ยวข้องกับโฟลเดอร์นั้นๆ ชื่อที่สื่อความหมายที่ดีสำหรับเอกสารก็ไม่เสียหายเช่นกัน
อันที่จริง เราทำทั้งหมดนี้สำหรับคลาสในภาษาจาวา
ไฟล์ที่มีคลาสจะถูกจัดเก็บไว้ในไดเร็กทอรี (โฟลเดอร์) ที่แตกต่างกัน และชื่อเต็มของโฟลเดอร์ของคลาสที่มีโฟลเดอร์ย่อยทั้งหมดคือชื่อของแพ็คเกจ ตัวอย่าง:
เส้นทางไปยังไฟล์ | ชื่อแพ็คเกจ | ชื่อชั้น |
---|---|---|
|
|
|
|
|
|
|
|
|
ชื่อแพ็คเกจใช้จุดเป็นตัวคั่น ซึ่งแตกต่างจากชื่อโฟลเดอร์ กล่าวอีกนัยหนึ่งคือโฟลเดอร์นั้น\com\codegym\tasks\
สอดคล้องกับcom.codegym.tasks
แพ็คเกจ
2. src
โฟลเดอร์
ใน Java เป็นเรื่องปกติที่จะเก็บคลาสทั้งหมดสำหรับโปรแกรมไว้ในโฟลเดอร์เดียว (และโฟลเดอร์ย่อย) โฟลเดอร์นี้มักจะเรียกว่าsrc
(ย่อมาจากsource )
โฟลเดอร์นี้เรียกว่าโปรเจ็กต์รูท (หรือซอร์สรูท ) และพาธของแพ็กเกจทั้งหมดสัมพันธ์กัน ตัวอย่าง:
โฟลเดอร์ | ชื่อแพ็คเกจ |
---|---|
|
|
|
|
ในสถานการณ์นี้ โปรแกรมเมอร์จะพูดว่า "เรามีโครงการชื่อmy
ซึ่งอยู่ในc:\projects\data
โฟลเดอร์" หรือ "เรามีโครงการชื่อproject
ซึ่งอยู่ในd:\files\git\data
โฟลเดอร์"
เป็นการดีที่สุดที่จะใส่คลาสในแพ็คเกจเสมอและไม่ใช่ในโฟลเดอร์รูทโดยตรง ( src
.หากคุณมีคลาสเพียงไม่กี่คลาส สิ่งนี้จะไม่แสดงปัญหา แต่เมื่อมีหลายคลาส มันง่ายมากที่จะสับสน ดังนั้น , สร้างคลาสของคุณในแพ็คเกจเท่านั้น
ใน Java เป็นธรรมเนียมที่จะต้องตั้งชื่อที่สื่อความหมายให้กับคลาสและแพ็กเกจ หลายบริษัทออกไลบรารีของตนเอง (ชุดของคลาส) และเพื่อหลีกเลี่ยงความสับสน บริษัทจึงรวมชื่อของบริษัท/เว็บไซต์/โครงการไว้ในชื่อของแพ็คเกจ:
ชื่อแพ็คเกจ | ชื่อบริษัท/โครงการ |
---|---|
|
โครงการอาปาเช่ |
|
บริษัท ออราเคิล |
|
บริษัท Oracle โครงการ Java |
|
บริษัท IBM โครงการ WebSphere |
|
โครงการเจบอส |
3. เนื้อหาไฟล์
ตามมาตรฐานภาษา Java ข้อมูลเกี่ยวกับชื่อคลาสและชื่อของแพ็คเกจจะต้องรวมอยู่ในไฟล์พร้อมรหัส แบบฟอร์มทั่วไปแสดงไว้ด้านล่าง:
package package-name;
public class ClassName
{
}
ชื่อแพ็กเกจต้องตรงกับชื่อโฟลเดอร์ และชื่อไฟล์ต้องตรงกับชื่อคลาสสาธารณะ
หากคุณมีไฟล์ ควรมีสิ่งนี้:...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. นำเข้าชั้นเรียน
ชื่อคลาสและชื่อแพ็กเกจเรียกว่าชื่อแบบเต็มของคลาส
ตัวอย่าง:
ชื่อที่มีคุณสมบัติครบถ้วน | ชื่อแพ็คเกจ | ชื่อชั้น |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
ไม่มี |
|
ข่าวดี:
ชื่อคลาสแบบเต็มจะไม่ซ้ำกันภายในโปรเจ็กต์เสมอ ท้ายที่สุด คุณไม่สามารถสร้างไฟล์สองไฟล์ที่มีชื่อเดียวกันในโฟลเดอร์เดียวได้
ข่าวร้าย:
ชื่อคลาสแบบเต็มมักจะมีความยาวหรือยาวมาก และการเขียนชื่อยาว ๆ (เช่น 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 สามคนก็ต้องใช้ชื่อที่มีคุณสมบัติครบถ้วนเพื่อแยกความแตกต่าง
อย่างไรก็ตาม ถ้าคุณขี้เกียจเพิ่มคำสั่ง import จำนวนมากในชั้นเรียนของคุณ คุณสามารถใช้เวอร์ชันที่ขี้เกียจได้: แทนที่จะใส่ชื่อคลาสเฉพาะ ให้ใส่เครื่องหมายดอกจัน:
import package-name.*;
ซึ่งจะทำให้คุณสามารถใช้ชื่อย่อของคลาสทั้งหมดในแพ็คเกจได้
คลาสทั้งหมดในjava.lang
แพ็คเกจจะถูกนำเข้าโดยอัตโนมัติ ดังนั้นคุณไม่จำเป็นต้องเขียนimport
คำสั่งสำหรับคลาสเหล่านั้น คุณต้องรู้จักหนึ่งในคลาสเหล่านี้อย่างแน่นอนjava.lang.String
: ถูกต้องเลย. นี่คือString
คลาสที่เราใช้สำหรับทำงานกับสตริง
GO TO FULL VERSION