Package, Jar, Classpath และ Modifiers
เราใช้ package ในการจัดหมวดหมู่ class เช่น class ที่เป็นตัวแทนข้อมูลทางธุรกิจอาจอยู่
ใน package model ส่วน class ที่เป็นตัวควบคุมการใช้งานของระบบอาจอยู่ใน package
controller นอกจากนี้ยังมีประโยชน์กรณีที่ชื่อ class ซ้ำกัน เราสามารถระบุ package หรือ
full qualified name เป็นตัวแยกได้ เช่น
java.lang.String กับ com.mycompany.String ซึ่งเป็นชื่อเต็มของ class สังเกตุว่า
java.lang กับ com.mycompany จะเป็นชื่อ package มักเริ่มต้นด้วย general คั่นด้วย .
และจะ specific ไปเรื่อยๆและมักเอา URL ของบริษัทมาตั้ง การประกาศ package ทำได้
ดังนี้
package com.mycompany;//ต้องอยู่บรรทัดบนสุดและมีได้เพียงแห่งเดียว
class A {
}
ซึ่ง java file ต้องนำไปวางไว้ใน folder com/mycompany และ A.class ที่ได้มาหลังจาก
Compile ก็อยู่ใน folder com/mycompany เช่นกัน เราควรแบ่ง folder สำหรับเก็บ .java
และ .class ไว้แยกจากกันเช่น java files เก็บไว้ใน src/com/mycompany ส่วน class
files จะถูกสร้างแล้วเก็บไว้ใน classes/com/mycompany เราสามารถ compile โดยใช้
คำสั่ง >>javac com/mycompany/A.java
จะได้ A.class อยู่ใน folder เดียวกัน
หมายเหตุ: java class ที่ไม่ระบุ package จะถือว่าไม่มี package และไม่
จำเป็นต้องอยู่ภายใต้ folder
Jar
เราสามารถนำ class ที่ได้มาจากตัวอย่างที่แล้วคือ com/mycompany/a.class นำมา zip ที่ folder com ทำให้เราสามารถแจก zip ตัวนี้ไปให้นักพัฒนาคนอื่นได้ สำหรับ
java ส่วนใหญ่จะใช้นามสกุลเป็น .jar ซึ่งก็คือ zip ไฟล์นั่นเอง
เราสามารถสร้าง jar โดยใช้ command line แล้วไปที่ folder ที่เก็บ folder com
แล้วใช้คำสั่ง >>jar -cf simple.jar com
โดยที่ jar -cf คือคำสั่งให้ create file ชื่อ simple.jar จาก folder com
เราก็จะได้ simple.jar ซึ่งถ้าเปิดด้วย winzip ก็จะเห็น folder com/mycompany/a.class
อยู่ข้างใน นอกจากนั้นเราจะเห็น META-INF/MANIFEST.MF ถูกสร้างขึ้นมา
ให้ลองเปิดดูด้วย Notepad ก็จะเห็นรายละเอียดข้างในเช่น
Manifest-Version: 1.0
Created-By: 1.6.0 (IBM Corporation)
ประโยชน์ของ file นี้เช่นเราสามารถระบุ Class ที่มี main method ได้ หรือเราสามารถกำหนด classpath ที่ jar จากตัวอย่างนี้ class A มี main method เราสามารถสร้าง jar
โดยวิธีการ zip แล้วเพิ่ม META-INF/MANIFEST.MF เข้าไปที่มีเนื้อหาดังนี้
Manifest-Version: 1.0
Main-Class: com.mycompany.A
Created-By: 1.6.0 (IBM Corporation)
จากนั้น zip folder com และ META-INF เข้าด้วยกันตั้งเป็นชื่อว่า simple.jar
แล้วใ้ชคำสั่ง >>java -jar simple.jar
หากเกิด error ให้ตรวจสอบดูว่าใน simple.jar มี folder com และ META-INF อยู่ที่
นอกสุดหรือไม่
Classpath
ทีนี้มาดูวิธีการที่เราจะเอา java class จากที่อื่นมาใช้ จากตัวอย่างที่แล้วให้แก้ code A.java โดยเพิ่ม keyword public เป็น
package com.mycompany;
public class A {}
แล้ว compile เราจะได้
com/mycompany/A.class ลองดู code ตัวอย่างการนำ class นี้ไปใช้
import com.mycompany.A;
class B {
A a = new A();
public static void main(String[]args) {
}
}
จากตัวอย่างเราจะใช้ keyword import ตามด้วยชื่อ class แบบ full name หรือกรณีที่
ต้องการ import class ทั้งหมดใน package นั้นมาใช้ เราสามารถใช้
import com.mycompany.*;
เราสามารถมี keyword import ได้หลายครั้งใน java code ซึ่งต้องอยู่ระหว่าง package
และ class จากนั้นเข้า command line ไป path ที่เก็บ folder com แล้ว compile โดยใช้คำสั่ง >> javac -cp . B.java
โดยที่ -cp . คือการระบุ directory ปัจจุบัน เราอาจจะใช้ ; เชื่อมในกรณีที่อ้างอิง class path
จากหลายๆที่ และสามารถระบุ jar ก็ได้เช่น javac -cp .;simple.jar;jdbc.jar B.jar
การสั่งให้ทำงานก็สามารถทำแบบเดียวกันคือ java -cp .;simple.jar B
หมายเหตุ: option -cp กับ -classpath มีความหมายเดียวกัน
บางครั้งเรามักจะนิยม set environment variable ที่ชื่อ classpath ไว้เลย เช่น
set classpath=%classpath%;.
ทำให้ไม่ต้องมาระบุ option -cp หรือ -classpath อีกตอน compile หรือตอนรัน
Modifiers
จากตัวอย่างก่อนหน้าจะเห็นว่าเรามีการระบุ keyword public ไว้หน้า class A
ก็เพื่อให้ class อื่นมองเห็นได้กรณีอยู่คนละ package กัน ส่วน class ที่ไม่มี keyword
public นำหน้าจะถูกเรียกใช้จาก class ที่อยู่ใน package เดียวกันเท่านั้น
package com.mycompany;
public class A{}//ถูกเรียกใช้โดย class จาก package ใดก็ได้
class B{}//ถูกเรียกใช้โดย class ใน package com.mycompany เท่านั้น
Modifier ของ class คือ public และหากไม่ระบุจะถือเป็น package
ทีนี้มาดู Modifier ระดับ members กันบ้าง
ภาษา Object Oriented ทุกภาษานอกจากต้องห่อหุ้มข้อมูลแล้วยังสามารถซ่อนข้อมูล
ต่างๆจากนักพัฒนาคนอื่นได้ ซึ่งเราจะใช้ Modifiers ดังต่อไปนี้
ตัวอย่าง
package com.mycompany;
public class A {
public int age;
protected int salary;
String name;//สังเกตุว่า package ไม่ต้องมี keyword
private String text;
}
ไม่มีความเห็น