อ่าน 21 นาที
ภาษาจาวา (ภาษาโปรแกรม)
Java เป็น ภาษาโปรแกรม ระดับสูง อเนกประสงค์ปลอดภัย ต่อหน่วยความจำ และ เชิงวัตถุ มี จุด ประสงค์เพื่อให้ โปรแกรมเมอร์ เขียนโค้ดเพียงครั้งเดียวและรันได้ทุกที่ (WORA) [ 17 ]...
ภาษาจาวา (ภาษาโปรแกรม)
| ชวา | |
|---|---|
| กระบวนทัศน์ | รูปแบบการเขียนโปรแกรมหลายแบบ : ทั่วไป , เชิงวัตถุ ( แบบคลาส ), เชิงฟังก์ชัน , เชิงคำสั่ง , เชิงสะท้อน , พร้อมกัน |
| ตระกูล | JVM - โฮสต์ |
| ออกแบบโดย | เจมส์ กอสลิง |
| นักพัฒนา | บริษัท ออราเคิล คอร์ปอเรชั่น |
| ปรากฏครั้งแรก | 23 พฤษภาคม 2538 [ 1 ] |
| เวอร์ชันเสถียร | Java SE 26 [ 2 ] |
| วินัยในการพิมพ์ | คง ที่แข็งแกร่ง ปลอดภัยระบุชื่อชัดเจน |
| การจัดการหน่วยความจำ | เก็บขยะ |
| นามสกุลไฟล์ | .java, .class , .jar , .jmod, .war |
| เว็บไซต์ |
|
| ได้รับอิทธิพลจาก | |
| CLU , [ 3 ] Simula67 , [ 3 ] Lisp , [ 3 ] Smalltalk , [ 3 ] Ada 83 , C++ , [ 4 ] C# , [ 5 ] Eiffel , [ 6 ] Mesa , [ 7 ] Modula-3 , [ 8 ] Oberon , [ 9 ] Objective-C , [ 10 ] UCSD Pascal , [ 11 ] [ 12 ] Object Pascal [ 13 ] | |
| ได้รับอิทธิพล | |
| Ada 2005 , ArkTS , BeanShell , C# , Chapel , [ 14 ] Clojure , ECMAScript , Fantom , Gambas , [ 15 ] Groovy , Hack , [ 16 ] Haxe , J# , JavaScript , JS++ , Kotlin , PHP , Python , Scala , Vala | |
| บทความนี้เป็นส่วนหนึ่งของชุดบทความเกี่ยวกับ ภาษาการเขียนโปรแกรม Java |
Javaเป็นภาษาโปรแกรมระดับสูงอเนกประสงค์ปลอดภัยต่อหน่วยความจำและเชิงวัตถุ มีจุดประสงค์เพื่อให้โปรแกรมเมอร์เขียนโค้ดเพียงครั้งเดียวและรันได้ทุกที่ (WORA) [ 17 ]ซึ่งหมายความว่า โค้ด Java ที่คอม ไพล์แล้ว สามารถรันบนทุกแพลตฟอร์มที่รองรับ Java โดยไม่ต้องคอมไพล์ใหม่[ 18 ]แอปพลิเคชัน Java มักจะถูกคอมไพล์เป็นไบต์โค้ดที่สามารถรันบนเครื่องเสมือน Java (JVM) ใดก็ได้โดยไม่คำนึงถึง สถาปัตยกรรมคอมพิวเตอร์พื้นฐาน[ 19 ]ไวยากรณ์ของ Java คล้ายกับCและC++แต่มีสิ่งอำนวยความสะดวกระดับต่ำน้อยกว่าทั้ง สอง ภาษา รันไทม์ของ Java ให้ความสามารถแบบไดนามิก (เช่นการเขียนโปรแกรมแบบสะท้อน (reflection) และการ แก้ไขโค้ดขณะรันไทม์) ซึ่งโดยปกติแล้วจะไม่มีในภาษาคอมไพล์แบบดั้งเดิม
Java ได้รับความนิยมไม่นานหลังจากเปิดตัว และเป็นภาษาโปรแกรมที่ได้รับความนิยมตั้งแต่นั้นเป็นต้นมา[ 20 ]ในปี 2022 Java เป็นภาษาโปรแกรมที่ได้รับความนิยมมากเป็นอันดับสามตามข้อมูลจากGitHub [ 21 ] แม้ว่าจะยังคงได้รับความนิยมอย่างกว้างขวาง แต่การใช้งาน Java ก็ลดลงอย่างค่อยเป็นค่อยไปในช่วงไม่กี่ปีที่ผ่านมา ในขณะที่ภาษาอื่นๆ ที่ใช้ JVMได้รับความนิยมมากขึ้น[ 22 ]
ภาษา Java ถูกออกแบบโดยJames Goslingที่Sun Microsystemsเปิดตัวในเดือนพฤษภาคม 1995 ในฐานะส่วนประกอบหลักของแพลตฟอร์ม Java ของ Sun คอมไพเลอร์ Java เวอร์ชัน ดั้งเดิมและเวอร์ชันอ้างอิงเครื่องเสมือน (VM) และไลบรารีคลาสถูกเผยแพร่โดย Sun ภายใต้ใบอนุญาตกรรมสิทธิ์ณ เดือนพฤษภาคม 2007 เพื่อให้เป็นไปตามข้อกำหนดของJava Community Process Sun ได้เปลี่ยนใบอนุญาตเทคโนโลยี Java ส่วนใหญ่ไปเป็นใบอนุญาตGPL-2.0 เท่านั้นOracleซึ่งซื้อ Sun ในปี 2010 เสนอ เครื่องเสมือน Java HotSpot ของตนเอง อย่างไรก็ตามเวอร์ชันอ้างอิง อย่างเป็นทางการ คือOpenJDK JVM ซึ่งเป็นซอฟต์แวร์โอเพนซอร์สที่นักพัฒนาส่วนใหญ่ใช้ และเป็น JVM เริ่มต้นสำหรับ ระบบ ปฏิบัติการ Linux เกือบทั้งหมด
ณ เดือนมีนาคม 2026 Java เวอร์ชันปัจจุบันคือ Java 26
ประวัติศาสตร์


