เรียน Java เพื่อนำไปสร้าง Application ระดับโลก [4]


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 ดังต่อไปนี้

  • public member สามารถถูกอ้างถึงจาก class ใดๆก็ได้
  • protected member สามรถถูกอ้างถึงจาก class ใน package เดียวกันหรือ class ลูก
  • package member สามารถถูกอ้างถึงจาก class ที่อยู่ใน package เดียวกันเ่ท่านั้น ปกติถ้าเราไม่ระบุ compiler จะมองว่าเป็น package
  • private member สามารถถูกอ้างถึงจากภายใน class ตัวเองเท่านั้น

ตัวอย่าง

package com.mycompany;

public class A {

         public int age;
         protected int salary;
         String name;//สังเกตุว่า package ไม่ต้องมี keyword
         private String text;

}

 

คำสำคัญ (Tags): #java
หมายเลขบันทึก: 386019เขียนเมื่อ 18 สิงหาคม 2010 23:33 น. ()แก้ไขเมื่อ 22 พฤศจิกายน 2023 14:40 น. ()สัญญาอนุญาต: ครีเอทีฟคอมมอนส์แบบ แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกันจำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท