Java เป็นชื่อทั่วไปของภาษาการเขียนโปรแกรมเชิงวัตถุ Java และแพลตฟอร์ม Java ที่เปิดตัวโดย Sun Microsystems ในเดือนพฤษภาคม 1995 ได้รับการพัฒนาร่วมกันโดย James Gosling และเพื่อนร่วมงาน และเปิดตัวอย่างเป็นทางการในปี 1995
Java แบ่งออกเป็น 3 ระบบ:
ในเดือนมิถุนายน พ.ศ. 2548 มีการจัดการประชุม JavaOne และ SUN ได้เปิดตัว Java SE 6 ถึงตอนนี้ Java เวอร์ชันต่างๆ ได้รับการเปลี่ยนชื่อเพื่อลบหมายเลข "2" ออก: J2EE ถูกเปลี่ยนชื่อเป็น Java EE, J2SE ถูกเปลี่ยนชื่อเป็น Java SE และ J2ME ถูกเปลี่ยนชื่อเป็น Java ME
ในปี 2009 ออราเคิลเข้าซื้อกิจการ Sun
ในปี 2018 องค์กรโอเพ่นซอร์ส Eclipse Foundation ประกาศว่า JavaEE (Enterprise Edition) จะถูกเปลี่ยนชื่อเป็น JakartaEE (จาการ์ตา)
ไวยากรณ์ของภาษา Java นั้นใกล้เคียงกับภาษา C และภาษา C++ มาก ทำให้โปรแกรมเมอร์ส่วนใหญ่เรียนรู้และใช้งานได้ง่าย ในทางกลับกัน Java ละทิ้งคุณลักษณะเหล่านั้นของ C++ ที่ไม่ค่อยได้ใช้ เข้าใจยาก และทำให้เกิดความสับสน เช่น การโอเวอร์โหลดของตัวดำเนินการ การสืบทอดหลายรายการ และการแคสต์อัตโนมัติ โดยเฉพาะภาษา Java ไม่ได้ใช้พอยน์เตอร์ แต่เป็นการอ้างอิง นอกจากนี้ยังมีกลไกการจัดการการรีไซเคิลหน่วยความจำอัตโนมัติเพื่อให้โปรแกรมเมอร์ไม่ต้องกังวลเกี่ยวกับการจัดการหน่วยความจำ
ภาษา Java จัดเตรียมการสืบทอดแบบดั้งเดิม เช่น คลาส อินเทอร์เฟซ และการสืบทอด เพื่อความเรียบง่าย ภาษานี้สนับสนุนเฉพาะการสืบทอดระหว่างคลาสเดียว แต่รองรับการสืบทอดหลายรายการระหว่างอินเทอร์เฟซ และสนับสนุนกลไกการใช้งานระหว่างคลาสและอินเทอร์เฟซ (คีย์เวิร์ดคือ Implement) ภาษา Java รองรับการเชื่อมโยงแบบไดนามิกอย่างสมบูรณ์ ในขณะที่ภาษา C++ ใช้การเชื่อมโยงแบบไดนามิกสำหรับฟังก์ชันเสมือนเท่านั้น กล่าวโดยสรุป ภาษา Java เป็นภาษาโปรแกรมเชิงวัตถุล้วนๆ
ภาษา Java รองรับการพัฒนาแอปพลิเคชันอินเทอร์เน็ต ในบรรดาอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน Java พื้นฐาน มีอินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันเครือข่าย (java net) ซึ่งมีไลบรารีคลาสสำหรับการเขียนโปรแกรมแอปพลิเคชันเครือข่าย รวมถึง URL, URLConnection, Socket, ServerSocket ฯลฯ กลไก RMI (Remote Method Activation) ของ Java ยังเป็นวิธีการสำคัญในการพัฒนาแอปพลิเคชันแบบกระจาย
กลไกการพิมพ์ที่แข็งแกร่งของ Java การจัดการข้อยกเว้น การรวบรวมขยะอัตโนมัติ ฯลฯ ถือเป็นการรับประกันที่สำคัญสำหรับความทนทานของโปรแกรม Java การทิ้งพอยน์เตอร์เป็นทางเลือกที่ชาญฉลาดสำหรับ Java กลไกการตรวจสอบความปลอดภัยของ Java ทำให้ Java แข็งแกร่งยิ่งขึ้น
โดยปกติแล้ว Java จะใช้ในสภาพแวดล้อมเครือข่าย ด้วยเหตุนี้ Java จึงจัดเตรียมกลไกความปลอดภัยเพื่อป้องกันการโจมตีโค้ดที่เป็นอันตราย นอกเหนือจากคุณสมบัติด้านความปลอดภัยมากมายของภาษา Java แล้ว Java ยังมีกลไกการป้องกันความปลอดภัย (คลาส ClassLoader) สำหรับคลาสที่ดาวน์โหลดผ่านเครือข่าย เช่น การจัดสรรพื้นที่ชื่อที่แตกต่างกันเพื่อป้องกันการแทนที่คลาสท้องถิ่นด้วยชื่อเดียวกัน การตรวจสอบรหัสไบต์ และการจัดหากลไกการจัดการความปลอดภัย (คลาส SecurityManager) ช่วยให้แอปพลิเคชัน Java สามารถตั้งค่ายามรักษาความปลอดภัยได้
โปรแกรม Java (ไฟล์ที่มีส่วนต่อท้าย java) จะถูกคอมไพล์เป็นรูปแบบไบต์โค้ดที่เป็นกลางทางสถาปัตยกรรม (ไฟล์ที่มีคลาสส่วนต่อท้าย) บนแพลตฟอร์ม Java จากนั้นจึงสามารถรันบนระบบใดๆ ที่ใช้แพลตฟอร์ม Java นี้ วิธีนี้เหมาะสำหรับสภาพแวดล้อมเครือข่ายที่แตกต่างกันและการแจกจ่ายซอฟต์แวร์
ความสะดวกในการพกพานี้มาจากความเป็นกลางทางสถาปัตยกรรม นอกจากนี้ Java ยังควบคุมความยาวของประเภทข้อมูลพื้นฐานแต่ละประเภทอย่างเคร่งครัด ระบบ Java เองก็สามารถพกพาได้สูงเช่นกัน คอมไพเลอร์ Java ถูกนำไปใช้ใน Java และสภาพแวดล้อมการทำงานของ Java นั้นถูกนำไปใช้ใน ANSI C
ดังที่ได้กล่าวไว้ก่อนหน้านี้ โปรแกรม Java จะถูกคอมไพล์เป็นรูปแบบ bytecode บนแพลตฟอร์ม Java จากนั้นจึงสามารถรันบนระบบใดๆ ที่ใช้แพลตฟอร์ม Java นี้ ณ รันไทม์ ล่าม Java ในแพลตฟอร์ม Java ตีความและดำเนินการรหัสไบต์เหล่านี้ และคลาสที่จำเป็นระหว่างการดำเนินการจะถูกโหลดลงในสภาพแวดล้อมที่ทำงานในระหว่างขั้นตอนการเชื่อมต่อ
เมื่อเปรียบเทียบกับภาษาสคริปต์ระดับสูงที่ตีความแล้ว Java นั้นมีประสิทธิภาพสูงอย่างแน่นอน ในความเป็นจริง ด้วยการพัฒนาเทคโนโลยีคอมไพเลอร์ JIT (Just-In-Time) ความเร็วการทำงานของ Java ก็เข้าใกล้ C++ มากขึ้นเรื่อยๆ
ในภาษา Java เธรดเป็นอ็อบเจ็กต์พิเศษที่ต้องสร้างขึ้นโดยคลาส Thread หรือลูกหลาน (grandchildren) โดยปกติมีสองวิธีในการสร้างเธรด: ขั้นแรก ใช้ตัวสร้างประเภท Thread(Runnable) เพื่อล้อมอ็อบเจ็กต์ที่ใช้อินเทอร์เฟซ Runnable ลงในเธรด ประการที่สอง รับคลาสย่อยจากคลาส Thread และแทนที่ run Method ซึ่งเป็นอ็อบเจ็กต์ ที่สร้างขึ้นโดยใช้คลาสย่อยนี้เป็นเธรด เป็นที่น่าสังเกตว่าคลาส Thread ได้ใช้อินเทอร์เฟซ Runnable ดังนั้นเธรดใด ๆ จึงมีวิธีการทำงานของมัน และวิธีการ run มีโค้ดที่จะเรียกใช้โดยเธรด กิจกรรมของเธรดถูกควบคุมโดยชุดของวิธีการ ภาษา Java รองรับการดำเนินการพร้อมกันของหลายเธรด และจัดเตรียมกลไกการซิงโครไนซ์ระหว่างหลายเธรด (คีย์เวิร์ดถูกซิงโครไนซ์)
เป้าหมายการออกแบบประการหนึ่งของภาษา Java คือการปรับให้เข้ากับสภาพแวดล้อมที่เปลี่ยนแปลงแบบไดนามิก คลาสที่ต้องการโดยโปรแกรม Java สามารถโหลดแบบไดนามิกในสภาพแวดล้อมที่ทำงานอยู่ หรือสามารถโหลดคลาสที่ต้องการผ่านเครือข่ายได้ นอกจากนี้ยังอำนวยความสะดวกในการอัพเกรดซอฟต์แวร์อีกด้วย นอกจากนี้ คลาสใน Java ยังมีการแสดงรันไทม์และสามารถทำการตรวจสอบประเภทรันไทม์ได้
ภาษา Java พยายามตรวจสอบให้แน่ใจว่าหน่วยความจำระบบสูงกว่า 1G เครื่องมืออื่นๆ มีดังนี้:
หลังจากติดตั้งเครื่องมือข้างต้นแล้ว เราก็สามารถส่งออกโปรแกรมแรกของ Java "Hello World!"
public class MyFirstJavaProgram { public static void main(String []args) { System.out.println("Hello World"); } }
ในบทถัดไป เราจะแนะนำวิธีการกำหนดค่าสภาพแวดล้อมการพัฒนา Java