เจมส์ กอสลิง , ไมค์ เชอริแดน และแพทริก นอตันได้ริเริ่มโครงการภาษา Java ในเดือนมิถุนายน พ.ศ. 2534 [ 23 ]เดิมที Java ได้รับการออกแบบมาสำหรับโทรทัศน์แบบโต้ตอบ แต่ในขณะนั้นมันล้ำหน้าเกินไปสำหรับอุตสาหกรรมเคเบิลทีวีดิจิทัล[ 24 ]ในตอนแรกภาษานี้มีชื่อว่าOakตามชื่อ ต้น โอ๊กที่อยู่ด้านนอกสำนักงานของกอสลิง ต่อมาโครงการนี้ใช้ชื่อว่าGreenและในที่สุดก็เปลี่ยนชื่อเป็นJavaซึ่งมาจากJava coffee ซึ่ง เป็นกาแฟชนิดหนึ่งจากอินโดนีเซีย[ 25 ]กอสลิงออกแบบ Java ด้วย ไวยากรณ์แบบ C / C++ที่โปรแกรมเมอร์ระบบและแอปพลิเคชันจะคุ้นเคย[ 26 ]
Sun Microsystems เปิดตัวการใช้งานสาธารณะครั้งแรกในชื่อ Java 1.0 ในปี 1996 [ 27 ]โดยให้คำมั่นสัญญาว่าจะเขียนครั้งเดียว รันได้ทุกที่ (WORA) พร้อมรันไทม์ฟรีบนแพลตฟอร์ม ยอดนิยม มีความปลอดภัยในระดับหนึ่งและมีระบบรักษาความปลอดภัยที่กำหนดค่าได้ อนุญาตให้จำกัดการเข้าถึงเครือข่ายและไฟล์ เว็บเบราว์เซอร์ หลัก ๆ ได้รวมความสามารถในการรันJava appletsภายในเว็บเพจในไม่ช้า และ Java ก็ได้รับความนิยมอย่างรวดเร็ว คอมไพเลอร์ Java 1.0 ได้รับการเขียนใหม่ในภาษา JavaโดยArthur van Hoffเพื่อให้สอดคล้องกับข้อกำหนดภาษา Java 1.0 อย่างเคร่งครัด[ 28 ]ด้วยการมาถึงของ Java 2 (เปิดตัวครั้งแรกในชื่อ J2SE 1.2 ในเดือนธันวาคม 1998 – 1999) เวอร์ชันใหม่มีหลายการกำหนดค่าที่สร้างขึ้นสำหรับแพลตฟอร์มประเภทต่างๆJ2EEประกอบด้วยเทคโนโลยีและ API สำหรับแอปพลิเคชันระดับองค์กรที่มักทำงานในสภาพแวดล้อมเซิร์ฟเวอร์ ในขณะที่ J2ME มี API ที่ปรับให้เหมาะสมสำหรับแอปพลิเคชันมือถือ เวอร์ชันเดสก์ท็อปได้รับการเปลี่ยนชื่อเป็น J2SE ในปี 2006 เพื่อวัตถุประสงค์ทางการตลาด ซันได้เปลี่ยนชื่อเวอร์ชัน J2 ใหม่เป็นJava EE , Java MEและJava SEตามลำดับ
ในปี พ.ศ. 2540 Sun Microsystems ได้ติดต่อ หน่วยงานมาตรฐาน ISO/IEC JTC 1และต่อมาEcma International เพื่อกำหนด มาตรฐาน Java อย่างเป็นทางการ แต่ในไม่ช้าก็ถอนตัวออกจากกระบวนการ[ 29 ] [ 30 ] [ 31 ] Java ยังคงเป็น มาตรฐาน โดยพฤตินัยซึ่งควบคุมผ่านกระบวนการชุมชน Java [ 32 ] ครั้งหนึ่ง Sun เคยเปิดให้ใช้งาน Java ส่วนใหญ่ได้โดยไม่คิดค่าใช้จ่าย แม้ว่าจะเป็นซอฟต์แวร์ที่เป็นกรรมสิทธิ์ก็ตาม Sun สร้างรายได้จาก Java ผ่านการขายใบอนุญาตสำหรับผลิตภัณฑ์เฉพาะทาง เช่น Java Enterprise System
เมื่อวันที่ 13 พฤศจิกายน พ.ศ. 2549 Sun ได้เผยแพร่ Java virtual machine (JVM) ส่วนใหญ่เป็นซอฟต์แวร์โอเพนซอร์สฟรี (FOSS) ภายใต้เงื่อนไขของ ใบอนุญาต GPL-2.0 เท่านั้นเมื่อวันที่ 8 พฤษภาคม พ.ศ. 2550 Sun ได้เสร็จสิ้นกระบวนการดังกล่าว ทำให้โค้ดหลักทั้งหมดของ JVM สามารถใช้งานได้ภายใต้ เงื่อนไขการแจกจ่าย ซอฟต์แวร์ฟรี /โอเพนซอร์ส ยกเว้นโค้ดส่วนเล็กน้อยที่ Sun ไม่ได้เป็นเจ้าของลิขสิทธิ์[ 33 ]
รองประธานของ Sun อย่าง Rich Green กล่าวว่าบทบาทที่เหมาะสมที่สุดของ Sun เกี่ยวกับ Java คือการเป็นผู้เผยแพร่[ 34 ]หลังจาก การเข้าซื้อกิจการ Sun Microsystems ของ Oracle Corporationในปี 2552–2553 Oracle ได้อธิบายตัวเองว่าเป็นผู้ดูแลเทคโนโลยี Java ด้วยความมุ่งมั่นอย่างไม่ลดละในการส่งเสริมชุมชนแห่งการมีส่วนร่วมและความโปร่งใส[ 35 ]สิ่งนี้ไม่ได้ป้องกันไม่ให้ Oracle ฟ้องร้อง Google ในเวลาต่อมาไม่นานเนื่องจากการใช้ Java ภายในAndroid SDK (ดู ส่วน Android )
เมื่อวันที่ 2 เมษายน พ.ศ. 2553 เจมส์ กอสลิง ได้ลาออกจากOracle [ 36 ]
ในเดือนมกราคม 2016 Oracle ประกาศว่าสภาพแวดล้อมรันไทม์ Java ที่ใช้ JDK 9 จะยุติการใช้งานปลั๊กอินเบราว์เซอร์[ 37 ]
ซอฟต์แวร์ Java ทำงานได้บนอุปกรณ์ส่วนใหญ่ ตั้งแต่แล็ปท็อปไปจนถึงศูนย์ข้อมูลเครื่องเล่นเกมไป จนถึง ซูเปอร์คอมพิวเตอร์ทางวิทยาศาสตร์[ 38 ]
Oracle (และบริษัทอื่นๆ) แนะนำอย่างยิ่งให้ถอนการติดตั้ง Java เวอร์ชันที่ล้าสมัยและไม่ได้รับการสนับสนุน เนื่องจากปัญหาด้านความปลอดภัยที่ยังไม่ได้รับการแก้ไขในเวอร์ชันเก่า[ 39 ]
หลักการ
มีเป้าหมายหลักห้าประการในการสร้างภาษา Java: [ 18 ]
- มันต้องเรียบง่าย เป็นแบบเชิงวัตถุและคุ้นเคย
- ต้องมีความแข็งแกร่งและปลอดภัย
- ต้องใช้งานได้กับทุกสถาปัตยกรรมและพกพาได้สะดวก
- ต้องทำงานด้วยประสิทธิภาพสูง
- ต้องมีการตีความการเชื่อมโยงและความยืดหยุ่น
เวอร์ชัน
ณ เดือนมิถุนายน พ.ศ. 2569 Java 8, 11, 17, 21 และ 25 ได้รับการสนับสนุนเป็นเวอร์ชันระยะยาว (LTS) [ 40 ]
Oracle ได้ปล่อยการอัปเดตสาธารณะฟรีครั้งสุดท้ายสำหรับJava 8 LTS เวอร์ชันเก่าในเดือนมกราคม 2019 สำหรับการใช้งานเชิงพาณิชย์ แม้ว่าจะยังคงสนับสนุน Java 8 ด้วยการอัปเดตสาธารณะสำหรับการใช้งานส่วนบุคคลอย่างไม่มีกำหนดก็ตาม ผู้จำหน่ายรายอื่น เช่นAdoptiumยังคงเสนอเวอร์ชัน OpenJDK ที่รองรับระยะยาว (LTS) เวอร์ชันฟรี เวอร์ชันเหล่านี้อาจมีแพตช์ความปลอดภัยเพิ่มเติมและการแก้ไขข้อบกพร่อง[ 41 ]
เวอร์ชันหลักของ Java พร้อมวันที่วางจำหน่าย:
| เวอร์ชั่น | วันที่ |
|---|---|
| เจดีเคเบต้า | พ.ศ. 2538 |
| เจดีเค 1.0 | 23 มกราคม พ.ศ. 2539 [ 42 ] |
| เจดีเค 1.1 | วันที่ 19 กุมภาพันธ์ พ.ศ. 2540 |
| เจ2เอสอี 1.2 | 8 ธันวาคม พ.ศ. 2541 |
| เจ2เอสอี 1.3 | 8 พฤษภาคม 2543 |
| เจ2เอสอี 1.4 | 6 กุมภาพันธ์ พ.ศ. 2545 |
| เจ2เอสอี 5.0 | 30 กันยายน 2547 |
| Java SE 6 | วันที่ 11 ธันวาคม พ.ศ. 2549 |
| Java SE 7 | 28 กรกฎาคม 2554 |
| Java SE 8 (LTS) | 18 มีนาคม 2557 |
| Java SE 9 | 21 กันยายน 2560 |
| Java SE 10 | 20 มีนาคม 2561 |
| Java SE 11 (LTS) | 25 กันยายน 2018 [ 43 ] |
| Java SE 12 | 19 มีนาคม 2562 |
| Java SE 13 | 17 กันยายน 2562 |
| Java SE 14 | 17 มีนาคม 2563 |
| Java SE 15 | 15 กันยายน 2020 [ 44 ] |
| Java SE 16 | 16 มีนาคม 2564 |
| Java SE 17 (LTS) | 14 กันยายน 2564 |
| Java SE 18 | 22 มีนาคม 2565 |
| Java SE 19 | 20 กันยายน 2022 |
| Java SE 20 | 21 มีนาคม 2566 |
| Java SE 21 (LTS) | 19 กันยายน 2023 [ 45 ] |
| Java SE 22 | 19 มีนาคม 2567 |
| Java SE 23 | 17 กันยายน 2567 |
| Java SE 24 | 18 มีนาคม 2025 [ 46 ] |
| Java SE 25 (LTS) | 16 กันยายน 2025 [ 47 ] |
| Java SE 26 | 17 มีนาคม 2026 [ 48 ] |
ฉบับพิมพ์
| แพลตฟอร์ม Javaรุ่นต่างๆ |
|---|
|
Sun ได้กำหนดและสนับสนุน Java สี่เวอร์ชัน โดยมุ่งเป้าไปที่สภาพแวดล้อมการใช้งานแอปพลิเคชันที่แตกต่างกัน และแบ่งAPI หลายส่วนออกเป็นกลุ่มๆ เพื่อให้จัดอยู่ในแพลตฟอร์มใดแพลตฟอร์มหนึ่ง แพลตฟอร์มเหล่านั้นได้แก่:
- Java Cardสำหรับสมาร์ทการ์ด[ 49 ]
- Java Platform, Micro Edition (Java ME) – มุ่งเป้าไปที่สภาพแวดล้อมที่มีทรัพยากรจำกัด[ 50 ]
- Java Platform, Standard Edition (Java SE) – มุ่งเป้าไปที่สภาพแวดล้อมเวิร์กสเตชัน[ 51 ]
- Java Platform, Enterprise Edition (Java EE) – มุ่งเป้าไปที่องค์กรขนาดใหญ่แบบกระจายหรือสภาพแวดล้อมอินเทอร์เน็ต[ 52 ]
คลาสต่างๆใน Java API ถูกจัดระเบียบเป็นกลุ่มแยกต่างหาก เรียกว่าแพ็กเกจแต่ละแพ็กเกจประกอบด้วยชุดของอินเทอร์เฟซ คลาส ซับแพ็กเก จ และข้อยกเว้น ที่เกี่ยวข้อง
นอกจากนี้ Sun ยังได้จัดทำ Java เวอร์ชันส่วนบุคคล (Personal Java)ซึ่งต่อมาได้ถูกแทนที่ด้วย Java ME เวอร์ชันที่อิงตามมาตรฐานและจับคู่โปรไฟล์การกำหนดค่าในภายหลัง
ระบบการดำเนินการ
Java JVM และไบต์โค้ด
เป้าหมายหนึ่งของการออกแบบ Java คือความสามารถในการพกพาซึ่งหมายความว่าโปรแกรมที่เขียนขึ้นสำหรับแพลตฟอร์ม Java ต้องทำงานได้ในลักษณะเดียวกันบนฮาร์ดแวร์และระบบปฏิบัติการใดๆ ก็ตามที่มีการสนับสนุนรันไทม์ที่เพียงพอ สิ่งนี้ทำได้โดยการคอมไพล์โค้ดภาษา Java ไปเป็นรูปแบบตัวกลางที่เรียกว่าJVM bytecode แทนที่จะคอมไพล์โดยตรงเป็น โค้ดเครื่องเฉพาะสถาปัตยกรรมคำสั่ง JVM bytecode นั้นคล้ายคลึงกับโค้ดเครื่อง แต่มีจุดประสงค์เพื่อให้ถูกประมวลผลโดยเครื่องเสมือน (VM) ที่เขียนขึ้นเฉพาะสำหรับฮาร์ดแวร์โฮสต์ผู้ใช้ปลายทางมักใช้Java Runtime Environment (JRE) ที่ติดตั้งบนอุปกรณ์ของตนสำหรับแอปพลิเคชัน Java แบบสแตนด์อโลน หรือเว็บเบราว์เซอร์สำหรับJava applets
ไลบรารีมาตรฐานมีวิธีการทั่วไปในการเข้าถึงคุณสมบัติเฉพาะของโฮสต์ เช่น กราฟิก การทำงานแบบมัลติเธรดและเครือข่าย
การใช้ไบต์โค้ดสากลทำให้การพอร์ตทำได้ง่าย อย่างไรก็ตาม ค่าใช้จ่ายในการตีความไบต์โค้ดเป็นคำสั่งเครื่องทำให้โปรแกรมที่ถูกตีความมักจะทำงานช้ากว่าโปรแกรมที่ทำงาน แบบเนทีฟเสมอ คอม ไพเลอร์ แบบ Just-in-time (JIT) ที่คอมไพล์ไบต์โค้ดเป็นโค้ดเครื่องในระหว่างการทำงานได้รับการแนะนำตั้งแต่ช่วงแรก คอมไพเลอร์ Hotspot ของ Java จริงๆ แล้วเป็นคอมไพเลอร์สองตัวในตัวเดียว โดยGraalVM (รวมอยู่ใน Java 11 แต่ถูกลบออกใน Java 16) อนุญาตให้ มีการคอมไพ ล์แบบหลายระดับ[ 53 ] Java เองเป็นอิสระจากแพลตฟอร์มและถูกปรับให้เข้ากับแพลตฟอร์มเฉพาะที่จะทำงานโดยใช้เครื่องเสมือน Java (JVM) ซึ่งแปลไบต์โค้ด JVMเป็นภาษาเครื่องของแพลตฟอร์ม[ 54 ]
ผลงาน
โปรแกรมที่เขียนด้วยภาษา Java มีชื่อเสียงในด้านความช้าและต้องการหน่วยความจำมากกว่าโปรแกรมที่เขียนด้วยภาษาC++ [ 55 ] [ 56 ] อย่างไรก็ตามความเร็วในการทำงานของโปรแกรม Java ดีขึ้นอย่างมากด้วยการนำการคอมไพล์แบบ just-in-time มาใช้ในปี 1997/1998 สำหรับJava 1.1 [ 57 ] การเพิ่มคุณสมบัติของภาษาที่สนับสนุนการวิเคราะห์โค้ดที่ดี ขึ้น (เช่น คลาสภายใน คลาส StringBuilder การยืนยันแบบเลือกได้ ฯลฯ) และการเพิ่มประสิทธิภาพในเครื่องเสมือน Java เช่นHotSpotกลายเป็น JVM เริ่มต้นของ Sun ในปี 2000 ด้วย Java 1.5 ประสิทธิภาพได้รับการปรับปรุงด้วยการเพิ่มjava.util.concurrentแพ็กเกจ ซึ่งรวมถึงการใช้งานConcurrentMaps แบบไร้การล็อกและคอลเลกชันมัลติคอร์อื่นๆ และได้รับการปรับปรุงเพิ่มเติมด้วย Java 1.6
ไม่ใช่ JVM
บางแพลตฟอร์มมีการรองรับฮาร์ดแวร์โดยตรงสำหรับ Java มีไมโครคอนโทรลเลอร์ที่สามารถรันไบต์โค้ด JVM ในฮาร์ดแวร์แทนที่จะเป็นเครื่องเสมือน Java แบบซอฟต์แวร์[ 58 ]และ โปรเซสเซอร์ที่ใช้ ARM บางตัว อาจมีการรองรับฮาร์ดแวร์สำหรับการรันไบต์โค้ด JVM ผ่านตัว เลือก Jazelleแม้ว่าการรองรับส่วนใหญ่จะถูกยกเลิกไปแล้วในการใช้งาน ARM ในปัจจุบัน
การจัดการหน่วยความจำอัตโนมัติ
Java ใช้ตัวเก็บขยะอัตโนมัติเพื่อจัดการหน่วยความจำในวงจรชีวิตของวัตถุโปรแกรมเมอร์เป็นผู้กำหนดว่าเมื่อใดควรสร้างวัตถุ และรันไทม์ของ Java จะรับผิดชอบในการกู้คืนหน่วยความจำเมื่อวัตถุไม่ได้ใช้งานอีกต่อไป เมื่อไม่มีการอ้างอิงถึงวัตถุเหลืออยู่หน่วยความจำที่ไม่สามารถเข้าถึงได้จะพร้อมให้ตัวเก็บขยะปล่อยโดยอัตโนมัติ สิ่งที่คล้ายกับการรั่วไหลของหน่วยความจำอาจยังคงเกิดขึ้นได้หากโค้ดของโปรแกรมเมอร์เก็บการอ้างอิงถึงวัตถุที่ไม่จำเป็นอีกต่อไป โดยทั่วไปแล้วเมื่อวัตถุที่ไม่จำเป็นอีกต่อไปถูกเก็บไว้ในคอนเทนเนอร์ที่ยังคงใช้งานอยู่[ 59 ]หากมีการเรียกใช้เมธอดสำหรับวัตถุที่ไม่มีอยู่จริงจะมีการโยนข้อยกเว้นตัวชี้ว่าง[ 60 ] [ 61 ]
หนึ่งในแนวคิดเบื้องหลังโมเดลการจัดการหน่วยความจำอัตโนมัติของ Java คือการที่โปรแกรมเมอร์ไม่ต้องแบกรับภาระในการจัดการหน่วยความจำด้วยตนเอง ในบางภาษา หน่วยความจำสำหรับการสร้างวัตถุจะถูกจัดสรรโดยปริยายบนสแต็กหรือจัดสรรและยกเลิกการจัดสรรอย่างชัดเจนจากฮีปในกรณีหลัง ความรับผิดชอบในการจัดการหน่วยความจำจะตกอยู่กับโปรแกรมเมอร์ หากโปรแกรมไม่ยกเลิกการจัดสรรวัตถุจะเกิดการรั่วไหลของหน่วยความจำ[ 59 ]หากโปรแกรมพยายามเข้าถึงหรือยกเลิกการจัดสรรหน่วยความจำที่ถูกยกเลิกการจัดสรรไปแล้ว ผลลัพธ์จะไม่แน่นอนและคาดเดาได้ยาก และโปรแกรมมีแนวโน้มที่จะไม่เสถียรหรือล่มได้ ปัญหานี้สามารถแก้ไขได้บางส่วนโดยการใช้สมาร์ทพอยเตอร์แต่สิ่งเหล่านี้จะเพิ่มภาระและความซับซ้อน การเก็บขยะไม่สามารถป้องกัน การรั่วไหลของ หน่วย ความจำเชิงตรรกะ ได้ กล่าวคือ หน่วยความจำยังคงถูกอ้างอิงอยู่แต่ไม่เคยถูกใช้งาน[ 59 ]
การเก็บขยะอาจเกิดขึ้นได้ทุกเมื่อ ตามหลักการแล้ว ควรเกิดขึ้นเมื่อโปรแกรมไม่ได้ใช้งาน การเก็บขยะจะเกิดขึ้นอย่างแน่นอนหากมีหน่วยความจำว่างบนฮีปไม่เพียงพอที่จะจัดสรรวัตถุใหม่ ซึ่งอาจทำให้โปรแกรมหยุดทำงานชั่วขณะ การจัดการหน่วยความจำแบบชัดเจนเป็นไปไม่ได้ใน Java อย่างไรก็ตาม เป็นไปได้ที่จะทำให้ JVM ทำการเก็บขยะด้วยตนเอง [ 62 ]
Java ไม่รองรับการคำนวณเลขชี้ แบบ C/C++ [ 63 ] ที่สามารถจัดการที่อยู่ของวัตถุทางคณิตศาสตร์ได้ (เช่น โดยการเพิ่มหรือลบค่าออฟเซ็ต) วิธีนี้ช่วยให้ตัวเก็บขยะสามารถย้ายวัตถุที่อ้างอิง ได้และรับประกันความปลอดภัยของประเภทข้อมูล
เช่นเดียวกับในภาษา C++ และภาษาเชิงวัตถุอื่นๆ ตัวแปรของชนิดข้อมูลพื้นฐาน ของ Java จะถูกจัดเก็บโดยตรงในฟิลด์ (สำหรับอ็อบเจ็กต์) หรือบนสแต็ก (สำหรับเมธอด) แทนที่จะจัดเก็บบนฮีป เหมือนกับชนิดข้อมูลที่ไม่ใช่พื้นฐาน (แต่โปรดดูการวิเคราะห์การหลีกเลี่ยง ) นี่เป็นการตัดสินใจโดยเจตนาของผู้ออกแบบ Java เพื่อเหตุผลด้านประสิทธิภาพ
Java มีตัวเก็บขยะหลายประเภท ตั้งแต่ Java 9 เป็นต้นมา HotSpot ใช้Garbage First Garbage Collector (G1GC) เป็นค่าเริ่มต้น[ 64 ]อย่างไรก็ตาม ยังมีตัวเก็บขยะอื่นๆ อีกหลายตัวที่สามารถใช้จัดการฮีปได้ เช่น Z Garbage Collector (ZGC) ที่เปิดตัวใน Java 11 และ Shenandoah GC ที่เปิดตัวใน Java 12 แต่ไม่มีใน OpenJDK เวอร์ชันที่ผลิตโดย Oracle Shenandoah มีให้ใช้งานใน OpenJDK เวอร์ชันของบุคคลที่สาม เช่นEclipse Temurinสำหรับแอปพลิเคชันส่วนใหญ่ใน Java นั้น G1GC ก็เพียงพอแล้ว ในเวอร์ชันก่อนหน้าของ Java เช่น Java 8 นั้นParallel Garbage Collectorถูกใช้เป็นตัวเก็บขยะเริ่มต้น
การแก้ไขปัญหาการจัดการหน่วยความจำไม่ได้หมายความว่าโปรแกรมเมอร์จะไม่ต้องแบกรับภาระในการจัดการทรัพยากรประเภทอื่น ๆ อย่างถูกต้อง เช่น การเชื่อมต่อเครือข่ายหรือฐานข้อมูล ตัวจัดการไฟล์ ฯลฯ โดยเฉพาะอย่างยิ่งในกรณีที่มีข้อผิดพลาดเกิดขึ้น
ไวยากรณ์

