เมื่อคุณเริ่มเรียนรู้ Java, สิ่งแรกที่คุณจะพบคือ “การคอมไพล์” การเขียนโค้ดแหล่ง (.java) เพียงอย่างเดียวไม่ทำให้โปรแกรมทำงานได้ — คุณต้องคอมไพล์โดยใช้คำสั่ง javac เพื่อสร้างไฟล์ .class และเมื่อเสร็จแล้วโปรแกรมจะสามารถทำงานได้ ในบทความนี้ เราจะสรุปกระบวนการคอมไพล์ Java, การใช้งานพื้นฐานของ javac, การตั้งค่า PATH, และวิธีแก้ไขข้อผิดพลาดทั่วไปของผู้เริ่มต้น — ในรูปแบบที่ผู้เริ่มต้นทั้งหมดสามารถทำตามได้ทีละขั้นตอน เป้าหมายคือการเปลี่ยนจาก “ฉันจะเริ่มต้นอย่างไรกับการคอมไพล์ Java?” ไปสู่การพิมพ์คำสั่งอย่างมั่นใจโดยไม่มีความลังเล
- 1 การคอมไพล์ Java คืออะไร?|คำอธิบายที่เป็นมิตรกับผู้เริ่มต้นเกี่ยวกับ “การคอมไพล์”
- 2 การเตรียมความพร้อมก่อนคอมไพล์ Java
- 3 มาคอมไพล์ไฟล์ Java จริง ๆ กัน
- 4 วิธีรันหลังจากคอมไพล์
- 5 ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
- 6 การคอมไพล์โดยใช้ IDE
- 7 พื้นฐานของตัวเลือกของ javac
- 8 สรุป
- 9 คำถามที่พบบ่อย: คำถามเกี่ยวกับการคอมไพล์ Java
การคอมไพล์ Java คืออะไร?|คำอธิบายที่เป็นมิตรกับผู้เริ่มต้นเกี่ยวกับ “การคอมไพล์”
ใน Java, “การคอมไพล์” คือกระบวนการ แปลงโค้ดแหล่งที่เขียนโดยมนุษย์ (.java) ให้เป็นรูปแบบที่อ่านได้โดย Java Virtual Machine (JVM) ผลลัพธ์ที่ได้คือไฟล์ .class ซึ่งเรียกว่าบิทโค้ด
ต่างจากภาษาต่าง ๆ เช่น C ที่คอมไพล์ตรงไปยังโค้ดพื้นฐาน, Java ใช้ขั้นตอนกลาง — โค้ดแหล่งจะถูกแปลงเป็นบิทโค้ดก่อน จากนั้นจะทำงานบน JVM วิธีนี้ทำให้ไฟล์ .class เดียวกันสามารถทำงานบนระบบปฏิบัติการต่าง ๆ ได้ — หมายความว่าคุณสามารถรันโปรแกรม Java เดียวกันบน Windows, macOS, หรือ Linux ได้
อีกหนึ่งสิ่งสำคัญที่คุณต้องเข้าใจคือ การคอมไพล์และการรันเป็นการกระทำที่แยกกัน
- “javac” → จัดการการคอมไพล์
- “java” → จัดการการรัน
ผู้เริ่มต้นส่วนใหญ่ล้มเหลวเพราะความแตกต่างนี้ไม่ชัดเจน การทำความเข้าใจ “บทบาทที่แตกต่างกันสองอย่าง” จะเป็นขั้นตอนแรกที่มีประสิทธิภาพที่สุดในการเข้าใจของคุณ
การเตรียมความพร้อมก่อนคอมไพล์ Java
เพื่อคอมไพล์ Java, คุณต้องติดตั้ง JDK (Java Development Kit). JRE เพียงอย่างเดียวไม่สามารถคอมไพล์โค้ดได้ เนื่องจากเครื่องมือคอมไพเลอร์ javac มีอยู่เฉพาะใน JDK
เริ่มต้นด้วยการตรวจสอบสิ่งนี้:
javac -version
หากคำสั่งนี้ส่งคืนหมายเลขรุ่น คุณก็พร้อมแล้ว หากคุณได้รับข้อความ “command not found” หรือข้อผิดพลาดอื่น ๆ, มีความเป็นไปได้สูงว่า:
- JDK ไม่ได้ติดตั้ง
- JDK ติดตั้งแล้วแต่ PATH ไม่ได้ตั้งค่า
- คุณติดตั้งเพียง JRE (ไม่มีชุดพัฒนา)
การตั้งค่า PATH เป็นจุดที่ผู้ใช้ญี่ปุ่นมักติดขัด หากระบบปฏิบัติการไม่รู้จักเส้นทางไปยัง javac.exe (หรือไดเรกทอรี /bin) การคอมไพล์จะไม่ทำงาน
สรุป: “เตรียม JDK” และ “ตรวจสอบ PATH” — เพียงเมื่อมีทั้งสองอย่างนี้แล้วคุณจะสามารถยืนอยู่บนเส้นทางเริ่มต้นของการคอมไพล์ Java ได้
มาคอมไพล์ไฟล์ Java จริง ๆ กัน
ที่นี่ เราจะสร้างโค้ดตัวอย่างและยืนยันขั้นตอนการคอมไพล์ด้วย javac ขั้นแรก ให้บันทึกเนื้อหาต่อไปนี้ด้วยโปรแกรมแก้ไขข้อความ
Sample.java
public class Sample {
public static void main(String[] args) {
System.out.println("Hello Java!");
}
}
ชื่อไฟล์ต้องเป็น Sample.java, และ ชื่อคลาสสาธารณะต้องตรงกับชื่อไฟล์ หากกฎนี้ถูกละเมิด การคอมไพล์จะล้มเหลว — นี่เป็นหนึ่งในข้อผิดพลาดที่ผู้เริ่มต้นพบบ่อยที่สุด
ต่อไป ให้รันคำสั่งต่อไปนี้ในเทอร์มินัล / คำสั่งบรรทัดคำสั่ง:
javac Sample.java
หากทุกอย่างทำงานปกติ Sample.class จะถูกสร้างในโฟลเดอร์เดียวกัน นี่แสดงว่า “การคอมไพล์เสร็จสมบูรณ์”
ดังนั้น ในขณะนี้:
- Sample.java (โค้ดแหล่ง)
- Sample.class (บิทโค้ด)
คู่นี้พร้อมแล้ว ในขั้นตอนนี้คุณพร้อมที่จะ “รันโปรแกรม Java”
วิธีรันหลังจากคอมไพล์
หลังจากการคอมไพล์เสร็จสมบูรณ์ ขั้นตอนถัดไปคือการรันไฟล์ .class คำสั่งที่ใช้คือ java — ไม่ใช่ javac
java Sample
จุดสำคัญ: อย่าเขียนนามสกุล .class การเขียน java Sample.class จะทำให้เกิดข้อผิดพลาด Java ถูกออกแบบให้ทำงานตามชื่อคลาส (โดยไม่มีนามสกุล)
สรุปอย่างเป็นระเบียบ:
| Role | Command | Target |
|---|---|---|
| Compile | javac Sample.java | .java file |
| Run | java Sample | Class name (without extension) |
หากคุณเข้าใจการสลับบทบาทระหว่าง javac และ java คุณก็ได้ผ่านขั้นตอนผู้เริ่มต้นแล้ว
ถ้า “Hello Java!” ปรากฏขึ้นอย่างถูกต้อง แสดงว่ากระบวนการทำงานสำเร็จแล้ว
ตอนนี้คุณได้เข้าใจ “กระบวนการ” ขั้นต่ำของ Java แล้ว
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
ในการคอมไพล์ Java การพบข้อผิดพลาดในช่วงเริ่มต้นเป็นเรื่องปกติอย่างสมบูรณ์ เราจะเน้นเฉพาะข้อผิดพลาดที่ผู้เริ่มต้นชาวญี่ปุ่นมักเจอ
1) javac: command not found / 'javac' is not recognized…
ในกรณีเกือบ 100% เหตุผลคือหนึ่งในสิ่งต่อไปนี้:
- JDK ไม่ได้ติดตั้ง
- PATH ไม่ได้กำหนดค่า
แก้ไข:
รัน javac -version เพื่อตรวจสอบ
→ หากไม่มีอะไรแสดงออกมา ให้ติดตั้ง JDK ใหม่และตรวจสอบการกำหนดค่า PATH
2) คอมไพล์สำเร็จแต่ไม่มีไฟล์ .class ถูกสร้างขึ้น
ปัญหาที่พบบ่อยที่สุดในผู้เริ่มต้นชาวญี่ปุ่นคือเรื่องนี้:
ชื่อไฟล์และชื่อคลาสสาธารณะไม่ตรงกัน
ตัวอย่าง — หากไฟล์ Sample.java มีเนื้อหาดังนี้:
public class Test {
}
→ จะทำให้เกิดข้อผิดพลาดในการคอมไพล์
3) คำเตือนเกี่ยวกับการเข้ารหัสตัวอักษร
warning: [options] bootstrap class path not set in conjunction with -source 1.7
คำเตือนเช่นนี้มักไม่เป็นอันตรายในกรณีส่วนใหญ่ อย่างไรก็ตามอาจบ่งบอกถึงการตั้งค่ารุ่นเก่า หรือการเข้ารหัสที่ไม่ตรงกัน การบันทึกไฟล์เป็น UTF-8 เป็นทางเลือกที่ปลอดภัยที่สุด
การคอมไพล์โดยใช้ IDE
ในการพัฒนา Java ในโลกจริง คุณมักไม่พิมพ์ javac ด้วยตนเองในเทอร์มินัลทุกครั้ง เนื่องจาก IDE (Integrated Development Environment) จัดการคอมไพล์โดยอัตโนมัติในพื้นหลัง
IDE สามตัวต่อไปนี้เป็นที่นิยมอย่างมากในญี่ปุ่นและเหมาะสำหรับการเรียนรู้:
| IDE | Characteristics |
|---|---|
| IntelliJ IDEA | The de-facto standard for modern Java development. Suitable for professional use. |
| Eclipse | Long history, widely used in enterprise projects. |
| VSCode | Lightweight. Java Extension Pack enables a proper Java environment. |
ใน IDE การคอมไพล์จะเกิดขึ้นโดยอัตโนมัติทุกครั้งที่คุณบันทึกไฟล์ — และตำแหน่งของข้อผิดพลาดจะถูกแสดงทันที นั่นหมายความว่าคุณสามารถข้ามอุปสรรคของผู้เริ่มต้น เช่น “พิมพ์ผิด javac” หรือ “กำหนดค่า PATH ผิด”
อย่างไรก็ตาม ยังเป็นความจริงว่า มีคุณค่ามากในการลองใช้ javac ด้วยตนเองอย่างน้อยครั้งหนึ่ง เพื่อเข้าใจวิธีการทำงานของ Java เมื่อคุณเข้าใจกระบวนการ “คอมไพล์ → รัน” ด้วยมือ ความเร็วในการเข้าใจของคุณจะเพิ่มขึ้นอย่างมากเมื่อคุณย้ายไปใช้การพัฒนาแบบ IDE
พื้นฐานของตัวเลือกของ javac
javac ไม่ได้เป็นเพียง “ตัวแปลง .java → .class” คุณสามารถแนบตัวเลือกหลายตัวเพื่อควบคุมพฤติกรรมการคอมไพล์ได้ แต่ในระดับผู้เริ่มต้น คุณไม่จำเป็นต้องจำทุกอย่าง — การรู้จักตัวเลือกที่ใช้บ่อยเพียงพอแล้ว
ต่อไปนี้เป็นตัวเลือกสามตัวอย่างที่เป็นตัวแทน:
| Option | Meaning | Example |
|---|---|---|
-d | Specify output directory for .class files | javac -d out Sample.java |
-classpath | Specify classpath for external libraries / other directories | javac -classpath lib/* Sample.java |
--enable-preview | Enable preview language features | javac --enable-preview Sample.java |
โดยเฉพาะ -d เป็นสิ่งจำเป็นเกือบทั้งหมดเมื่อใช้แพ็กเกจ ตัวอย่างเช่น หากคุณเขียน package com.example; คุณต้องใช้ javac -d เพื่อสร้างโครงสร้างไดเรกทอรีภายใต้ไดเรกทอรีผลลัพธ์อย่างถูกต้อง
เมื่อคุณเข้าสู่งานจริง การระบุ classpath และการใช้ -d จะเพิ่มขึ้นอย่างมาก การรู้จักชื่อเหล่านี้ในขั้นตอนนี้จะทำให้การเรียนรู้ในภายหลังราบรื่นขึ้น
สรุป
เพื่อรันโปรแกรม Java คุณต้องเข้าใจลำดับสามขั้นตอน: เขียนโค้ด → คอมไพล์ → เรียกใช้งาน โดยเฉพาะถ้าคุณแยกบทบาทของ javac (การคอมไพล์) และ java (การเรียกใช้งาน) ในใจ เหตุผลว่า “ทำไมต้องคอมไพล์” จึงเป็นเรื่องที่เข้าใจได้อย่างชัดเจน
นอกจากนี้ ผู้เริ่มต้นมักจะติดขัดที่สองจุดนี้:
- JDK ไม่ได้ติดตั้ง / PATH ไม่ได้กำหนดค่า
- ชื่อไฟล์และชื่อคลาสสาธารณะไม่ตรงกัน
หากคุณแก้ไขสองจุดนี้เพียงพอ คุณจะหลีกเลี่ยงการเบี่ยงเบนใหญ่ในช่วงการเรียนรู้ หลังจากที่คุณคุ้นเคยกับพื้นฐานแล้ว การย้ายไปใช้ IDE ก็เป็นเรื่องที่ดีอย่างสมบูรณ์ แต่การที่คุณ “เข้าใจกลไกภายใน” เป็นสิ่งที่สร้างความแตกต่างในความเร็วของการเข้าใจในภายหลัง
ใช้บทความนี้เป็นจุดเริ่มต้นและทำให้สำเร็จ .java → .class ครั้งแรก นั่นคือจุดมุ่งหมายแรกในการเรียนรู้ Java
คำถามที่พบบ่อย: คำถามเกี่ยวกับการคอมไพล์ Java
Q1: ความแตกต่างระหว่าง javac และ java คืออะไร?
A: javac เป็นคำสั่งสำหรับการคอมไพล์ — มันแปลง .java เป็น .class
ในทางกลับกัน java เป็นคำสั่งสำหรับการเรียกใช้งาน — มันรันไฟล์ .class บน JVM
Q2: Sample.class ไม่ได้ถูกสร้างขึ้น ทำไม?
A: สาเหตุที่พบบ่อยที่สุดคือ ชื่อไฟล์และชื่อ public class ไม่ตรงกัน。
ถ้าคลาสเป็น public class Sample แล้วไฟล์ต้องเป็น Sample.java。
Q3: ถ้าฉันใช้ IDE แล้ว ฉันไม่จำเป็นต้องเรียนรู้ javac อีกต่อไปหรือเปล่า?
A: IDE จะคอมไพล์อัตโนมัติในพื้นหลัง แต่ถ้าคุณไม่เข้าใจกลไกนั้น จะยากขึ้นในการจับใจความที่เกิดขึ้นจริง。
การลองทำความเข้าใจขั้นตอนพื้นฐานครั้งหนึ่งช่วยให้คุณเข้าใจพฤติกรรมของ IDE ได้เร็วขึ้น。
Q4: ฉันควรติดตั้ง JDK รุ่นใด?
A: สำหรับผู้เริ่มต้น, Temurin (Eclipse Adoptium) รุ่น LTS ใช้งานง่าย。
ถ้าไม่มีเหตุผลเฉพาะเจาะจง ให้เลือก Java 17 หรือ 21。
Q5: ฉันได้รับข้อความ javac: command not found
A: หรือ JDK ไม่ได้ติดตั้งหรือ PATH ไม่ได้ตั้งค่า。
รัน javac -version ก่อนเพื่อเช็คว่ามีการรับรู้หรือไม่。

