ภาษาการเขียนโปรแกรม Java: เริ่มต้นกับการเขียนโปรแกรม Java
เผยแพร่เมื่อ: 17 ธันวาคม 2025 | หมวดหมู่: Java | โดย: GlowCode Team
Java คืออะไร?
- ไม่ขึ้นกับแพลตฟอร์ม – เขียนโค้ดครั้งเดียว รันได้ทุกที่ (Write Once, Run Anywhere)
- เชิงวัตถุ – ทุกอย่างสร้างจากคลาสและออบเจกต์
- ปลอดภัย – มีฟีเจอร์ด้านความปลอดภัยในตัวและระบบแซนด์บ็อกซ์
- รองรับการทำงานหลายเธรด – รองรับการเขียนโปรแกรมแบบพร้อมกัน (Concurrent Programming)
- จัดการหน่วยความจำอัตโนมัติ – มี Garbage Collection ช่วยจัดการหน่วยความจำ
- คอมไพล์เป็น Bytecode – รันบน Java Virtual Machine (JVM)
เกร็ดสนุก: เดิมที Java ถูกตั้งชื่อว่า “Oak” ตามชื่อต้นไม้หน้าสำนักงานของ James Gosling แต่เปลี่ยนชื่อเป็น Java ตามชื่อกาแฟ เพราะปัญหาด้านเครื่องหมายการค้า!
ทำไมต้องเรียน Java?
Java เป็นภาษาที่ให้โอกาสด้านอาชีพและความยืดหยุ่นในหลายสาขา มาดูเหตุผลกัน:
1. รากฐานที่แข็งแกร่ง
- เรียนรู้แนวคิดเชิงวัตถุ เช่น คลาส, การสืบทอด (Inheritance), และพอลิมอร์ฟิซึม (Polymorphism)
- ออกแบบซอฟต์แวร์ระดับองค์กร – สถาปัตยกรรมแอปพลิเคชันขนาดใหญ่
- พัฒนาข้ามแพลตฟอร์ม – เขียนโค้ดชุดเดียว รันได้หลายแพลตฟอร์ม
2. ความต้องการในตลาดงานสูง
- พัฒนาแอป Android – สร้างแอปพลิเคชันมือถือ
- ระบบ Backend ระดับองค์กร – สร้างแอปพลิเคชันฝั่งเซิร์ฟเวอร์และ API
- พัฒนาเว็บ – ใช้ Spring Framework และ Microservices
- บริษัทใหญ่ ๆ เช่น Google, Amazon, Netflix, Oracle ใช้ Java อย่างกว้างขวาง
3. ระบบนิเวศที่สมบูรณ์
- มีไลบรารีมาตรฐานขนาดใหญ่ – เครื่องมือในตัวสำหรับเครือข่าย, GUI, และฐานข้อมูล
- ชุมชนนักพัฒนาที่แข็งแกร่ง – มีนักพัฒนานับล้านทั่วโลก
- เครื่องมือสร้างโปรเจกต์ – Maven, Gradle สำหรับจัดการโปรเจกต์
- เฟรมเวิร์ก – Spring Boot, Hibernate, Apache Kafka
การติดตั้งสภาพแวดล้อม Java
คุณต้องติดตั้ง Java Development Kit (JDK) เพื่อคอมไพล์และรันโปรแกรม Java
ตัวเลือกในการดาวน์โหลด:
- Oracle JDK – เวอร์ชันทางการจาก Oracle
- OpenJDK – เวอร์ชันฟรีและโอเพนซอร์ส
- AdoptOpenJDK – รุ่นที่ชุมชนดูแล
- Amazon Corretto – รุ่นพร้อมใช้งานสำหรับงานโปรดักชัน
ขั้นตอนการติดตั้ง:
- ดาวน์โหลด JDK จากเว็บไซต์ Oracle หรือ OpenJDK
- รันตัวติดตั้งตามระบบปฏิบัติการของคุณ
- เพิ่ม Java ลงใน PATH ของระบบ
- ตรวจสอบการติดตั้งด้วยคำสั่ง java -version
IDE ยอดนิยม:
- IntelliJ IDEA – IDE ระดับมืออาชีพสำหรับ Java
- Eclipse – สภาพแวดล้อมการพัฒนาที่ทรงพลังและฟรี
- Visual Studio Code – น้ำหนักเบา รองรับ Java ผ่านส่วนขยาย
- NetBeans – IDE ทางการจาก Oracle
โปรแกรม Java แรกของคุณ
ทุกโปรแกรม Java ต้องมีคลาสที่มีเมธอด main เป็นจุดเริ่มต้น
public static void main(String[] args) {
System.out.println("สวัสดี, โลก!");
System.out.println("ยินดีต้อนรับสู่ Java!");
}
}
อธิบายโค้ด:
- public class Main – กำหนดคลาสสาธารณะชื่อ Main
- public static void main(String[] args) – เมธอดจุดเริ่มต้นของโปรแกรม
- System.out.println() – แสดงข้อความในคอนโซลพร้อมขึ้นบรรทัดใหม่
- {} – วงเล็บปีกกากำหนดบล็อกโค้ด
- ; – เซมิโคลอนปิดท้ายแต่ละคำสั่ง
วิธีรันโปรแกรม:
- บันทึกโค้ดเป็นไฟล์ Main.java (ชื่อไฟล์ต้องตรงกับชื่อคลาส)
- คอมไพล์: javac Main.java
- รัน: java Main
ไวยากรณ์และโครงสร้างพื้นฐาน
Java มีกฎไวยากรณ์ที่เข้มงวดเพื่อให้โค้ดอ่านง่ายและสะอาด
1. โครงสร้างโปรแกรม
public class Example {
static int global = 100;
public static void main(String[] args) {
int local = 50;
System.out.println(global + local);
}
static void helper() {
System.out.println("เมธอดช่วยเหลือ");
}
}
2. กฎการเขียน
- ไวต่อตัวพิมพ์ใหญ่-เล็ก – Variable และ variable ถือเป็นตัวแปรต่างกัน
- ต้องมีเซมิโคลอน – ทุกคำสั่งต้องลงท้ายด้วย ;
- วงเล็บปีกกา – {} ใช้จัดกลุ่มโค้ด
- ชื่อคลาส – ต้องขึ้นต้นด้วยตัวพิมพ์ใหญ่
- ชื่อเมธอด – ขึ้นต้นด้วยตัวพิมพ์เล็ก (camelCase)
- คอมเมนต์ – ใช้ // สำหรับบรรทัดเดียว, /* */ สำหรับหลายบรรทัด
3. การตั้งชื่อ (Naming Conventions):
- คลาส: PascalCase (เช่น MyClass, StudentRecord)
- ตัวแปร/เมธอด: camelCase (เช่น userName, calculateTotal)
- ค่าคงที่: UPPER_CASE (เช่น MAX_SIZE, PI_VALUE)
- แพ็กเกจ: lowercase (เช่น com.company.project)
ชนิดข้อมูลและตัวแปร
Java มีชนิดข้อมูลสองประเภท: Primitive Types และ Reference Types
1. Primitive Data Types:
public static void main(String[] args) {
byte b = 127;
short s = 30000;
int i = 2000000000;
long l = 9000000000000000000L;
float f = 3.14f;
double d = 3.1415926535;
char c = 'A';
boolean flag = true;
System.out.println(b + " " + s + " " + i + " " + l + " " + f + " " + d + " " + c + " " + flag);
}
}
2. Reference Types:
public static void main(String[] args) {
String name = "การเขียนโปรแกรม Java";
String[] languages = {"Java", "Python", "C++"};
System.out.println(name);
System.out.println(languages[0]);
}
}
3. การประกาศและกำหนดค่าตัวแปร:
public static void main(String[] args) {
int age;
double salary;
String name;
age = 25;
salary = 75000.50;
name = "อลิซ";
int score = 95;
System.out.println(name + " อายุ " + age + " ปี, เงินเดือน: $" + salary + ", คะแนน: " + score);
}
}
ตัวดำเนินการ (Operators)
Java มีตัวดำเนินการหลากหลายสำหรับจัดการข้อมูล
1. ตัวดำเนินการทางคณิตศาสตร์:
public static void main(String[] args) {
int a = 15, b = 4;
System.out.println("บวก: " + (a + b));
System.out.println("ลบ: " + (a - b));
System.out.println("คูณ: " + (a * b));
System.out.println("หาร: " + (a / b));
System.out.println("โมดูลัส: " + (a % b));
System.out.println("หารทศนิยม: " + ((double)a / b));
}
}
2. ตัวดำเนินการเปรียบเทียบ:
public static void main(String[] args) {
int x = 10, y = 15;
System.out.println("เท่ากัน: " + (x == y));
System.out.println("ไม่เท่ากัน: " + (x != y));
System.out.println("น้อยกว่า: " + (x < y));
System.out.println("มากกว่า: " + (x > y));
System.out.println("น้อยกว่าหรือเท่ากัน: " + (x <= y));
System.out.println("มากกว่าหรือเท่ากัน: " + (x >= y));
}
}
3. ตัวดำเนินการเชิงตรรกะ:
public static void main(String[] args) {
boolean isStudent = true, hasJob = false;
System.out.println("AND: " + (isStudent && hasJob));
System.out.println("OR: " + (isStudent || hasJob));
System.out.println("NOT: " + (!isStudent));
}
}
4. ตัวดำเนินการกำหนดค่า:
public static void main(String[] args) {
int x = 10;
x += 5;
System.out.println("x += 5: " + x);
x -= 3;
System.out.println("x -= 3: " + x);
x *= 2;
System.out.println("x *= 2: " + x);
x /= 4;
System.out.println("x /= 4: " + x);
}
}
การรับเข้าและส่งออกข้อมูล
1. การแสดงผลด้วย System.out:
public static void main(String[] args) {
String name = "จอห์น";
int age = 28;
double height = 5.9;
System.out.println("ชื่อ: " + name);
System.out.println("อายุ: " + age);
System.out.println("ส่วนสูง: " + height + " ฟุต");
System.out.printf("จัดรูปแบบ: %s อายุ %d ปี, สูง %.1f ฟุต%n", name, age, height);
}
}
2. การรับข้อมูลด้วย Scanner:
public class Input {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("ป้อนชื่อของคุณ: ");
String name = scanner.nextLine();
System.out.print("ป้อนอายุของคุณ: ");
int age = scanner.nextInt();
System.out.print("ป้อน GPA ของคุณ: ");
double gpa = scanner.nextDouble();
System.out.println("สวัสดี " + name + "! คุณอายุ " + age + " ปี มี GPA: " + gpa);
scanner.close();
}
}
หมายเหตุ: อย่าลืมปิด Scanner ด้วย scanner.close() เพื่อคืนทรัพยากรให้ระบบ
โครงสร้างควบคุม (Control Structures)
โครงสร้างควบคุมกำหนดลำดับการทำงานของโปรแกรม
1. คำสั่ง If-Else:
public static void main(String[] args) {
int grade = 87;
if (grade >= 90) {
System.out.println("A - ยอดเยี่ยม!");
} else if (grade >= 80) {
System.out.println("B - ทำได้ดี!");
} else if (grade >= 70) {
System.out.println("C - ปานกลาง");
} else if (grade >= 60) {
System.out.println("D - ต่ำกว่าค่าเฉลี่ย");
} else {
System.out.println("F - ไม่ผ่าน");
}
}
}
public static void main(String[] args) {
int dayOfWeek = 3;
switch (dayOfWeek) {
case 1:
System.out.println("วันจันทร์ - เริ่มต้นสัปดาห์ทำงาน");
break;
case 2:
System.out.println("วันอังคาร - เข้าสู่จังหวะ");
break;
case 3:
System.out.println("วันพุธ - กลางสัปดาห์!");
break;
case 4:
System.out.println("วันพฤหัสบดี - ใกล้ถึงแล้ว");
break;
case 5:
System.out.println("วันศุกร์ - สุดยอด!");
break;
default:
System.out.println("วันหยุด - พักผ่อน!");
}
}
}
3. ลูป For:
public static void main(String[] args) {
System.out.println("นับขึ้น:");
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
System.out.println("\nนับลง:");
for (int j = 10; j >= 6; j--) {
System.out.print(j + " ");
}
System.out.println("\nเลขคู่:");
for (int k = 0; k <= 10; k += 2) {
System.out.print(k + " ");
}
}
}
4. ลูป While และ Do-While:
public static void main(String[] args) {
int count = 1;
System.out.println("ลูป While:");
while (count <= 3) {
System.out.println("นับ: " + count);
count++;
}
int num = 1;
System.out.println("ลูป Do-While:");
do {
System.out.println("ตัวเลข: " + num);
num++;
} while (num <= 3);
}
}
เมธอด (Methods)
เมธอดช่วยจัดระเบียบโค้ดเป็นบล็อกที่นำกลับมาใช้ใหม่ได้
1. เมธอดพื้นฐาน:
static int add(int a, int b) {
return a + b;
}
static void greet(String name) {
System.out.println("สวัสดี, " + name + "!");
}
static double calculateArea(double radius) {
return 3.14159 * radius * radius;
}
public static void main(String[] args) {
int sum = add(10, 5);
System.out.println("ผลรวม: " + sum);
greet("อลิซ");
double area = calculateArea(5.0);
System.out.println("พื้นที่วงกลม: " + area);
}
}
2. การโอเวอร์โหลดเมธอด (Method Overloading):
static int multiply(int a, int b) {
return a * b;
}
static double multiply(double a, double b) {
return a * b;
}
static int multiply(int a, int b, int c) {
return a * b * c;
}
public static void main(String[] args) {
System.out.println("จำนวนเต็ม: " + multiply(3, 4));
System.out.println("ทศนิยม: " + multiply(2.5, 4.0));
System.out.println("สามจำนวนเต็ม: " + multiply(2, 3, 4));
}
}
พารามิเตอร์ของเมธอด:
- Pass by Value – ชนิดข้อมูลพื้นฐานจะถูกคัดลอก
- Pass by Reference – ออบเจกต์จะถูกอ้างอิง
- พารามิเตอร์แบบยืดหยุ่น – ใช้ … สำหรับพารามิเตอร์จำนวนไม่คงที่
การเขียนโปรแกรมเชิงวัตถุ (OOP)
Java เป็นภาษาเชิงวัตถุที่สร้างจากคลาสและออบเจกต์
คลาสและออบเจกต์:
String name;
int age;
double gpa;
Student(String n, int a, double g) {
name = n;
age = a;
gpa = g;
}
void displayInfo() {
System.out.println("นักเรียน: " + name + ", อายุ: " + age + ", GPA: " + gpa);
}
void study() {
System.out.println(name + " กำลังเรียนหนัก!");
}
}
public class OOP {
public static void main(String[] args) {
Student student1 = new Student("อลิซ", 20, 3.8);
Student student2 = new Student("บ๊อบ", 19, 3.6);
student1.displayInfo();
student2.displayInfo();
student1.study();
}
}
การห่อหุ้ม (Encapsulation) ด้วย Getters และ Setters:
private double balance;
private String accountNumber;
public BankAccount(String accNum, double initialBalance) {
accountNumber = accNum;
balance = initialBalance;
}
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
System.out.println("ฝากเงิน $" + amount + ". ยอดคงเหลือใหม่: $" + balance);
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
System.out.println("ถอนเงิน $" + amount + ". ยอดคงเหลือใหม่: $" + balance);
} else {
System.out.println("ยอดเงินไม่เพียงพอหรือจำนวนไม่ถูกต้อง");
}
}
}
public class Banking {
public static void main(String[] args) {
BankAccount account = new BankAccount("12345", 1000.0);
account.deposit(250.0);
account.withdraw(100.0);
System.out.println("ยอดคงเหลือสุดท้าย: $" + account.getBalance());
}
}
อาร์เรย์และคอลเลกชัน
อาร์เรย์
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5};
String[] names = new String[3];
names[0] = "อลิซ";
names[1] = "บ๊อบ";
names[2] = "ชาร์ลี";
System.out.println("ตัวเลข:");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
System.out.println("\nชื่อ:");
for (String name : names) {
System.out.println(name);
}
}
}
ArrayList (อาร์เรย์แบบไดนามิก):
public class Lists {
public static void main(String[] args) {
ArrayList
fruits.add("แอปเปิ้ล");
fruits.add("กล้วย");
fruits.add("ส้ม");
System.out.println("ผลไม้: " + fruits);
fruits.remove("กล้วย");
System.out.println("หลังลบ: " + fruits);
System.out.println("ขนาด: " + fruits.size());
for (String fruit : fruits) {
System.out.println("ผลไม้: " + fruit);
}
}
}
การจัดการข้อผิดพลาด (Exception Handling)
จัดการข้อผิดพลาดด้วยบล็อก try-catch
public static void main(String[] args) {
try {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]);
int result = 10 / 0;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("ข้อผิดพลาดอาร์เรย์: " + e.getMessage());
} catch (ArithmeticException e) {
System.out.println("ข้อผิดพลาดทางคณิตศาสตร์: " + e.getMessage());
} finally {
System.out.println("ส่วนนี้ทำงานเสมอ");
}
try {
String text = null;
System.out.println(text.length());
} catch (NullPointerException e) {
System.out.println("ข้อผิดพลาดตัวชี้ null!");
}
}
}
ขั้นตอนต่อไป
แนวคิดพื้นฐานที่ควรเชี่ยวชาญ:
- การสืบทอดและพอลิมอร์ฟิซึม – แนวคิด OOP ขั้นสูง
- อินเทอร์เฟซและคลาสนามธรรม – การเขียนโปรแกรมแบบสัญญา
- การอ่าน/เขียนไฟล์ – การจัดการไฟล์
- เฟรมเวิร์กคอลเลกชัน – Lists, Sets, Maps และอัลกอริทึม
- เจเนอริกซ์ – การเขียนโปรแกรมที่ปลอดภัยต่อชนิดข้อมูล
- Lambda Expressions – ฟีเจอร์การเขียนโปรแกรมเชิงฟังก์ชัน
- Streams API – การประมวลผลข้อมูลแบบ pipeline
หัวข้อขั้นสูงที่น่าสนใจ:
- การทำงานหลายเธรดและ Concurrency – การเขียนโปรแกรมแบบคู่ขนาน
- รูปแบบการออกแบบ (Design Patterns) – วิธีแก้ปัญหาการเขียนโปรแกรมทั่วไป
- การทดสอบหน่วย (Unit Testing) – ใช้ JUnit เพื่อทดสอบโค้ด
- เครื่องมือสร้างโปรเจกต์ – Maven และ Gradle
- เฟรมเวิร์ก – Spring Boot สำหรับพัฒนาเว็บ
- การเชื่อมต่อฐานข้อมูล – JDBC สำหรับการทำงานกับฐานข้อมูล
- เว็บเซอร์วิส – REST API และ Microservices
โปรเจกต์ฝึกหัด:
- แอปเครื่องคิดเลข – GUI สำหรับการคำนวณพื้นฐาน
- ระบบจัดการนักเรียน – การดำเนินการ CRUD ด้วยการจัดเก็บไฟล์
- โปรแกรมจำลองบัญชีธนาคาร – ใช้แนวคิด OOP และการจัดการข้อผิดพลาด
- แอป To-Do List – ใช้คอลเลกชันและอินเทอร์เฟซผู้ใช้
- เว็บ API ง่าย ๆ – สร้าง RESTful Service ด้วย Spring Boot
- แอปแชท – การใช้เครือข่ายและการทำงานหลายเธรด
แหล่งเรียนรู้:
- เอกสาร Java จาก Oracle – อ้างอิงและบทเรียนอย่างเป็นทางการ
- คอร์ส Java จาก Codecademy – แพลตฟอร์มการเรียนรู้แบบโต้ตอบ
- Java Code Geeks – บทความและบทเรียน
- LeetCode – ฝึกอัลกอริทึมและโครงสร้างข้อมูล
- Spring.io – เอกสารและคู่มือสำหรับเฟรมเวิร์ก
- GitHub – โปรเจกต์ Java แบบโอเพนซอร์สเพื่อศึกษา
Java เป็นภาษาที่มีความยืดหยุ่นและมีระบบนิเวศที่แข็งแกร่ง เหมาะสำหรับผู้เริ่มต้น เริ่มจากพื้นฐาน ฝึกฝนอย่างสม่ำเสมอ และค่อย ๆ สำรวจแนวคิดขั้นสูงเพื่อพัฒนาทักษะในภาษาการเขียนโปรแกรมที่ทรงพลังนี้!