ไวยากรณ์ของ Java ได้รับอิทธิพลอย่างมากจากC++และCต่างจาก C++ ซึ่งรวมไวยากรณ์สำหรับการเขียนโปรแกรมแบบมีโครงสร้าง แบบทั่วไป และแบบเชิงวัตถุ Java ถูกสร้างขึ้นเกือบทั้งหมดเป็นภาษาเชิงวัตถุ[ 18 ]โค้ดทั้งหมดเขียนอยู่ภายในคลาส และข้อมูลทุกรายการเป็นวัตถุ ยกเว้นชนิดข้อมูลพื้นฐาน (เช่น จำนวนเต็ม จำนวนทศนิยมค่าบูลีนและอักขระ) ซึ่งไม่ใช่วัตถุด้วยเหตุผลด้านประสิทธิภาพ
ต่างจาก C++ Java ไม่รองรับการโอเวอร์โหลดตัวดำเนินการ[ 65 ]หรือการสืบทอดแบบหลายทางสำหรับคลาส แม้ว่าการสืบทอดแบบหลายทางจะได้รับการสนับสนุนสำหรับอินเทอร์เฟซก็ตาม[ 66 ]
ภาษา Java ใช้การแสดงความคิดเห็นคล้ายกับภาษา C++ โดยมีรูปแบบการแสดงความคิดเห็นอยู่ 3 แบบ ได้แก่ แบบบรรทัดเดียวที่ใช้เครื่องหมายทับสองตัว ( //), แบบหลายบรรทัดที่เปิดด้วย/*และปิดด้วย*/และ แบบ Javadocที่เปิดด้วย/**และปิดด้วย*/แบบ Javadoc ช่วยให้ผู้ใช้สามารถเรียกใช้ไฟล์ปฏิบัติการ Javadoc เพื่อสร้างเอกสารประกอบสำหรับโปรแกรม และสามารถอ่านได้โดยสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) บางตัว เช่นEclipseเพื่อให้นักพัฒนาสามารถเข้าถึงเอกสารประกอบภายใน IDE ได้
สวัสดีโลก
ต่อไปนี้เป็นตัวอย่างโปรแกรม "Hello, World!"ในรูปแบบไวยากรณ์ Java แบบดั้งเดิม:
คลาสสาธารณะHelloWorld {public static void main ( String [] args ) {System.out.println ( " Hello World ! " ) ;}}Java 25 ได้นำเสนอไวยากรณ์ที่เรียบง่ายสำหรับคลาสหลักและเมธอดหลัก ซึ่งช่วยให้ผู้ใช้สามารถเขียนโปรแกรม Java ขนาดเล็กได้อย่างกระชับ: [ 67 ] [ 68 ]
void main () {IO.println ( " Hello World!" ) ;}ชั้นเรียนพิเศษ
แอปเพล็ต
Java applet เป็นโปรแกรมที่ฝังอยู่ในแอปพลิเคชันอื่น โดยส่วนใหญ่จะอยู่ในเว็บเพจที่แสดงในเว็บเบราว์เซอร์ API ของ Java applet ถูกยกเลิกการใช้งานเมื่อมีการเปิดตัว Java 9 ในปี 2017 [ 69 ] [ 70 ]
เซอร์ฟเล็ต
เทคโนโลยี Java Servletมอบกลไกที่เรียบง่ายและสม่ำเสมอให้กับนักพัฒนาเว็บในการขยายฟังก์ชันการทำงานของเว็บเซิร์ฟเวอร์และการเข้าถึงระบบธุรกิจที่มีอยู่ Servlet เป็น ส่วนประกอบ ฝั่งเซิร์ฟเวอร์ของ Java EE ที่สร้างการตอบสนองต่อคำขอจากไคลเอ็นต์โดยส่วนใหญ่แล้ว หมายถึงการสร้าง หน้า HTMLเพื่อตอบสนองต่อ คำขอ HTTPแม้ว่าจะมีคลาส Servlet มาตรฐานอื่นๆ อีกมากมาย เช่น สำหรับการสื่อสาร ผ่าน WebSocket ก็ตาม
API เซิร์ฟเล็ตของ Java นั้นถูกแทนที่ไปบ้างแล้ว (แต่ก็ยังคงถูกใช้งานอยู่ภายใน) ด้วยเทคโนโลยีมาตรฐานสองอย่างของ Java สำหรับบริการเว็บ:
- Java API สำหรับบริการเว็บ RESTful (JAX-RS 2.0) มีประโยชน์สำหรับบริการ AJAX, JSON และ REST และ
- Java API สำหรับบริการเว็บ XML (JAX-WS) มีประโยชน์สำหรับบริการเว็บSOAP
โดยทั่วไป การใช้งาน API เหล่านี้บนแอปพลิเคชันเซิร์ฟเวอร์หรือคอนเทนเนอร์เซิร์ฟเล็ตจะใช้เซิร์ฟเล็ตมาตรฐานในการจัดการปฏิสัมพันธ์ทั้งหมดกับ คำขอและการตอบกลับ HTTPซึ่งจะส่งต่อไปยังเมธอดของเว็บเซอร์วิสสำหรับตรรกะทางธุรกิจที่แท้จริง
JavaServer Pages
JavaServerPages ( JSP ) เป็นส่วนประกอบ Java EE ฝั่งเซิร์ฟเวอร์ ที่สร้างการตอบสนอง ซึ่งโดยทั่วไปคือหน้า HTMLต่อคำขอHTTP จาก ไคลเอ็นต์ JSP ฝังโค้ด Java ในหน้า HTML โดยใช้ตัวคั่น<% พิเศษ <jsp> และ%><jsp> JSP จะถูกคอมไพล์เป็น Java servlet ซึ่ง เป็นแอปพลิเคชัน Java ในตัวของมันเอง ในครั้งแรกที่มีการเข้าถึง หลังจากนั้น servlet ที่สร้างขึ้นจะสร้างการตอบสนอง[ 71 ]
แอปพลิเคชันสวิง
Swingเป็นไลบรารีส่วนติดต่อผู้ใช้แบบกราฟิกสำหรับแพลตฟอร์ม Java SE สามารถระบุรูปลักษณ์และความรู้สึกที่แตกต่างกันได้ผ่าน ระบบ รูปลักษณ์และความรู้สึกแบบปลั๊กอินของ Swing Sun ได้จัดเตรียมแบบจำลองของWindows , GTK+และMotifไว้ให้ นอกจากนี้Appleยังได้จัดเตรียม รูปลักษณ์และความรู้สึก AquaสำหรับmacOS อีกด้วย ในกรณีที่การใช้งานรูปลักษณ์และความรู้สึกเหล่านี้ก่อนหน้านี้อาจถูกมองว่าขาดไป Swing ใน Java SE 6 ได้แก้ไขปัญหานี้โดยใช้ รูทีนการวาด วิดเจ็ต GUI ดั้งเดิม ของแพลตฟอร์มพื้นฐาน มากขึ้น [ 72 ]
แอปพลิเคชัน JavaFX
JavaFXเป็นแพลตฟอร์มซอฟต์แวร์สำหรับการสร้างและส่งมอบแอปพลิเคชันเดสก์ท็อปรวมถึงแอปพลิเคชันเว็บที่มีฟังก์ชันการทำงานมากมาย ซึ่งสามารถทำงานได้บนอุปกรณ์หลากหลายประเภท JavaFX มีจุดประสงค์เพื่อทดแทนSwing ในฐานะ ไลบรารีส่วนติดต่อผู้ใช้แบบกราฟิก (GUI) มาตรฐานสำหรับJava SEแต่ตั้งแต่ JDK 11 เป็นต้นมา JavaFX ไม่ได้อยู่ใน JDK หลักอีกต่อไป และมีให้ใช้งานเป็นโมดูลแยกต่างหาก[ 73 ] JavaFX รองรับคอมพิวเตอร์เดสก์ท็อปและเว็บเบราว์เซอร์บนMicrosoft Windows , LinuxและmacOS JavaFX ไม่รองรับรูปลักษณ์และความรู้สึกดั้งเดิมของระบบปฏิบัติการ[ 74 ]
ยาสามัญ
ในปี 2004 ภาษา Java ได้เพิ่ม Genericsเข้ามาเป็นส่วนหนึ่งของ J2SE 5.0 ก่อนที่จะมีการนำ Generics มาใช้ การประกาศตัวแปรแต่ละตัวจะต้องระบุชนิดข้อมูลที่เฉพาะเจาะจง ตัวอย่างเช่น สำหรับคลาสคอนเทนเนอร์ นี่เป็นปัญหาเพราะไม่มีวิธีง่ายๆ ในการสร้างคอนเทนเนอร์ที่ยอมรับเฉพาะวัตถุชนิดข้อมูลที่เฉพาะเจาะจงเท่านั้น คอนเทนเนอร์จะต้องทำงานกับซับไทป์ทั้งหมดของคลาสหรืออินเทอร์เฟซ (โดยปกติ) Objectหรือต้องสร้างคลาสคอนเทนเนอร์ที่แตกต่างกันสำหรับแต่ละคลาสที่บรรจุอยู่ Generics ช่วยให้สามารถตรวจสอบชนิดข้อมูลในระหว่างการคอมไพล์ได้โดยไม่ต้องสร้างคลาสคอนเทนเนอร์จำนวนมาก ซึ่งแต่ละคลาสจะมีโค้ดที่เกือบจะเหมือนกัน นอกจากจะช่วยให้โค้ดมีประสิทธิภาพมากขึ้นแล้ว ยังช่วยป้องกันการเกิดข้อยกเว้นขณะรันไทม์บางอย่างได้ด้วยการออกข้อผิดพลาดในระหว่างการคอมไพล์ หาก Java ป้องกันข้อผิดพลาดเกี่ยวกับชนิดข้อมูลขณะรันไทม์ทั้งหมดได้ Java ClassCastExceptionก็จะเป็นภาษาที่ปลอดภัยต่อชนิดข้อมูล (Type Safe )
ในปี 2016 ระบบประเภทของ Java ได้รับการพิสูจน์แล้วว่าไม่สมเหตุสมผลเนื่องจากสามารถใช้เจเนริกเพื่อสร้างคลาสและเมธอดที่อนุญาตให้กำหนดอินสแตนซ์ของคลาสหนึ่งให้กับตัวแปรของคลาสอื่นที่ไม่เกี่ยวข้องได้ โค้ดดังกล่าวได้รับการยอมรับจากคอมไพเลอร์ แต่จะล้มเหลวในระหว่างการทำงานด้วยข้อยกเว้นการแปลงคลาส[ 75 ]
การวิจารณ์
คำวิจารณ์ที่มุ่งเป้าไปที่ Java ได้แก่ การใช้งาน generics [ 76 ]ความเร็ว[ 55 ]การจัดการตัวเลขที่ไม่มีเครื่องหมาย[ 77 ]การใช้งานเลขคณิตจุดลอยตัว[ 78 ]และประวัติช่องโหว่ด้านความปลอดภัยในการใช้งาน HotSpot ซึ่งเป็นการใช้งาน Java VM หลัก[ 79 ]นักพัฒนา ได้วิจารณ์ความซับซ้อนและความยุ่งยากของ Java Persistence API (JPA) ซึ่งเป็นส่วนมาตรฐานของ Java EE ส่งผลให้มีการนำนามธรรมระดับสูงมาใช้มากขึ้น เช่น Spring Data JPA ซึ่งมีจุดมุ่งหมายเพื่อลดความซับซ้อนของการดำเนินการฐานข้อมูลและลดโค้ดซ้ำซ้อน ความนิยมที่เพิ่มขึ้นของเฟรมเวิร์กดังกล่าวชี้ให้เห็นถึงข้อจำกัดในการใช้งาน JPA มาตรฐานที่ง่ายต่อการพัฒนา Java สมัยใหม่
ห้องสมุดคลาส
Java Class Libraryเป็นไลบรารีมาตรฐานที่พัฒนาขึ้นเพื่อสนับสนุนการพัฒนาแอปพลิเคชันในภาษา Java โดยอยู่ภายใต้การควบคุมของOracleร่วมกับผู้อื่นผ่านโปรแกรมJava Community Process [ 80 ]บริษัทหรือบุคคลที่เข้าร่วมในกระบวนการนี้สามารถมีอิทธิพลต่อการออกแบบและการพัฒนา API กระบวนการนี้เป็นประเด็นถกเถียงกันในช่วงทศวรรษ 2010 [ 81 ]ไลบรารีคลาสประกอบด้วยคุณสมบัติต่างๆ เช่น:
- ไลบรารีหลัก ซึ่งประกอบด้วย:
- อินพุต/เอาต์พุต (I/O หรือ IO) [ 82 ]และI/O แบบไม่บล็อก (NIO) หรือ IO/NIO [ 83 ]
- การเชื่อมต่อเครือข่าย[ 84 ] ( ตัวแทนผู้ใช้ใหม่(ไคลเอ็นต์ HTTP) ตั้งแต่ Java 11 [ 85 ] )
- การเขียนโปรแกรมเชิงสะท้อน (การสะท้อนคิด)
- การประมวลผลพร้อมกัน (ความพร้อมกัน) [ 82 ]
- ยาสามัญ
- การเขียนสคริปต์, คอมไพเลอร์
- การเขียนโปรแกรมเชิงฟังก์ชัน ( แลมบ์ดา , สตรีมมิ่ง)
- ไลบรารีคอลเลกชันที่ใช้โครงสร้างข้อมูลเช่นรายการพจนานุกรมต้นไม้เซตคิวและคิวสองด้านหรือสแต็ก[ 86 ]
- ไลบรารีสำหรับการประมวลผล XML (การแยกวิเคราะห์ การแปลง การตรวจสอบความถูกต้อง)
- ความปลอดภัย[ 87 ]
- ห้องสมุดการทำให้เป็นสากลและการแปลเป็นภาษาท้องถิ่น[ 88 ]
- ไลบรารีการบูรณาการ ซึ่งช่วยให้นักพัฒนาแอปพลิเคชันสามารถสื่อสารกับระบบภายนอกได้ ไลบรารีเหล่านี้ประกอบด้วย:
- Java Database Connectivity (JDBC) APIสำหรับการเข้าถึงฐานข้อมูล
- Java Naming and Directory Interface (JNDI) สำหรับการค้นหาและการค้นพบ
- การเรียกใช้เมธอดระยะไกล (RMI) ของ Java และสถาปัตยกรรมตัวกลางการร้องขอวัตถุทั่วไป (CORBA) สำหรับการพัฒนาแอปพลิเคชันแบบกระจาย
- Java Management Extensions (JMX) สำหรับการจัดการและตรวจสอบแอปพลิเคชัน
- ไลบรารี ส่วนติดต่อผู้ใช้ซึ่งประกอบด้วย:
- ชุด เครื่องมือ Abstract Window Toolkit (AWT) (เวอร์ชันหลัก หรือเวอร์ชันพื้นฐาน ) ซึ่งประกอบด้วย ส่วนประกอบ GUIวิธีการจัดวางส่วนประกอบเหล่านั้น และวิธีการจัดการเหตุการณ์จากส่วนประกอบเหล่านั้น
- ไลบรารี Swing (น้ำหนักเบา) ซึ่งสร้างขึ้นบน AWT แต่มีฟังก์ชันการทำงานที่ไม่ใช่แบบดั้งเดิมของวิดเจ็ต AWT
- API สำหรับการบันทึก ประมวลผล และเล่นเสียง
- จาวาเอฟเอ็กซ์
- การใช้งานเครื่องเสมือน Java ที่ขึ้นอยู่กับแพลตฟอร์ม ซึ่งเป็นวิธีการที่ใช้ในการประมวลผลไบต์โค้ดของไลบรารี Java และแอปพลิเคชันของบุคคลที่สาม
- ปลั๊กอิน ซึ่งช่วยให้สามารถเรียกใช้แอปเพล็ต ในเว็บเบราว์เซอร์ได้
- Java Web Start เป็นเครื่องมือที่ช่วยให้สามารถเผยแพร่แอปพลิเคชัน Java ให้แก่ผู้ใช้ปลายทางผ่านทางอินเทอร์เน็ต ได้อย่างมีประสิทธิภาพ
- การออกใบอนุญาตและเอกสาร
เอกสารประกอบ
Javadoc เป็นระบบเอกสารที่ครอบคลุมซึ่งสร้างโดยSun Microsystemsโดยให้ระบบที่เป็นระเบียบแก่ผู้พัฒนาในการจัดทำเอกสารโค้ดของพวกเขา คอมเมนต์ Javadoc จะมีเครื่องหมายดอกจันเพิ่มที่จุดเริ่มต้น กล่าวคือ ตัวคั่นคือ/**และ*/ในขณะที่คอมเมนต์หลายบรรทัดปกติใน Java จะถูกคั่นด้วย/*และ*/และคอมเมนต์บรรทัดเดียวจะเริ่มต้น//ด้วย[ 89 ]
การนำไปใช้
บริษัท Oracle Corporationเป็นเจ้าของแพลตฟอร์ม Java SE อย่างเป็นทางการ เนื่องจากการเข้าซื้อกิจการSun Microsystemsเมื่อวันที่ 27 มกราคม 2553 การใช้งานนี้อิงตามการใช้งาน Java ดั้งเดิมของ Sun การใช้งานของ Oracle มีให้ใช้งานสำหรับWindows , macOS , LinuxและSolarisเนื่องจาก Java ขาดมาตรฐานอย่างเป็นทางการที่ได้รับการยอมรับจากEcma International , ISO/IEC, ANSI หรือองค์กรมาตรฐานบุคคลที่สามอื่นๆ การใช้งานของ Oracle จึงถือเป็น มาตรฐาน โดย พฤตินัย
การใช้งาน Java บนระบบ Oracle นั้นถูกบรรจุไว้ในสองเวอร์ชันที่แตกต่างกัน คือ Java Runtime Environment (JRE) ซึ่งประกอบด้วยส่วนประกอบของแพลตฟอร์ม Java SE ที่จำเป็นสำหรับการรันโปรแกรม Java และมีไว้สำหรับผู้ใช้ทั่วไป และJava Development Kit (JDK) ซึ่งมีไว้สำหรับนักพัฒนาซอฟต์แวร์และประกอบด้วยเครื่องมือพัฒนาต่างๆ เช่นคอมไพเลอร์ Java , Javadoc , Jarและดีบักเกอร์นอกจากนี้ Oracle ยังได้เปิดตัวGraalVMซึ่งเป็นคอมไพเลอร์และอินเตอร์พรีเตอร์แบบไดนามิกประสิทธิภาพสูงสำหรับ Java อีกด้วย
OpenJDKเป็นอีกหนึ่งการใช้งาน Java SE ที่ได้รับอนุญาตภายใต้ GNU GPL การใช้งานนี้เริ่มต้นขึ้นเมื่อ Sun เริ่มเผยแพร่ซอร์สโค้ดของ Java ภายใต้ GPL และนับตั้งแต่ Java SE 7 เป็นต้นมา OpenJDK ก็ได้กลายเป็น Java Reference Implementation อย่างเป็นทางการ
เป้าหมายของ Java คือการทำให้การใช้งาน Java ทั้งหมดเข้ากันได้ ในอดีต ใบอนุญาตเครื่องหมายการค้าของ Sun สำหรับการใช้งานแบรนด์ Java ยืนยันว่าการใช้งานทั้งหมดต้องเข้ากันได้ซึ่งส่งผลให้เกิดข้อพิพาททางกฎหมายกับMicrosoftหลังจากที่ Sun อ้างว่าการใช้งานของ Microsoft ไม่รองรับการเรียกใช้เมธอดระยะไกลของ Java (RMI) หรืออินเทอร์เฟซเนทีฟของ Java (JNI) และได้เพิ่มคุณสมบัติเฉพาะแพลตฟอร์มของตนเอง Sun ฟ้องร้องในปี 1997 และในปี 2001 ได้รับเงินชดเชย 20 ล้านดอลลาร์สหรัฐ รวมถึงคำสั่งศาลที่บังคับใช้เงื่อนไขของใบอนุญาตจาก Sun [ 90 ]ส่งผลให้ Microsoft ไม่ได้จัดส่ง Java มาพร้อมกับWindowsอีก ต่อไป
Java ที่ไม่ขึ้นกับแพลตฟอร์มนั้นมีความสำคัญอย่างยิ่งต่อJava EEและจำเป็นต้องมีการตรวจสอบที่เข้มงวดมากขึ้นเพื่อรับรองการใช้งาน สภาพแวดล้อมนี้ช่วยให้แอปพลิเคชันฝั่งเซิร์ฟเวอร์สามารถใช้งานได้บนหลายแพลตฟอร์ม
ใช้งานนอกแพลตฟอร์ม Java
ภาษาโปรแกรม Java ต้องการแพลตฟอร์มซอฟต์แวร์เพื่อให้สามารถเรียกใช้โปรแกรมที่คอมไพล์แล้วได้
Oracle เป็นผู้จัดหาแพลตฟอร์ม Javaสำหรับใช้งานร่วมกับภาษา Java ส่วนAndroid SDKเป็นแพลตฟอร์มซอฟต์แวร์ทางเลือก ซึ่งใช้เป็นหลักในการพัฒนาแอปพลิเคชัน Androidด้วยระบบ GUI ของตัวเอง
แอนดรอยด์
ภาษา Java เป็นเสาหลักสำคัญในAndroidซึ่งเป็นระบบปฏิบัติการมือถือแบบโอเพนซอร์ส แม้ว่า Android ซึ่งสร้างขึ้นบนเคอร์เนล Linuxจะเขียนขึ้นโดยส่วนใหญ่ด้วยภาษา C แต่Android SDKก็ใช้ภาษา Java เป็นพื้นฐานสำหรับแอปพลิเคชัน Android แต่ไม่ได้ใช้ GUI, SE, ME หรือมาตรฐาน Java อื่นๆ ที่ได้รับการยอมรับ[ 91 ]ภาษาไบต์โค้ดที่รองรับโดย Android SDK นั้นไม่เข้ากันกับไบต์โค้ด JVM และทำงานบนเครื่องเสมือนของตัวเอง ซึ่งได้รับการปรับให้เหมาะสมสำหรับอุปกรณ์ที่มีหน่วยความจำต่ำ เช่นสมาร์ทโฟนและแท็บเล็ตคอมพิวเตอร์ขึ้นอยู่กับเวอร์ชันของ Android ไบต์โค้ดจะถูกตีความโดยเครื่องเสมือน Dalvikหรือคอมไพล์เป็นโค้ดเนทีฟโดยAndroid Runtime
ระบบปฏิบัติการ Android ไม่ได้จัดเตรียมไลบรารีมาตรฐาน Java SE แบบเต็มรูปแบบ แต่ Android SDK มีการใช้งานไลบรารีมาตรฐานส่วนใหญ่ในรูปแบบอิสระ โดยรองรับ Java 6 และฟีเจอร์บางอย่างของ Java 7 และมีการใช้งานที่เข้ากันได้กับไลบรารีมาตรฐาน ( Apache Harmony )
ความขัดแย้ง
การใช้เทคโนโลยีที่เกี่ยวข้องกับ Java ใน Android นำไปสู่ข้อพิพาททางกฎหมายระหว่าง Oracle และ Google เมื่อวันที่ 7 พฤษภาคม 2012 คณะลูกขุนในซานฟรานซิสโกพบว่า หาก API สามารถจดลิขสิทธิ์ได้ Google ก็ละเมิดลิขสิทธิ์ของ Oracle โดยการใช้ Java ในอุปกรณ์ Android [ 92 ]ผู้พิพากษาเขตWilliam Alsupตัดสินเมื่อวันที่ 31 พฤษภาคม 2012 ว่า API ไม่สามารถจดลิขสิทธิ์ได้[ 93 ]แต่คำตัดสินนี้ถูกพลิกกลับโดยศาลอุทธรณ์แห่งสหรัฐอเมริกาสำหรับวงจรของรัฐบาลกลางในเดือนพฤษภาคม 2014 [ 94 ]เมื่อวันที่ 26 พฤษภาคม 2016 ศาลเขตตัดสินให้ Google เป็นฝ่ายชนะ โดยตัดสินว่าการละเมิดลิขสิทธิ์ของ Java API ใน Android ถือเป็นการใช้งานโดยชอบธรรม[ 95 ]ในเดือนมีนาคม 2018 คำตัดสินนี้ถูกพลิกกลับโดยศาลอุทธรณ์ ซึ่งส่งคดีการกำหนดค่าเสียหายไปยังศาลรัฐบาลกลางในซานฟรานซิสโก[ 96 ] Google ยื่นคำร้องขอหมายศาลฎีกาของสหรัฐอเมริกาในเดือนมกราคม 2019 เพื่อท้าทายคำตัดสินสองประการที่ศาลอุทธรณ์ได้ตัดสินให้ Oracle เป็นฝ่ายชนะ[ 97 ]เมื่อวันที่ 5 เมษายน 2021 ศาลได้ตัดสินด้วยคะแนนเสียง 6 ต่อ 2 ให้ Google เป็นฝ่ายชนะ โดยระบุว่าการใช้ API ของ Java ถือเป็นการใช้งานโดยชอบธรรมอย่างไรก็ตาม ศาลปฏิเสธที่จะตัดสินเรื่องลิขสิทธิ์ของ API โดยเลือกที่จะพิจารณาตัดสินโดยถือว่า API ของ Java มีลิขสิทธิ์ "เพื่อจุดประสงค์ในการโต้แย้งเท่านั้น" [ 98 ]
ดูเพิ่มเติม
- ซี#
- ซี++
- Dalvik ซึ่งใช้ใน Android เวอร์ชันเก่า ได้ถูกแทนที่ด้วย Android Runtimeที่ไม่ใช่ JIT แล้ว
- การประมวลผลแบบกระจายที่ไม่เป็นเนื้อเดียวกันของ Java
- รายชื่อ API ของ Java
- รายชื่อเฟรมเวิร์กของ Java
- รายชื่อภาษา JVM
- รายชื่อหนังสือเกี่ยวกับการเขียนโปรแกรมภาษา Java
- รายชื่อซอฟต์แวร์และเครื่องมือ Java
- รายชื่อเครื่องเสมือน Java
- ภาพรวมของภาษาการเขียนโปรแกรมจาวา
- การเปรียบเทียบ C# และ Java
- การเปรียบเทียบ Java และ C++
- การเปรียบเทียบภาษาโปรแกรม
บรรณานุกรม
- บล็อก, โจชัว (2018). Java ที่มีประสิทธิภาพ: คู่มือภาษาการเขียนโปรแกรม (ฉบับที่สาม). แอดดิสัน-เวสลีย์. ISBN 978-0-13-468599-1.
- Gosling, James; Joy, Bill ; Steele, Guy L. Jr .; Bracha, Gilad (2005). ข้อกำหนดภาษาจาวา (ฉบับที่ 3). Addison-Wesley. ISBN 0-321-24678-0เก็บถาวรจากต้นฉบับเมื่อวันที่ 14 กุมภาพันธ์ 2555 เรียกดูเมื่อวันที่ 8 กุมภาพันธ์ 2562
- Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014). ข้อกำหนดภาษา Java® (PDF) (Java SE รุ่นที่ 8). เก็บถาวร(PDF)จากต้นฉบับเมื่อวันที่ 21 ตุลาคม 2014 เรียกดูเมื่อวันที่ 18 พฤศจิกายน 2014
- ลินด์โฮล์ม, ทิม; เยลลิน, แฟรงค์ (1999). ข้อกำหนดเครื่องเสมือน Java (ฉบับที่ 2). แอดดิสัน-เวสลีย์. ISBN 0-201-43294-3เก็บถาวรจากต้นฉบับเมื่อวันที่ 25 กันยายน 2554 เรียกดูเมื่อวันที่ 8 กุมภาพันธ์ 2562
ลิงก์ภายนอก
- ซอฟต์แวร์ Java, Oracle
- OpenJDK, Oracle
- JDK builds, Adoptium
- Java สำหรับนักพัฒนา Dev.java
- ข่าวสารและความคิดเห็นจากสมาชิกทีม Java ของ Oracle
- วิกิ OpenJDK
- กระบวนการชุมชน Java
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ภาษาจาวา (ภาษาโปรแกรม)
Java เป็น ภาษาโปรแกรม ระดับสูง อเนกประสงค์ปลอดภัย ต่อหน่วยความจำ และ เชิงวัตถุ มี จุด ประสงค์เพื่อให้ โปรแกรมเมอร์ เขียนโค้ดเพียงครั้งเดียวและรันได้ทุกที่ (WORA) [ 17 ]...
ประวัติศาสตร์
เจมส์ กอสลิง , ไมค์ เชอริแดน และ แพทริก นอตัน ได้ริเริ่มโครงการภาษา Java ในเดือนมิถุนายน พ.ศ.
หลักการ
มีเป้าหมายหลักห้าประการในการสร้างภาษา Java: [ 18 ]
เวอร์ชัน
ณ เดือนมิถุนายน พ.ศ. 2569 Java 8, 11, 17, 21 และ 25 ได้รับการสนับสนุนเป็น เวอร์ชันระยะยาว (LTS) [ 40 ]