4. บทที่ 7 แพ็คเกจ หนาที่ 164
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง การสรางคลาส A ใน package ที่ชื่อ myPackage
จากนั้นทําการคอมไพลโปรแกรมโดยการใช command ดังตอไปนี้
D:chap7javac -d . <filename.java>
-d เปน option ของ java compiler(javac.exe) ใชระบุเพื่อบอกคอมไพเลอรวาเมื่อคอมไพลได
ไฟล .class ออกมาแลวใหนําไฟล .class ไปเก็บไวที่ไดเร็กทรอรีใด
//A.java บันทึกใน directory d:chap7
package myPackage;
public class A{
public void print(){
System.out.println("Hello , I am A class.");
}
}
5. บทที่ 7 แพ็คเกจ หนาที่ 165
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ผลลัพธที่ไดจากการคอมไพล ตัวอยาง คอมไพเลอรจะสรางโฟรเดอรชื่อ myPackage ในโฟร
เดอร chap7 ซึ่งเปนที่เก็บไฟลนามสกุล A.java และภายใน package ชื่อ myPackage จะประกอบดวย
ไฟล A.class อยูภายใน
ตัวอยาง สราง class B ใน package ชื่อ mySubPackage ซึ่งอยูภายใต myPackage
// B.java save in chap7
package myPackage.mySubPackage;
public class B{
public void print(){
System.out.println("Hello , I am B class");
}
}
6. บทที่ 7 แพ็คเกจ หนาที่ 166
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
จากการ compile ทั้งสองโปรแกรมจะไดไฟลอยูในโฟลเดอรดังตอไปนี้
D:chap7
A.java
B.java
myPackage
A.class
mySubPackage
B.class
คลาส A และ คลาส B จะตองระบุเปน public มิเชนนั้นจะไมสามารถอางถึงไดจากภายนอก
package และในทํานองเดียวกัน method print ของทั้งสอง class ตองเปน public ดวย มิเชนนั้นจะไม
สามารถเรียกใชงานจากภายนอก package ได
ตัวอยางการเรียกใชงาน class A และ class B
จากตัวอยางสังเกตวาการอางถึงคลาส A และ คลาส B ในทุกตําแหนงจะตองระบุชื่อเต็มของ
package เปน myPackage.A และ mySubPackage.B ตามลําดับ จึงเปนเรื่องที่ยุงยากและทําใหเกิด
ความผิดพลาดไดงาย ภาษาจาวาจึงนําเอาประโยค import สําหรับทําใหชื่อของ package รูจักกันทั้ง
โปรแกรมและอางถึงไดโดยใชเพียงชื่อคลาสเทานั้น
//testPackage1.java save in chap7 folder
class testPackage1{
public static void main(String[] args) {
new myPackage.A().print();
new myPackage.mySubPackage.B().print();
}
}
ผลลัพธที่ไดคือ
Hello , I am A class.
Hello , I am B class
7. บทที่ 7 แพ็คเกจ หนาที่ 167
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
หากตองการนําคลาสที่มีอยูแลวมาใชในโปรแกรมที่กําลังจะสรางขึ้นใหม เราจะตองใชคําสั่ง
import เพื่อบอกใหคอมไพเลอรทราบวาจะสามารถหาคลาสที่เราตองการใชงานไดจากในแพ็กเก็จใด
โดยตองใชคําสั่ง import กอนการประกาศคลาสเสมอ
รูปแบบของการใชคําสั่ง import เพื่อนําคลาสในแพ็กเก็จที่ตองการเขามาใชงานคือ
import <package_name>.<sub_package>.<class_name>;
ในการระบุชื่อคลาสที่ตองการใชงานนั้น จะระบุชื่อคลาสลงไปตรงๆ หรือระบุเปน * ซึ่ง
หมายถึงคลาสทุกคลาสก็ได
การระบุชื่อคลาสใดคลาสหนึ่ง กับการระบุ * หมายถึง ทุกคลาสจะไมมีผลตางกัน เพราะการ
ระบุ * ไมไดหมายความวาคลาสทุกคลาสจะถูกโหลดเขาสูหนวยความจําใหสิ้นเปลือง เพราะความจริง
แลวจะมีแตเฉพาะคลาสที่ถูกเรียกใชงานเทานั้น ที่จะถูกโหลดเขาสูหนวยความจํา
ตัวอยาง การใชงานประโยค import
ประโยค import จะตองอยูหลังจากประโยค package (ถามี) และอยูกอนประโยคอื่นๆ ใน
โปรแกรม ยกเวน comment ประโยค import ระบุถึงชื่อคลาสที่จะใชงาน หากตองการใชงานหลาย
คลาสอาจจะแยก import คลาสละประโยคหรือจะ import ทุกคลาสใน package โดยใช * ก็ได อยางเชน
import myPackage.*; จะทําใหอางถึงทุกๆ คลาสใน myPackage ได แตไมรวมไปถึงใน sub-package
สวน import myPackage.mySubPackage.*; จะทําใหอางถึงทุกคลาสใน myPackage.mySubPackage ได
//testPackage2.java save in week13 directory
import myPackage.A;
import myPackage.mySubPackage.B;
class testPackage2{
public static void main(String args[]){
new A().print();
B b = new B();
b.print();
}
}
ผลลัพธที่ไดคือ
Hello , I am A class.
Hello , I am B class
11. บทที่ 7 แพ็คเกจ หนาที่ 171
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
ตัวอยาง. แสดงการนํา class มาใชงานโดยการเรียกใช class กันเอง ไมตองใช package
โปรแกรมหลักที่ class อื่น เรียกใช class นี้
public class Car{
int wheel;
int tires;
int speed;
public Car(int inWheels,int inTires,int inSpeed ){ //constructor method
wheels = inWheels;
tires = inTires;
speed = inSpeed;
}
}
//class Van จะเรียกใชงาน class Car โดยตรง
public class Van{
Car theCar;// เรียกใช Car class โดยตรง ไมตองทําการ import เขามาไวในโปรแกรม
int door;
public Van(Car inCar, int inDoor){ //constructor method
theCar = inCar;
doors = inDoor;
}
}
12. บทที่ 7 แพ็คเกจ หนาที่ 172
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
แพ็คเกจมาตรฐาน
ในภาษาจาวามีแพ็คเกจมาตรฐานกลุมหนึ่งซึ่งเก็บคลาสพื้นฐานของภาษาจาวาเอาไวใหนักเขียน
โปรแกรมเมอรภาษาจาวาอิมพอรตไปใชไดเลย ตัวอยางของแพ็คเกจมาตรฐานที่ควรรูจักไดแก
java.lang
แพ็คเกจนี้เปนแพ็คเกจพื้นฐานที่สุดของภาษาจาวา ตัวอยางคลาสในแพ็คเกจนี้ไดแก คลาสMath
คลาส String คลาสของตัวแปรพื้นฐาน คลาสเกี่ยวกับเอ็กซเซฟชั่น และคลาสเกี่ยวกับเทรด แพ็คเกจนี้เปน
แพ็คเกจพิเศษเพราะเวลาตองการใชงานคลาสในแพ็คเกจนี้ไมตองใชคําสั่ง import สามารถเรียกใชคลาส
ในแพ็คเกจไดโดยตรง
ตัวอยาง แสดงการนํา Car class มาทําเปน package เพื่อให Van class import เขามาใชในโปรแกรม
ของตนเอง
package Transportation; //สราง package ชื่อ “Transportation”
public class Car{
int wheel;
int tires;
int speed;
public Car(int inWheels,int inTires,int inSpeed ){ //constructor method
wheels = inWheels;
tires = inTires;
speed = inSpeed;
}
public class Van{
Transportation.Car theCar; //import Package เขามาในโปรแกรม
Car theCar;// เรียกใช Car class โดยตรง ไมตองทําการ import เขามาไวในโปรแกรม
int door;
public Van(Car inCar, int inDoor){ //constructor method
theCar = inCar;
doors = inDoor;
}
}
16. บทที่ 7 แพ็คเกจ หนาที่ 176
เอกสารประกอบการสอน 305272 การเขียนโปรแกรมคอมพิวเตอรขั้นสูง
อ.สุรางคนา ระวังยศ
void run(){ // (9)
numberOfWheels = 4;
if (isReady()) {
System.out.println("I am running");
}
}
}
class Truck extends Vehicle {
float maximumLoad;
Truck() { // (10)
setNumberOfWheels(6);
setHasEngine(true);
run();
}
void load(float weight) {
if (weight <= maximumLoad)
System.out.println("I am carrying a " + weight + "-poundload.");
}
}
public class TestACar2 {
public static void main (String[] args) {
Vehicle myCar = new Vehicle();
if (myCar.getHasEngine()) { // (11)
myCar.run();
}
Truck t = new Truck();
}}
ผลลัพธที่ไดคือ
I am running
I am running
I am running
I am running