สอนเขียนโปรแกรม Java ตั้งแต่ต้น
Java เป็นภาษาโปรแกรมที่ใช้กันมากทั้งในระบบองค์กร แอนดรอยด์ และเซิร์ฟเวอร์ จุดเด่นคือโค้ดหนึ่งชุดทำงานได้บนระบบปฏิบัติการหลายแบบ เพราะโค้ดถูกคอมไพล์เป็น bytecode แล้วรันบน JVM (Java Virtual Machine) บทความนี้จะพาคุณเขียนโปรแกรมแรก ทำความเข้าใจตัวแปร เงื่อนไข ลูป และคลาส แล้วคอมไพล์และรันด้วยตัวเอง
ทุกตัวอย่างในบทความนี้ถูกคอมไพล์และรันจริงด้วย Java 17 และได้ผลลัพธ์ตามที่แสดง
สิ่งที่ต้องเตรียม
- ติดตั้ง JDK 17 หรือใหม่กว่า (ตรวจด้วยคำสั่ง `java -version` และ `javac -version`)
- โปรแกรมแก้ไขข้อความ เช่น VS Code หรือ Notepad++
ภาพรวมการทำงาน
ขั้นตอนพื้นฐานมีสามอย่าง คือเขียนไฟล์ `.java` คอมไพล์ด้วย `javac` ซึ่งได้ไฟล์ `.class` แล้วรันด้วย `java`
โปรแกรมแรก
สร้างไฟล์ชื่อ `Hello.java` ให้ชื่อคลาสตรงกับชื่อไฟล์เสมอ แล้วพิมพ์โค้ดนี้
public class Hello {
public static void main(String[] args) {
System.out.println("สวัสดี Java");
}
}
คอมไพล์และรัน
javac -encoding UTF-8 Hello.java
java -Dfile.encoding=UTF-8 Hello
ผลลัพธ์
สวัสดี Java
`main` คือจุดเริ่มต้นของโปรแกรม `System.out.println` พิมพ์ข้อความออกหน้าจอ ตัวเลือก `-encoding UTF-8` ทำให้ภาษาไทยในไฟล์ถูกอ่านถูกต้อง
ตัวแปรและชนิดข้อมูล
Java เป็นภาษาที่กำหนดชนิดข้อมูลตายตัว ต้องประกาศชนิดของตัวแปรทุกครั้ง
| ชนิด | ใช้เก็บ | ตัวอย่าง |
|---|---|---|
| int | จำนวนเต็ม | `int age = 20;` |
| double | จำนวนทศนิยม | `double price = 19.5;` |
| boolean | จริงหรือเท็จ | `boolean passed = true;` |
| String | ข้อความ | `String name = "สมชาย";` |
เงื่อนไขและลูป
ตัวอย่างต่อไปนี้มีคลาส `Student` ที่ตัดสินเกรดจากคะแนน และใช้ `for` วนผ่านรายการนักเรียน
import java.util.ArrayList;
import java.util.List;
public class Hello {
static class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
String grade() {
if (score >= 80) return "A";
else if (score >= 70) return "B";
else if (score >= 50) return "C";
return "F";
}
}
public static void main(String[] args) {
System.out.println("สวัสดี Java");
List<Student> students = new ArrayList<>();
students.add(new Student("สมชาย", 85));
students.add(new Student("สมหญิง", 72));
students.add(new Student("สมศักดิ์", 45));
int total = 0;
for (Student s : students) {
System.out.println(s.name + " ได้เกรด " + s.grade());
total += s.score;
}
System.out.println("คะแนนเฉลี่ย: " + (total / students.size()));
}
}
ผลลัพธ์ที่ได้จากการรันจริง
สวัสดี Java
สมชาย ได้เกรด A
สมหญิง ได้เกรด B
สมศักดิ์ ได้เกรด F
คะแนนเฉลี่ย: 67
สิ่งที่ควรสังเกต
- `class Student` ซ้อนอยู่ในคลาส `Hello` เป็นคลาสภายใน (static nested class) ใช้จัดกลุ่มโค้ดที่เกี่ยวข้องกัน
- `this.name = name` ใช้แยกชื่อพารามิเตอร์ออกจากชื่อฟิลด์ของออบเจกต์
- `total / students.size()` เป็นการหารจำนวนเต็ม จึงได้ 67 ไม่ใช่ 67.33 ถ้าต้องการทศนิยมต้องใช้ `double`
ข้อผิดพลาดที่มือใหม่มักเจอ
- **ชื่อไฟล์ไม่ตรงกับชื่อคลาส:** ถ้าคลาสเป็น `public class Hello` ไฟล์ต้องชื่อ `Hello.java`
- **ลืมเครื่องหมาย `;`:** Java ต้องใส่ `;` ท้ายคำสั่งทุกคำสั่ง ข้อความแจ้งข้อผิดพลาดจะชี้บรรทัดที่เกิดปัญหา
- **ภาษาไทยเพี้ยน:** คอมไพล์ด้วย `-encoding UTF-8` และรันด้วย `-Dfile.encoding=UTF-8`
- **`javac` ไม่รู้จักคำสั่ง:** ตรวจว่าตั้งค่า PATH ชี้ไปที่โฟลเดอร์ `bin` ของ JDK แล้ว
ขั้นต่อไป
เมื่อเข้าใจพื้นฐานแล้ว ให้ลองเขียนโปรแกรมคิดเลขขนาดเล็ก เก็บรายการข้อมูลด้วย `ArrayList` และแยกโค้ดเป็นหลายคลาสในหลายไฟล์ ก่อนจะไปถึงการทำ Web ด้วย Spring Boot
สรุป
Java ทำงานด้วยขั้นตอนคอมไพล์แล้วรันบน JVM จุดเริ่มต้นคือเมธอด `main` ตัวแปรต้องมีชนิดชัดเจน และคลาสช่วยจัดโครงสร้างโปรแกรมให้เป็นระเบียบ