Java เป็นภาษาการเขียนโปรแกรมระดับสูงที่มีพื้นฐานจากคลาสและเป็นแบบวัตถุ ซึ่งถูกออกแบบมาเพื่อให้มีการพึ่งพาการใช้งานน้อยที่สุดเท่าที่จะเป็นไปได้ ภาษา Java เป็นที่รู้จักในด้านความสามารถในการพกพา ทำให้นักพัฒนาสามารถเขียนโค้ดที่สามารถทำงานได้บนอุปกรณ์ใด ๆ ที่ติดตั้ง Java Virtual Machine (JVM) ความสามารถในการเขียนครั้งเดียวและทำงานได้ทุกที่นี้ทำให้ Java เหมาะสมอย่างยิ่งสำหรับแอปพลิเคชันเว็บ ซอฟต์แวร์องค์กร และการพัฒนาแอปพลิเคชัน Android ไวยากรณ์ของ Java มาจาก C และ C++ โดยมีการเน้นที่ความสามารถในการอ่านและความสะดวกในการใช้งาน
Java ถูกพัฒนาขึ้นโดย James Gosling และทีมงานของเขาที่ Sun Microsystems ในช่วงต้นทศวรรษ 1990 ภาษา Java ถูกออกแบบมาให้เป็นโซลูชันที่ไม่ขึ้นกับแพลตฟอร์มสำหรับการสร้างแอปพลิเคชันบนอุปกรณ์ต่าง ๆ ในตอนแรกมันถูกเรียกว่า Oak แต่ต่อมาได้เปลี่ยนชื่อเป็น Java ซึ่งได้แรงบันดาลใจจากกาแฟ Java การเปิดตัวอย่างเป็นทางการของ Java 1.0 เกิดขึ้นในเดือนพฤษภาคม 1995 ซึ่งตรงกับการเติบโตของ World Wide Web ที่ช่วยกระตุ้นการนำไปใช้
ตลอดหลายปีที่ผ่านมา Java ได้พัฒนาผ่านหลายเวอร์ชัน โดยแต่ละเวอร์ชันจะมีฟีเจอร์และการปรับปรุงใหม่ ๆ การเปิดตัว Java 2 ในปี 1998 ได้นำเสนอ Java 2 Platform ซึ่งรวมถึง Swing graphical API และ Collections Framework การเปลี่ยนไปใช้โมเดลการเวอร์ชันในปี 2004 โดยเริ่มจาก Java 5 ได้นำเสนอฟีเจอร์สำคัญของภาษา เช่น generics, annotations และ enhanced for-loop
ปัจจุบัน Java ถูกดูแลโดย Oracle Corporation หลังจากที่ได้เข้าซื้อกิจการ Sun Microsystems ในปี 2010 ชุมชน Java มีความกระตือรือร้น โดยมีเฟรมเวิร์ก ไลบรารี และเครื่องมือมากมาย เช่น Spring, Hibernate และ Maven การพัฒนา Java ยังคงดำเนินต่อไปด้วยการอัปเดตเป็นประจำ โดยเวอร์ชันล่าสุดคือ Java 17 ซึ่งเป็นเวอร์ชัน Long-Term Support (LTS) ที่รับประกันความเสถียรสำหรับองค์กร
Java มีอิทธิพลอย่างมากต่อภาษาการเขียนโปรแกรมอื่น ๆ โดยได้สร้างแรงบันดาลใจให้กับฟีเจอร์ใน C#, Kotlin และ Scala ธรรมชาติที่ไม่ขึ้นกับแพลตฟอร์มของ Java ยังเปิดทางให้กับแอปพลิเคชันต่าง ๆ นอกเหนือจากซอฟต์แวร์แบบดั้งเดิม รวมถึงแพลตฟอร์มข้อมูลขนาดใหญ่ เช่น Apache Hadoop และบริการคลาวด์
Java เป็นภาษาที่มีลักษณะเชิงวัตถุโดยธรรมชาติ ซึ่งหมายความว่ามันสนับสนุนการจัดระเบียบโค้ดเป็นคลาสและวัตถุ ทำให้การสร้างแบบจำลองเอนทิตีในโลกจริงทำได้ง่ายขึ้น
class Animal {
void sound() {
System.out.println("เสียงสัตว์");
}
}
class Dog extends Animal {
void sound() {
System.out.println("เห่า");
}
}
Java ใช้ระบบการตรวจสอบประเภทที่เข้มงวด ซึ่งหมายความว่าต้องประกาศประเภทของตัวแปร ทำให้ป้องกันข้อผิดพลาดในระหว่างการทำงานได้มากมาย
int count = 10;
String name = "Java";
Java ใช้การเก็บขยะเพื่อจัดการหน่วยความจำ โดยจะคืนหน่วยความจำที่ใช้โดยวัตถุที่ไม่มีการอ้างอิงอีกต่อไปโดยอัตโนมัติ
Animal animal = new Animal(); // จัดสรรหน่วยความจำ
animal = null; // หน่วยความจำพร้อมสำหรับการเก็บขยะ
Java มีกลไกการจัดการข้อยกเว้นที่แข็งแกร่งผ่านบล็อก try-catch ซึ่งช่วยให้นักพัฒนาจัดการข้อผิดพลาดได้อย่างมีระเบียบ
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("ข้อผิดพลาดการหารด้วยศูนย์!");
}
Java ทำให้การทำงานหลายเธรดง่ายขึ้น โดยอนุญาตให้มีการดำเนินการพร้อมกันของงานด้วยเธรดที่จัดการได้ง่าย
class MyThread extends Thread {
public void run() {
System.out.println("เธรดกำลังทำงานอยู่.");
}
}
MyThread thread = new MyThread();
thread.start();
Java อนุญาตให้สร้างคลาสภายในที่ไม่ระบุชื่อ ซึ่งช่วยให้สามารถนำเสนออินเทอร์เฟซหรือขยายคลาสได้อย่างรวดเร็วโดยไม่ต้องประกาศอย่างเป็นทางการ
Runnable runnable = new Runnable() {
public void run() {
System.out.println("คลาสภายในที่ไม่ระบุชื่อ");
}
};
new Thread(runnable).start();
Java รองรับ generics ซึ่งช่วยให้นักพัฒนาสามารถสร้างคลาส อินเทอร์เฟซ และเมธอดที่มีพารามิเตอร์ประเภทได้ ซึ่งช่วยเพิ่มความน่าเชื่อถือของโค้ด
class Box<T> {
private T item;
public void setItem(T item) { this.item = item; }
public T getItem() { return item; }
}
ที่ถูกนำเสนอใน Java 8, lambda expressions ให้วิธีที่ชัดเจนในการแทนที่อินสแตนซ์ของอินเทอร์เฟซที่มีเมธอดเดียว (functional interfaces)
List<String> names = Arrays.asList("John", "Jane", "Jack");
names.forEach(name -> System.out.println(name));
Java's Stream API อนุญาตให้มีการดำเนินการแบบฟังก์ชันบนคอลเลกชัน ทำให้การประมวลผลข้อมูลง่ายและมีประสิทธิภาพมากขึ้น
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList());
Java รองรับ annotations ซึ่งให้ข้อมูลเมตาดาต้าเกี่ยวกับโปรแกรมและสามารถส่งผลต่อวิธีที่โปรแกรมถูกจัดการโดยคอมไพเลอร์หรือการทำงาน
@Override
public void myMethod() {
// โค้ดเมธอดที่นี่
}
JDK เป็นชุดเครื่องมือหลักสำหรับการพัฒนา Java ซึ่งมีเครื่องมือที่จำเป็นสำหรับการพัฒนา คอมไพล์ และรันแอปพลิเคชัน Java รวมถึง Java Runtime Environment (JRE) ไลบรารี และเครื่องมือพัฒนา
สภาพแวดล้อมการพัฒนาที่รวมกัน (IDEs) ที่ใช้กันทั่วไปสำหรับการพัฒนา Java ได้แก่:
โปรเจกต์มักจะถูกสร้างขึ้นโดยใช้เครื่องมือสร้างเช่น Maven หรือ Gradle ซึ่งช่วยในการจัดการการพึ่งพาและทำให้กระบวนการสร้างเป็นไปอย่างราบรื่น คำสั่งสร้างที่ง่ายใน Gradle อาจมีลักษณะดังนี้:
gradle build
Java ถูกใช้อย่างกว้างขวางในหลายโดเมน รวมถึง:
Java มักถูกเปรียบเทียบกับภาษาต่าง ๆ เช่น C#, C++, Python และ JavaScript
โค้ด Java สามารถแปลเป็นภาษาอื่นได้ แม้ว่าความซับซ้อนอาจแตกต่างกันไปตามพาราดิ้มของภาษาที่ตั้งเป้า เครื่องมือเช่น Jaunt และ J2ObjC มีอยู่เพื่อช่วยในกระบวนการนี้ แต่ไม่สามารถจัดการทุกสถานการณ์ได้ กุญแจสำคัญในการแปลที่ประสบความสำเร็จคือการเข้าใจโครงสร้างของทั้ง Java และภาษาที่ตั้งเป้า โดยเฉพาะในด้านต่าง ๆ เช่น การจัดการหน่วยความจำและระบบประเภท