เกริ่นนำ
สำหรับคนที่ใช้จาว่าเขียนโปรเจคที่มีไฟล์มากกว่า 10 ไฟล์ขึ้นไป สิ่งที่ขาดไม่ได้อย่างหนึ่งคือการแบ่งไฟล์ไว้ใน subdirectory ต่าง ๆ โดยแบ่งตามหมวดหมู่และความสามารถที่อยู่ในแต่ละไฟล์นั้น ตัวอย่างที่เห็นได้ง่ายคือไฟล์ทั้งหลายที่อยู่ใน java package (java.xxx.yyy....)
ไฟล์ที่อยู่ในแต่ละ subdirectory จะมีหน้าที่แตกต่างกัน ยกตัวอย่างไฟล์ใน java.io.*; จะทำหน้าที่เกี่ยวกับ Input/Output ไฟล์ที่อยู่ใน java.net.*; ก็จะทำหน้าที่เกี่ยวกับ network เป็นต้น ถ้าใครเคยเข้าไปดู directory ใน java application ที่มี graphical user interface (GUI) รวมอยู่ด้วย ก็มักจะเห็น subdirectory ที่มีชื่อว่า ui (user interface) ซึ่งเป็นที่ ๆ เก็บโค๊ดเกี่ยวกับ GUI ทั้งหมด กับ engine ซึ่งเป็นส่วนที่เก็บโค๊ดที่เป็นตัวทำงานจริง ๆ เมื่อ user กดที่ปุ่มต่าง ๆ
ประโยชน์ที่เห็นได้ชัดในการใช้ package คือ การง่ายในการจัดเก็บ ค้นหา รวมไปถึงการแบ่งแยกไฟล์ในแต่ละโปรเจคให้แยกจากกันโดยสิ้นเชิง ความเข้าใจเกี่ยวกับ package จะช่วยให้สามารถใช้ไฟล์ที่เก็บอยู่ใน .jar (java archive) ไฟล์ ซึ่งนักพัฒนานำมาจากที่ต่าง ๆ ได้อย่างเหมาะสมมากขึ้น
การเขียน package
สมมุติว่ามีไฟล์หนึ่งชื่อ HelloWorld ซึ่งเราอยากให้อยู่ใน package ทีชื่อว่า world เราจะต้องใส่คำว่า package world ไว้บนสุดของไฟล์ HelloWorld
//================HelloWorld.java====================
package world;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
//===================================================
สิ่งหนึ่งที่จะลืมไม่ได้หลังจากจัดให้ไฟล์ HelloWorld อยู่ใน package ที่ชื่อ world แล้ว คือการนำไฟล์นั้นไปใส่ใน directory ที่มีชื่อว่า world ง่ายที่สุดคือการใส่ไว้ที่ root directory ดังนั้นโครงสร้างของ package ก็จะเป็นดังรูป
-C:---world--HelloWorld.java
ถ้าจะให้ javac (java compiler) หรือ java (Java virtual machine) เห็น package นี้ เราจะต้องทำอีกอย่างคือการเซ็ต classpath
set classpath = .;C:\;
ในตัวอย่างนี้ จาว่าจะหาไฟล์ HelloWorld ที่อยู่ใน package "world" = world.HelloWorld จาก directory ปัจจุบัน กับ C:\ drive
. หมายถึง directory ปัจจุบัน
C:\ คือ directory ที่เราเก็บ package ไว้ อาจมี ; กั้น ถ้ามีการเซ็ต classpath ให้หาหลาย ๆ ที่
ถ้าไม่อยากใส่ไว้ที่ root แต่อยากใส่ไว้ที่ directory ที่ชื่อ myclasses โครงสร้างของ package ก็จะเป็นดังรูป
-C:---myclasses--world--HelloWorld.java
การเซ็ต classpath ก็จะเปลี่ยนเป็น
set classpath = .;C:\myclasses;
จาว่าก็จะหาไฟล์ world.HelloWorld จาก directory ปัจจุบัน กับ C:\myclasses directory แทน
ถ้าจะ compile ก็ให้ไปที่ directory C:\myclasses\world\ แล้วพิมพ์ javac HelloWorld.java
ถ้าจะ run ก็จะต้องใส่ชื่อแบบเต็มรูปแบบคือ java world.HelloWorld
บางทีใน package อาจมีการเก็บไฟล์ไว้ในหลาย level สมมุติว่าเราอยากสร้างไฟล์ชื่อ HelloMoon ไว้ใน subpackage ชื่อ moon ซึ่งอยู่ข้างใน package "world" อีกที ไฟล์ HelloMoon ก็จะเป็นดังนี้
//=================HelloMoon.java====================
package world.moon;
public class HelloMoon {
protected String holeName = "rabbit hole";
public String getHoleName() {
return hole;
}
credit : www.jarticles.com/package/index.html


Reply With Quote
