วิธีคอมไพล์โปรแกรม Java: คู่มือสำหรับผู้เริ่มต้นเกี่ยวกับ javac, การตั้งค่า PATH และข้อผิดพลาดทั่วไป

เมื่อคุณเริ่มเรียนรู้ Java, สิ่งแรกที่คุณจะพบคือ “การคอมไพล์” การเขียนโค้ดแหล่ง (.java) เพียงอย่างเดียวไม่ทำให้โปรแกรมทำงานได้ — คุณต้องคอมไพล์โดยใช้คำสั่ง javac เพื่อสร้างไฟล์ .class และเมื่อเสร็จแล้วโปรแกรมจะสามารถทำงานได้ ในบทความนี้ เราจะสรุปกระบวนการคอมไพล์ Java, การใช้งานพื้นฐานของ javac, การตั้งค่า PATH, และวิธีแก้ไขข้อผิดพลาดทั่วไปของผู้เริ่มต้น — ในรูปแบบที่ผู้เริ่มต้นทั้งหมดสามารถทำตามได้ทีละขั้นตอน เป้าหมายคือการเปลี่ยนจาก “ฉันจะเริ่มต้นอย่างไรกับการคอมไพล์ 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 ถูกออกแบบให้ทำงานตามชื่อคลาส (โดยไม่มีนามสกุล)

สรุปอย่างเป็นระเบียบ:

RoleCommandTarget
Compilejavac Sample.java.java file
Runjava SampleClass 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 สามตัวต่อไปนี้เป็นที่นิยมอย่างมากในญี่ปุ่นและเหมาะสำหรับการเรียนรู้:

IDECharacteristics
IntelliJ IDEAThe de-facto standard for modern Java development. Suitable for professional use.
EclipseLong history, widely used in enterprise projects.
VSCodeLightweight. Java Extension Pack enables a proper Java environment.

ใน IDE การคอมไพล์จะเกิดขึ้นโดยอัตโนมัติทุกครั้งที่คุณบันทึกไฟล์ — และตำแหน่งของข้อผิดพลาดจะถูกแสดงทันที นั่นหมายความว่าคุณสามารถข้ามอุปสรรคของผู้เริ่มต้น เช่น “พิมพ์ผิด javac” หรือ “กำหนดค่า PATH ผิด”

อย่างไรก็ตาม ยังเป็นความจริงว่า มีคุณค่ามากในการลองใช้ javac ด้วยตนเองอย่างน้อยครั้งหนึ่ง เพื่อเข้าใจวิธีการทำงานของ Java เมื่อคุณเข้าใจกระบวนการ “คอมไพล์ → รัน” ด้วยมือ ความเร็วในการเข้าใจของคุณจะเพิ่มขึ้นอย่างมากเมื่อคุณย้ายไปใช้การพัฒนาแบบ IDE

พื้นฐานของตัวเลือกของ javac

javac ไม่ได้เป็นเพียง “ตัวแปลง .java → .class” คุณสามารถแนบตัวเลือกหลายตัวเพื่อควบคุมพฤติกรรมการคอมไพล์ได้ แต่ในระดับผู้เริ่มต้น คุณไม่จำเป็นต้องจำทุกอย่าง — การรู้จักตัวเลือกที่ใช้บ่อยเพียงพอแล้ว

ต่อไปนี้เป็นตัวเลือกสามตัวอย่างที่เป็นตัวแทน:

OptionMeaningExample
-dSpecify output directory for .class filesjavac -d out Sample.java
-classpathSpecify classpath for external libraries / other directoriesjavac -classpath lib/* Sample.java
--enable-previewEnable preview language featuresjavac --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 ก่อนเพื่อเช็คว่ามีการรับรู้หรือไม่。