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

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

ไวยากรณ์ของ Java ได้รับอิทธิพลจากC++และC เป็นอย่างมาก ซึ่งแตกต่างจาก C++ ซึ่งรวมไวยากรณ์สำหรับการเขียนโปรแกรมแบบมีโครงสร้าง แบบทั่วไป และแบบเชิงวัตถุเข้าด้วยกัน Java ถูกสร้างขึ้นเกือบทั้งหมดเป็นภาษาเชิงวัตถุ[17]โค้ดทั้งหมดเขียนภายในคลาส และรายการข้อมูลแต่ละรายการเป็นอ็อบเจกต์ ยกเว้นประเภทข้อมูลดั้งเดิม (เช่น จำนวนเต็ม จำนวนจุดลอยตัวค่าบูลีนและอักขระ) ซึ่งไม่ใช่อ็อบเจกต์เนื่องจากเหตุผลด้านประสิทธิภาพ Java นำคุณลักษณะยอดนิยมบางอย่างของ C++ กลับมาใช้ใหม่ (เช่นprintf
วิธีการ)
ต่างจาก C++, Java ไม่สนับสนุนการโอเวอร์โหลดตัวดำเนินการ[58]หรือการสืบทอดหลายแบบสำหรับคลาส แม้ว่าจะรองรับการสืบทอดหลายแบบสำหรับอินเทอร์เฟซก็ตาม[59]
Java ใช้คำอธิบายประกอบคล้ายกับ C++ มีรูปแบบคำอธิบายประกอบสามแบบ ได้แก่ รูปแบบบรรทัดเดียวที่มีเครื่องหมายทับสองอัน ( //
) รูปแบบบรรทัดหลายบรรทัดที่เปิด/*
และปิดด้วย*/
และ รูปแบบคำอธิบายประกอบ Javadocที่เปิด/**
และปิดด้วย*/
รูปแบบคำอธิบายประกอบ Javadoc ช่วยให้ผู้ใช้เรียกใช้ไฟล์ปฏิบัติการ Javadoc เพื่อสร้างเอกสารประกอบสำหรับโปรแกรม และสามารถอ่านได้โดยสภาพแวดล้อมการพัฒนาแบบบูรณาการ (IDE) บางตัว เช่นEclipseเพื่อให้ผู้พัฒนาสามารถเข้าถึงเอกสารประกอบภายใน IDE ได้
สวัสดีโลก
ต่อไปนี้เป็นตัวอย่างง่ายๆ ของโปรแกรม "Hello, World!"ที่เขียนข้อความไปยังเอาต์พุตมาตรฐาน :
คลาสสาธารณะตัวอย่าง{
สาธารณะคงที่void main ( สตริง[] args ) {
ระบบ. out . println ( "สวัสดีโลก!" );
-
-
ชั้นเรียนพิเศษ
แอปเพล็ต
แอพเพล็ต Java คือโปรแกรมที่ฝังอยู่ในแอปพลิเคชันอื่น โดยปกติจะอยู่ในหน้าเว็บที่แสดงในเว็บเบราว์เซอร์ API แอพเพล็ต Java ล้าสมัยแล้วตั้งแต่ Java 9 ในปี 2017 [60] [61]
เซิร์ฟเล็ต
เทคโนโลยี เซิร์ฟเล็ต Javaช่วยให้นักพัฒนาเว็บมีกลไกที่เรียบง่ายและสอดคล้องกันในการขยายฟังก์ชันการทำงานของเว็บเซิร์ฟเวอร์และการเข้าถึงระบบธุรกิจที่มีอยู่ เซิร์ฟเล็ตเป็นส่วนประกอบ Java EE ฝั่งเซิร์ฟเวอร์ ที่สร้างการตอบสนองต่อคำขอจาก ไคลเอนต์ส่วนใหญ่แล้วหมายถึงการสร้าง หน้า HTMLเพื่อตอบสนองต่อ คำขอ HTTPแม้ว่าจะมีคลาสเซิร์ฟเล็ตมาตรฐานอื่นๆ อีกหลายคลาสให้เลือกใช้ เช่น สำหรับการสื่อสาร WebSocket
API ของ Java servlet ได้ถูกแทนที่ในระดับหนึ่ง (แต่ยังคงใช้ภายใต้ประทุน) ด้วยเทคโนโลยี Java มาตรฐานสองอย่างสำหรับเว็บเซอร์วิส:
- Java API สำหรับ RESTful Web Services (JAX-RS 2.0) มีประโยชน์สำหรับบริการ AJAX, JSON และ REST และ
- Java API สำหรับบริการเว็บ XML (JAX-WS) มีประโยชน์สำหรับบริการเว็บSOAP
การใช้งานทั่วไปของ API เหล่านี้บนเซิร์ฟเวอร์แอปพลิเคชันหรือคอนเทนเนอร์ Servlet จะใช้เซิร์ฟเล็ตมาตรฐานสำหรับจัดการการโต้ตอบทั้งหมดด้วย คำขอและการตอบสนอง HTTPที่มอบหมายให้กับวิธีการบริการเว็บสำหรับตรรกะทางธุรกิจจริง
หน้า JavaServer
JavaServer Pages ( JSP ) เป็นส่วนประกอบ Java EE ฝั่งเซิร์ฟเวอร์ ที่สร้างการตอบสนองโดยทั่วไป คือหน้าHTML ต่อ คำขอHTTP จาก ไคลเอนต์ JSP ฝังโค้ด Java ในหน้า HTML โดยใช้ตัวคั่น <%
พิเศษ และ%>
JSP จะถูกคอมไพล์เป็นเซิร์ฟเล็ต Java ซึ่งเป็นแอปพลิเคชัน Java ในตัวของมันเองในครั้งแรกที่เข้าถึง หลังจากนั้น เซิร์ฟเล็ตที่สร้างขึ้นจะสร้างการตอบสนอง[62]
แอพพลิเคชั่นสวิง
Swingเป็นไลบรารีอินเทอร์เฟซผู้ใช้แบบกราฟิกสำหรับแพลตฟอร์ม Java SE คุณสามารถกำหนดรูปลักษณ์และความรู้สึกที่แตกต่างกันได้ผ่าน ระบบ รูปลักษณ์และความรู้สึกแบบปลั๊กอินของ Swing โคลนของWindows , GTK+และMotifจัดทำโดย Sun นอกจากนี้ Appleยังจัดเตรียม รูปลักษณ์และความรู้สึก แบบ AquaสำหรับmacOS อีกด้วย แม้ว่าการใช้งานรูปลักษณ์และความรู้สึกเหล่านี้ก่อนหน้านี้อาจถือว่าขาดหายไป แต่ Swing ใน Java SE 6 แก้ไขปัญหานี้โดยใช้รูทีนการวาด วิดเจ็ต GUIดั้งเดิมของแพลตฟอร์มพื้นฐาน[63]
แอปพลิเคชัน JavaFX
JavaFXเป็นแพลตฟอร์มซอฟต์แวร์สำหรับการสร้างและส่งมอบแอปพลิเคชันเดสก์ท็อปรวมถึงแอปพลิเคชันเว็บที่มีฟังก์ชันครบครันซึ่งสามารถทำงานได้บนอุปกรณ์หลากหลาย JavaFX มีวัตถุประสงค์เพื่อแทนที่Swing เป็นไลบรารี GUIมาตรฐานสำหรับJava SEแต่ตั้งแต่ JDK 11 JavaFX ไม่ได้อยู่ใน JDK หลัก แต่ในโมดูลแยกต่างหากแทน[64] JavaFX รองรับคอมพิวเตอร์เดสก์ท็อปและเว็บเบราว์เซอร์บนMicrosoft Windows , LinuxและmacOS JavaFX ไม่รองรับรูปลักษณ์และความรู้สึกของระบบปฏิบัติการดั้งเดิม[65]
ยาสามัญ
ในปี 2004 เจเนอริกถูกเพิ่มเข้าไปในภาษา Java เป็นส่วนหนึ่งของ J2SE 5.0 ก่อนที่จะมีการนำเจเนอริกมาใช้ การประกาศตัวแปรแต่ละตัวจะต้องมีประเภทเฉพาะ ตัวอย่างเช่น สำหรับคลาสคอนเทนเนอร์ นี่เป็นปัญหาเพราะไม่มีวิธีง่ายๆ ในการสร้างคอนเทนเนอร์ที่ยอมรับเฉพาะประเภทของอ็อบเจกต์ คอนเทนเนอร์จะต้องทำงานกับประเภทย่อยทั้งหมดของคลาสหรืออินเทอร์เฟซ ซึ่งโดยปกติแล้วObject
หรือจะต้องสร้างคลาสคอนเทนเนอร์ที่แตกต่างกันสำหรับแต่ละคลาสที่บรรจุอยู่ เจเนอริกช่วยให้ตรวจสอบประเภทได้ในขณะคอมไพล์โดยไม่ต้องสร้างคลาสคอนเทนเนอร์จำนวนมาก ซึ่งแต่ละคลาสมีโค้ดที่แทบจะเหมือนกันทุกประการ นอกจากจะช่วยให้โค้ดมีประสิทธิภาพมากขึ้นแล้ว ยังป้องกันไม่ให้เกิดข้อยกเว้นรันไทม์บางอย่างโดยออกข้อผิดพลาดขณะคอมไพล์ หาก Java ป้องกันไม่ClassCastException
ให้เกิดข้อผิดพลาดประเภทรันไทม์ทั้งหมด ก็จะถือว่าปลอดภัย
สำหรับประเภท
ในปี 2016 ระบบประเภทของ Java ได้รับการพิสูจน์แล้ว ว่า ไม่สมเหตุสมผลเนื่องจากสามารถใช้เจเนอริกเพื่อสร้างคลาสและเมธอดที่อนุญาตให้กำหนดอินสแตนซ์ของคลาสหนึ่งให้กับตัวแปรของคลาสอื่นที่ไม่เกี่ยวข้องได้ โค้ดดังกล่าวได้รับการยอมรับจากคอมไพเลอร์ แต่ล้มเหลวในระหว่างการทำงานโดยมีข้อยกเว้นการแคสต์คลาส[66]
การวิจารณ์
คำติชมที่มุ่งเป้าไปที่ Java ได้แก่ การนำ generics มาใช้[67]ความเร็ว[50]การจัดการตัวเลขที่ไม่มีเครื่องหมาย[68]การนำเลขคณิตแบบจุดลอยตัวมาใช้[69]และประวัติช่องโหว่ด้านความปลอดภัยใน HotSpot ของการใช้งาน Java VM หลัก[ 70 ] นักพัฒนาได้วิพากษ์วิจารณ์ความซับซ้อนและความละเอียดของ Java Persistence API (JPA) ซึ่งเป็นส่วนมาตรฐานของ Java EE ซึ่งทำให้มีการนำการแยกส่วนระดับสูงมาใช้เพิ่มมากขึ้น เช่น Spring Data JPA ซึ่งมีเป้าหมายเพื่อลดความซับซ้อนของการดำเนินการฐานข้อมูลและลดโค้ดสำเร็จรูป ความนิยมที่เพิ่มขึ้นของเฟรมเวิร์กดังกล่าวชี้ให้เห็นถึงข้อจำกัดในการใช้งานง่ายของการใช้งาน JPA มาตรฐานสำหรับการพัฒนา Java สมัยใหม่[71]
ห้องสมุดชั้นเรียน
Java Class Libraryคือไลบรารีมาตรฐานที่พัฒนาขึ้นเพื่อรองรับการพัฒนาแอปพลิเคชันใน Java ไลบรารีนี้ได้รับการควบคุมโดยOracleร่วมกับผู้อื่นผ่านโปรแกรมJava Community Process [72]บริษัทหรือบุคคลที่เข้าร่วมในกระบวนการนี้สามารถมีอิทธิพลต่อการออกแบบและพัฒนา API ได้ กระบวนการนี้ได้กลายเป็นประเด็นถกเถียงในช่วงทศวรรษ 2010 [73]ไลบรารีคลาสประกอบด้วยคุณลักษณะต่างๆ เช่น:
- ห้องสมุดหลัก ซึ่งได้แก่:
- อินพุต/เอาต์พุต (I/O หรือ IO) [74]และI/O ที่ไม่บล็อค (NIO) หรือ IO/NIO [75]
- การสร้างเครือข่าย[76] ( ตัวแทนผู้ใช้ใหม่(ไคลเอนต์ HTTP) ตั้งแต่ Java 11 [77] )
- การโปรแกรมการสะท้อนกลับ (reflection)
- การคำนวณพร้อมกัน (concurrency) [74]
- ยาสามัญ
- การเขียนสคริปต์, คอมไพเลอร์
- การเขียนโปรแกรมเชิงฟังก์ชัน ( Lambda , สตรีมมิ่ง)
- ไลบรารีคอลเลกชันที่ใช้โครงสร้างข้อมูลเช่นรายการพจนานุกรมต้นไม้ชุดคิวและคิวสองปลายหรือสแต็ก[ 78 ]
- ไลบรารีการประมวลผล XML (การแยกวิเคราะห์ การแปลง การตรวจสอบ)
- ความปลอดภัย[79]
- ห้องสมุดการแปลและการแปลสากล[80]
- ไลบรารีการรวมข้อมูล ซึ่งช่วยให้ผู้เขียนแอปพลิเคชันสามารถสื่อสารกับระบบภายนอกได้ ไลบรารีเหล่านี้ได้แก่:
- API ของJava Database Connectivity (JDBC) สำหรับการเข้าถึงฐานข้อมูล
- Java Naming and Directory Interface (JNDI) สำหรับการค้นหาและค้นพบ
- การเรียกใช้เมธอดระยะไกลของ Java (RMI) และCommon Object Request Broker Architecture (CORBA) สำหรับการพัฒนาแอปพลิเคชันแบบกระจาย
- Java Management Extensions (JMX) สำหรับการจัดการและตรวจสอบแอปพลิเคชัน
- ไลบรารี อินเทอร์เฟซผู้ใช้ซึ่งรวมถึง:
- ชุดเครื่องมือ Abstract Window (AWT ) แบบหนักหน่วงหรือดั้งเดิมซึ่งจัดให้มี ส่วนประกอบ ของ GUIวิธีการในการจัดวางส่วนประกอบเหล่านั้น และวิธีการจัดการเหตุการณ์จากส่วนประกอบเหล่านั้น
- ไลบรารี Swing (น้ำหนักเบา) ซึ่งสร้างขึ้นบน AWT แต่ให้การใช้งาน (ที่ไม่ใช่แบบดั้งเดิม) ของวิดเจ็ต AWT
- API สำหรับการบันทึก การประมวลผล และการเล่นเสียง
- จาวาเอฟเอ็กซ์
- การใช้งานเครื่องเสมือน Java ที่ขึ้นอยู่กับแพลตฟอร์มซึ่งเป็นวิธีการที่ใช้ในการดำเนินการไบต์โค้ดของไลบรารี Java และแอปพลิเคชันของบริษัทอื่น
- ปลั๊กอินที่ช่วยให้สามารถรันแอพเพล็ต ในเว็บเบราว์เซอร์ได้
- Java Web Startซึ่งช่วยให้สามารถแจกจ่ายแอปพลิเคชัน Java ให้กับผู้ใช้ปลายทาง ได้อย่างมีประสิทธิภาพ ผ่านอินเทอร์เน็ต
- การออกใบอนุญาตและเอกสารประกอบ
เอกสารประกอบ
Javadoc เป็นระบบเอกสารที่ครอบคลุมซึ่งสร้างขึ้นโดยSun Microsystemsโดยระบบนี้ช่วยให้ผู้พัฒนาสามารถจัดทำเอกสารโค้ดของตนได้อย่างเป็นระเบียบ ความคิดเห็นใน Javadoc จะมีเครื่องหมายดอกจันพิเศษที่จุดเริ่มต้น กล่าวคือ ตัวแบ่งคือ/**
และ*/
ในขณะที่ความคิดเห็นหลายบรรทัดปกติใน Java จะคั่นด้วย/*
และ*/
และความคิดเห็นบรรทัดเดียวจะเริ่มต้นด้วย//
[ 81]
การนำไปปฏิบัติ
Oracle Corporationเป็นเจ้าของการใช้งานอย่างเป็นทางการของแพลตฟอร์ม Java SE เนื่องจากได้เข้าซื้อSun Microsystemsเมื่อวันที่ 27 มกราคม 2010 การใช้งานนี้อิงตามการใช้งาน Java ดั้งเดิมของ Sun การใช้งานของ Oracle พร้อมใช้งานสำหรับWindows , macOS , LinuxและSolarisเนื่องจาก Java ขาดมาตรฐานอย่างเป็นทางการที่ได้รับการยอมรับจากEcma International , ISO/IEC, ANSI หรือองค์กรมาตรฐานบุคคลที่สามอื่นๆ การใช้งานของ Oracle จึงถือเป็น มาตรฐาน โดย พฤตินัย
การใช้งาน Oracle จะถูกบรรจุในแพ็คเกจสองแบบที่แตกต่างกัน: Java Runtime Environment (JRE) ซึ่งประกอบด้วยส่วนต่างๆ ของแพลตฟอร์ม Java SE ที่จำเป็นสำหรับการรันโปรแกรม Java และมีไว้สำหรับผู้ใช้ปลายทาง และJava Development Kit (JDK) ซึ่งมีไว้สำหรับนักพัฒนาซอฟต์แวร์และมีเครื่องมือพัฒนา เช่นคอมไพเลอร์ Java , Javadoc , Jarและดีบักเกอร์ Oracle ยังได้เปิดตัวGraalVMซึ่งเป็นคอมไพเลอร์และอินเทอร์พรีเตอร์ Java แบบไดนามิกประสิทธิภาพสูง อีกด้วย
OpenJDKเป็นการนำ Java SE ไปใช้อีกแบบหนึ่งซึ่งได้รับอนุญาตภายใต้ GNU GPL การนำ OpenJDK ไปใช้เริ่มต้นเมื่อ Sun เริ่มเผยแพร่ซอร์สโค้ด Java ภายใต้ GPL ตั้งแต่ Java SE 7 เป็นต้นมา OpenJDK ถือเป็นการนำ Java มาใช้อ้างอิงอย่างเป็นทางการ
เป้าหมายของ Java คือการทำให้การใช้งาน Java ทั้งหมดเข้ากันได้ ในอดีต ใบอนุญาตเครื่องหมายการค้าของ Sun สำหรับการใช้งานแบรนด์ Java ยืนกรานว่าการใช้งานทั้งหมดต้องเข้ากันได้ส่งผลให้เกิดข้อพิพาททางกฎหมายกับMicrosoftหลังจากที่ Sun อ้างว่าการใช้งานของ Microsoft ไม่รองรับการเรียกใช้เมธอดระยะไกล (RMI) ของ Java หรือJava Native Interface (JNI) และได้เพิ่มฟีเจอร์เฉพาะแพลตฟอร์มของตนเองเข้าไปด้วย Sun ฟ้องร้องในปี 1997 และในปี 2001 ชนะคดีและได้รับเงินชดเชย 20 ล้านเหรียญสหรัฐ รวมทั้งคำสั่งศาลในการบังคับใช้เงื่อนไขใบอนุญาตจาก Sun [82]เป็นผลให้ Microsoft ไม่จัดส่ง Java ร่วมกับWindows อีก ต่อไป
Java ที่ไม่ขึ้นกับแพลตฟอร์มถือเป็นสิ่งสำคัญสำหรับJava EEและจำเป็นต้องมีการตรวจสอบที่เข้มงวดยิ่งขึ้นเพื่อรับรองการใช้งาน สภาพแวดล้อมนี้ช่วยให้สามารถใช้แอปพลิเคชันฝั่งเซิร์ฟเวอร์แบบพกพาได้
ใช้ภายนอกแพลตฟอร์ม Java
ภาษาการเขียนโปรแกรม Java ต้องมีแพลตฟอร์มซอฟต์แวร์จึงจะสามารถรันโปรแกรมที่คอมไพล์แล้วได้
Oracle เป็นผู้จัดหาแพลตฟอร์ม Javaสำหรับใช้กับ Java SDK ของ Androidเป็นแพลตฟอร์มซอฟต์แวร์ทางเลือกที่ใช้สำหรับการพัฒนาแอปพลิเคชัน Androidด้วยระบบ GUI ของตัวเอง เป็นหลัก
แอนดรอยด์
ภาษา Java ถือเป็นเสาหลักที่สำคัญในAndroidซึ่งเป็นระบบปฏิบัติการมือถือโอเพ่นซอร์ส แม้ว่า Android ที่สร้างขึ้นบนเคอร์เนล Linuxจะเขียนด้วย C เป็นส่วนใหญ่ แต่Android SDKจะใช้ภาษา Java เป็นพื้นฐานสำหรับแอปพลิเคชัน Android แต่ไม่ได้ใช้ GUI, SE, ME หรือมาตรฐาน Java อื่นๆ ที่ได้รับการยอมรับ[83]ภาษาไบต์โค้ดที่รองรับโดย Android SDK นั้นเข้ากันไม่ได้กับไบต์โค้ด Java และทำงานบนเครื่องเสมือนของตัวเองซึ่งปรับให้เหมาะสมสำหรับอุปกรณ์ที่มีหน่วยความจำต่ำ เช่นสมาร์ทโฟนและคอมพิวเตอร์แท็บเล็ตขึ้นอยู่กับเวอร์ชัน 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 [84]ผู้พิพากษาประจำเขตWilliam Alsupตัดสินเมื่อวันที่ 31 พฤษภาคม 2012 ว่า API ไม่สามารถมีลิขสิทธิ์ได้[85]แต่คำตัดสินนี้ถูกพลิกกลับโดยศาลอุทธรณ์ของสหรัฐอเมริกาสำหรับเขตศาลกลางในเดือนพฤษภาคม 2014 [86]เมื่อวันที่ 26 พฤษภาคม 2016 ศาลแขวงได้ตัดสินให้ Google ชนะคดี โดยตัดสินว่าการละเมิดลิขสิทธิ์ของ Java API ใน Android ถือเป็นการใช้งานโดยชอบธรรม[87]ในเดือนมีนาคม 2018 คำตัดสินนี้ถูกพลิกกลับโดยศาลอุทธรณ์ซึ่งส่งคดีการตัดสินค่าเสียหายไปยังศาลรัฐบาลกลางในซานฟรานซิสโก[88] Google ยื่นคำร้องขอให้ศาลฎีกาของสหรัฐอเมริกาพิจารณาคดีในเดือนมกราคม 2019 เพื่อท้าทายคำตัดสิน 2 กรณีที่ศาลอุทธรณ์ตัดสินให้ Oracle ชนะคดี[89]เมื่อวันที่ 5 เมษายน 2021 ศาลได้ตัดสิน 6 ต่อ 2 เสียงให้ Google ชนะคดี โดยให้ถือว่าการใช้ Java API ของ Google ถือเป็นการใช้งานโดยชอบธรรมอย่างไรก็ตาม ศาลปฏิเสธที่จะตัดสินเรื่องลิขสิทธิ์ของ API โดยเลือกที่จะตัดสินโดยพิจารณาว่า Java API เป็นลิขสิทธิ์ "เพียงเพื่อประโยชน์ในการโต้แย้งเท่านั้น" [90]
ดูเพิ่มเติม
- ซี#
- ซี++
- Dalvik ใช้ใน Android เวอร์ชันเก่า ถูกแทนที่ด้วย Android Runtimeที่ไม่ใช่ JIT
- การประมวลผลแบบกระจายที่มีความหลากหลายใน Java
- รายชื่อ Java API
- รายชื่อเฟรมเวิร์ก Java
- รายชื่อภาษา JVM
- รายชื่อเครื่องเสมือน Java
- การเปรียบเทียบระหว่าง C# และ Java
- การเปรียบเทียบระหว่าง Java และ C++
- การเปรียบเทียบภาษาการเขียนโปรแกรม
อ้างอิง
- ^ Binstock, Andrew (20 พฤษภาคม 2015). "20 ปีแห่งนวัตกรรมของ Java". Forbes . เก็บถาวรจากแหล่งเดิมเมื่อ 14 มีนาคม 2016. สืบค้นเมื่อ18 มีนาคม 2016 .
- ^ abcd Barbara LiskovกับJohn Guttag (2000). การพัฒนาโปรแกรมใน Java – การแยกส่วน ข้อกำหนด และการออกแบบเชิงวัตถุสหรัฐอเมริกา แอดดิสัน เวสลีย์ISBN 978-0-201-65768-5-
- ^ Chaudhary, Harry H. (28 กรกฎาคม 2014). "Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans". เก็บถาวรจากแหล่งเดิมเมื่อ 29 กันยายน 2023 . สืบค้นเมื่อ29 พฤษภาคม 2016 .
- ^ Java 5.0 เพิ่มคุณลักษณะภาษาใหม่หลายประการ ( for loop ที่ปรับปรุงใหม่ , autoboxing , varargsและannotations ) หลังจากที่นำมาใช้ใน ภาษา C# ที่คล้ายคลึงกัน (และเป็นคู่แข่งกัน) [1] เก็บถาวรเมื่อ 19 มีนาคม 2011 ที่Wayback Machine [2] เก็บถาวรเมื่อ 7 มกราคม 2006 ที่Wayback Machine
- ^ Gosling, James; McGilton, Henry (พฤษภาคม 1996). "The Java Language Environment". เก็บถาวรจากแหล่งเดิมเมื่อ 6 พฤษภาคม 2014 . สืบค้นเมื่อ6 พฤษภาคม 2014 .
- ^ กอสลิง, เจมส์; จอย, บิล; สตีล, กาย; บราชา, กิลาด. "ข้อกำหนดภาษา Java ฉบับที่ 2". เก็บถาวรจากแหล่งเดิมเมื่อ 5 สิงหาคม 2011. สืบค้นเมื่อ 8 กุมภาพันธ์ 2008 .
- ^ "AZ ของภาษาการเขียนโปรแกรม: Modula-3". Computerworld. เก็บถาวรจากแหล่งเดิมเมื่อ 5 มกราคม 2009 . สืบค้นเมื่อ9 มิถุนายน 2010 .
- ^ Niklaus Wirthกล่าวในโอกาสสาธารณะหลายครั้ง เช่น ในการบรรยายที่พิพิธภัณฑ์โพลีเทคนิค มอสโก ในเดือนกันยายน พ.ศ. 2548 (มีคำบอกเล่าจากผู้เห็นเหตุการณ์โดยตรงเป็นภาษารัสเซียหลายรายการ เช่น รายการที่มีการบันทึกเสียง: Filippova, Elena (22 กันยายน 2548). "การบรรยายของ Niklaus Wirth ที่พิพิธภัณฑ์โพลีเทคนิคในมอสโก". เก็บถาวรจากแหล่งเดิมเมื่อ 1 ธันวาคม 2563 . สืบค้นเมื่อ20 พฤศจิกายน 2554 .) ซึ่งทีมออกแบบ Sun Java ได้อนุญาตให้ใช้ซอร์สโค้ดคอมไพเลอร์ Oberon เป็นเวลาหลายปีก่อนที่ Java จะเปิดตัว และตรวจสอบแล้วพบว่า มีความกะทัดรัด (โดยสัมพันธ์กัน) ความปลอดภัยของประเภท การรวบรวมขยะ ไม่มีการสืบทอดหลายคลาส - คุณลักษณะการออกแบบโดยรวมที่สำคัญทั้งหมดเหล่านี้มีร่วมกันใน Java และ Oberon
- ^ Patrick Naughtonอ้างถึงObjective-Cว่ามีอิทธิพลอย่างมากต่อการออกแบบภาษาการเขียนโปรแกรม Java โดยระบุว่าอนุพันธ์โดยตรงที่สำคัญได้แก่ อินเทอร์เฟซ Java (ซึ่งได้มาจากโปรโตคอล ของ Objective-C ) และคลาสตัวห่อแบบดั้งเดิม [3] เก็บถาวรเมื่อ 13 กรกฎาคม 2011 ที่เวย์แบ็กแมชชีน
- ^ TechMetrix Research (1999). "History of Java" (PDF) . รายงาน Java Application Servers . เก็บถาวรจากแหล่งเดิม(PDF)เมื่อวันที่ 29 ธันวาคม 2010
โปรเจ็กต์นี้ดำเนินการภายใต้ชื่อ
green
และภาษาที่ใช้นั้นอิงตามโมเดลเก่าของ
UCSD Pascal
ซึ่งทำให้สามารถสร้างโค้ดเชิงตีความได้
- ^ "การสนทนากับเจมส์ กอสลิง – ACM Queue" Queue.acm.org 31 สิงหาคม 2004 เก็บถาวรจากแหล่งเดิมเมื่อ 16 กรกฎาคม 2015 สืบค้นเมื่อ9 มิถุนายน 2010
- ^ ทีมภาษา Java เกี่ยวกับ "ผู้แทน" ของ Microsoft (เอกสารเผยแพร่) JavaSoft, Sun Microsystems, Inc. เก็บถาวรจากแหล่งเดิมเมื่อ 27 มิถุนายน 2012
ในช่วงฤดูร้อนของปี 1996 Sun กำลังออกแบบต้นแบบของสิ่งที่ปัจจุบันคือโมเดลเหตุการณ์ของสถาปัตยกรรมส่วนประกอบ AWT และ JavaBeans Borland มีส่วนสนับสนุนอย่างมากในกระบวนการนี้ เราพิจารณา Delphi Object Pascal อย่างละเอียดถี่ถ้วนและสร้างต้นแบบการทำงานของการอ้างอิงเมธอดที่ถูกผูกไว้เพื่อทำความเข้าใจปฏิสัมพันธ์ของการอ้างอิงกับภาษาการเขียนโปรแกรม Java และ API
- ^ "Chapel spec (Acknowledgements)" (PDF) . Cray Inc. 1 ตุลาคม 2015. เก็บถาวร(PDF)จากแหล่งเดิมเมื่อ 5 กุมภาพันธ์ 2016 . สืบค้นเมื่อ14 มกราคม 2016 .
- ^ "Gambas Documentation Introduction". Gambas Website. เก็บถาวรจากแหล่งเดิมเมื่อ 9 ตุลาคม 2017 . สืบค้นเมื่อ9 ตุลาคม 2017 .
- ^ "Facebook Q&A: Hack นำการพิมพ์แบบคงที่มาสู่โลกของ PHP" InfoWorld . 26 มีนาคม 2014. เก็บถาวรจากแหล่งเดิมเมื่อ 13 กุมภาพันธ์ 2015 . สืบค้นเมื่อ11 มกราคม 2015 .
- ^ "เขียนครั้งเดียว รันที่ไหนก็ได้?" Computer Weekly . 2 พฤษภาคม 2002. เก็บถาวรจากแหล่งเดิมเมื่อ 13 สิงหาคม 2021 . สืบค้นเมื่อ27 กรกฎาคม 2009 .
- ^ abc "1.2 Design Goals of the Java Programming Language". Oracle. 1 มกราคม 1999. เก็บถาวรจากแหล่งเดิมเมื่อ 23 มกราคม 2013 . สืบค้นเมื่อ14 มกราคม 2013 .
- ^ Melanson, Mike (9 สิงหาคม 2022). "Don't call it a comeback: Why Java is still champ". GitHub . เก็บถาวรจากแหล่งเดิมเมื่อ 25 สิงหาคม 2023. สืบค้นเมื่อ15 ตุลาคม 2023 .
- ^ "ภาษาโปรแกรมยอดนิยม". สถานะของ Octoverse . GitHub . เก็บถาวรจากแหล่งเดิมเมื่อ 2 สิงหาคม 2023 . สืบค้นเมื่อ15 ตุลาคม 2023 .
- ^ McMillan, Robert (1 สิงหาคม 2013). "Is Java Losing Its Mojo?" . Wired . เก็บถาวรจากแหล่งเดิมเมื่อ 15 กุมภาพันธ์ 2017 . สืบค้นเมื่อ15 ตุลาคม 2023 .
- ^ Byous, Jon (c. 1998). "เทคโนโลยี Java: ยุคแรกๆ". Sun Developer Network . Sun Microsystems . เก็บถาวรจากแหล่งเดิมเมื่อ 20 เมษายน 2005. สืบค้นเมื่อ22 เมษายน 2005 .
- ^ การเขียนโปรแกรมเชิงวัตถุ"ประวัติศาสตร์ของเทคโนโลยี Java". Sun Developer Network . c. 1995. เก็บถาวรจากแหล่งเดิมเมื่อ 10 กุมภาพันธ์ 2010 . สืบค้นเมื่อ30 เมษายน 2010 .
- ^ Murphy, Kieron (4 ตุลาคม 1996). "So why did they decide to call it Java?". JavaWorld . เก็บถาวรจากแหล่งเดิมเมื่อ 13 กรกฎาคม 2020 . สืบค้นเมื่อ13 กรกฎาคม 2020 .
- ^ Kabutz, Heinz; Once Upon an Oak เก็บถาวร 13 เมษายน 2550 ที่เวย์แบ็กแมชชีน . Artima. สืบค้นเมื่อ 29 เมษายน 2550.
- ^ "JAVASOFT SHIPS JAVA 1.0". เก็บถาวรจากแหล่งเดิมเมื่อ 10 มีนาคม 2550 . สืบค้นเมื่อ13 พฤษภาคม 2561 .
- ^ การเขียนโปรแกรมเชิงวัตถุด้วย Java: สิ่งสำคัญและแอปพลิเคชัน Tata McGraw-Hill Education หน้า 34
- ^ "JSG – Java Study Group". open-std.org . เก็บถาวรจากแหล่งเดิมเมื่อ 25 สิงหาคม 2549 . สืบค้นเมื่อ2 สิงหาคม 2549 .
- ^ "Why Java Was – Not – Standardized Twice" (PDF) . เก็บถาวร(PDF)จากแหล่งเดิมเมื่อ 13 มกราคม 2014 . สืบค้นเมื่อ3 มิถุนายน 2018 .
- ^ "ECMA คืออะไร และเหตุใด Microsoft จึงใส่ใจ" ZDNet . เก็บถาวรจากแหล่งเดิมเมื่อ 6 พฤษภาคม 2014 . สืบค้นเมื่อ 6 พฤษภาคม 2014 .
- ^ "เว็บไซต์ Java Community Process" Jcp.org 24 พฤษภาคม 2010 เก็บถาวรจากแหล่งเดิมเมื่อ 8 สิงหาคม 2006 สืบค้นเมื่อ9 มิถุนายน 2010
- ^ "JAVAONE: Sun – The bulk of Java is open sourced". GrnLight.net. เก็บถาวรจากแหล่งเดิมเมื่อ 27 พฤษภาคม 2014 . สืบค้นเมื่อ26 พฤษภาคม 2014 .
- ^ "Sun's Evolving Role as Java Evangelist". O'Reilly Media . เก็บถาวรจากแหล่งเดิมเมื่อ 15 กันยายน 2010 . สืบค้นเมื่อ2 สิงหาคม 2009 .
- ^ "Oracle และ Java" oracle.com . Oracle Corporation. เก็บถาวรจากแหล่งเดิมเมื่อ 31 มกราคม 2010 . สืบค้นเมื่อ23 สิงหาคม 2010 .
Oracle ได้เป็นผู้สนับสนุนหลักและสำคัญด้าน Java มาตั้งแต่เริ่มก่อตั้งในปี 1995 และรับบทบาทใหม่ในฐานะผู้ดูแลเทคโนโลยี Java พร้อมความมุ่งมั่นอย่างไม่ลดละในการส่งเสริมชุมชนแห่งการมีส่วนร่วมและความโปร่งใส
- ^ กอสลิง, เจมส์ (9 เมษายน 2010). "ถึงเวลาต้องก้าวต่อไป..." บนถนนสายใหม่ . เก็บถาวรจากแหล่งเดิมเมื่อ 5 พฤศจิกายน 2010 . สืบค้นเมื่อ16 พฤศจิกายน 2011 .
- ^ Topic, Dalibor. "การย้ายไปยังเว็บที่ปราศจากปลั๊กอิน". เก็บถาวรจากแหล่งเดิมเมื่อ 16 มีนาคม 2016 . สืบค้นเมื่อ15 มีนาคม 2016 .
- ^ "เรียนรู้เกี่ยวกับเทคโนโลยี Java" Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 24 พฤศจิกายน 2011 . สืบค้นเมื่อ21 พฤศจิกายน 2011 .
- ^ "เหตุใดฉันจึงควรถอนการติดตั้ง Java เวอร์ชันเก่าออกจากระบบของฉัน" Oracle เก็บถาวรจากแหล่งเดิมเมื่อ 12 กุมภาพันธ์ 2018 . สืบค้นเมื่อ24 กันยายน 2021 .
- ^ "Oracle Java SE Support Roadmap". Oracle. 13 กันยายน 2021. เก็บถาวรจากแหล่งเดิมเมื่อ 19 กันยายน 2021 . สืบค้นเมื่อ18 กันยายน 2021 .
- ^ "Temurin™ Support; Adoptium". adoptium.net . เก็บถาวรจากแหล่งเดิมเมื่อ 29 มีนาคม 2024 . สืบค้นเมื่อ29 มีนาคม 2024 .
- ^ "JAVASOFT SHIPS JAVA 1.0". sun.com . เก็บถาวรจากแหล่งเดิมเมื่อ 10 มีนาคม 2550 . สืบค้นเมื่อ 5 กุมภาพันธ์ 2551 .
- ^ Chander, Sharat. "แนะนำ Java SE 11". oracle.com . เก็บถาวรจากแหล่งเดิมเมื่อ 26 กันยายน 2018 . สืบค้นเมื่อ26 กันยายน 2018 .
- ^ "การมาถึงของ Java 15!" Oracle . 15 กันยายน 2020. เก็บถาวรจากแหล่งเดิมเมื่อ 16 กันยายน 2020 . สืบค้นเมื่อ15 กันยายน 2020 .
- ^ "JDK 21". openjdk.org . เก็บถาวรจากแหล่งเดิมเมื่อ 20 กันยายน 2023 . สืบค้นเมื่อ20 กันยายน 2023 .
- ^ "ภาพรวมของ Java Card" Oracle Technology Network . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 7 มกราคม 2015 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ "Java Platform, Micro Edition (Java ME)". Oracle Technology Network . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 4 มกราคม 2015 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ "Java SE". Oracle Technology Network . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 24 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ "Java Platform, Enterprise Edition (Java EE)". Oracle Technology Network . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 17 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ "เจาะลึกคอมไพเลอร์ Java JIT ใหม่ – Graal | Baeldung". www.baeldung.com . 6 สิงหาคม 2021. เก็บถาวรจากแหล่งเดิมเมื่อ 28 ตุลาคม 2021 . สืบค้นเมื่อ13 ตุลาคม 2021 .
- ^ "Java Virtual Machine (Java) ขึ้นอยู่กับแพลตฟอร์มหรือไม่ขึ้นอยู่กับแพลตฟอร์ม? ข้อได้เปรียบของการใช้ JVM และการใช้ Java เป็นภาษาที่แปลคืออะไร?" บทสัมภาษณ์โปรแกรมเมอร์ เก็บถาวรจากแหล่งเดิมเมื่อ 19 มกราคม 2015 . สืบค้นเมื่อ19 มกราคม 2015 .
- ^ ab Jelovic, Dejan. "ทำไม Java ถึงช้ากว่า C++ เสมอ". เก็บถาวรจากแหล่งเดิมเมื่อ 11 กุมภาพันธ์ 2551 . สืบค้นเมื่อ15 กุมภาพันธ์ 2551 .
- ^ Hundt, Robert. "Loop Recognition in C++/Java/Go/Scala" (PDF) . เก็บถาวร(PDF)จากแหล่งเดิมเมื่อ 16 พฤศจิกายน 2011 . สืบค้นเมื่อ12 กรกฎาคม 2012 .
- ^ "คอมไพเลอร์ Java แบบ Just-In-Time ของ Symantec จะรวมเข้ากับ Sun JDK 1.1" เก็บถาวรจากแหล่งเดิมเมื่อ 28 มิถุนายน 2010 . สืบค้นเมื่อ1 สิงหาคม 2009 .
- ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (22 กรกฎาคม 2017). "Noc-HMP: โปรเซสเซอร์มัลติคอร์ที่มีความหลากหลายสำหรับระบบฝังตัวที่ออกแบบใน SystemJ". ACM Transactions on Design Automation of Electronic Systems . 22 (4): 73. doi :10.1145/3073416. ISSN 1084-4309. S2CID 11150290.
- ^ abc Bloch 2018, หน้า 26-28, §ข้อ 7: กำจัดการอ้างอิงวัตถุที่ล้าสมัย
- ^ "NullPointerException". Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 6 พฤษภาคม 2014 . สืบค้นเมื่อ6 พฤษภาคม 2014 .
- ^ "ข้อยกเว้นใน Java". Artima.com. เก็บถาวรจากแหล่งเดิมเมื่อ 21 มกราคม 2009 . สืบค้นเมื่อ10 สิงหาคม 2010 .
- ^ "Java HotSpot™ Virtual Machine Performance Enhancements". Oracle.com. เก็บถาวรจากแหล่งเดิมเมื่อ 29 พฤษภาคม 2017 . สืบค้นเมื่อ26 เมษายน 2017 .
- ^ "Operator Overloading (C# vs Java)". C# สำหรับนักพัฒนา Java . Microsoft. เก็บถาวรจากแหล่งเดิมเมื่อ 7 มกราคม 2015 . สืบค้นเมื่อ10 ธันวาคม 2014 .
- ^ "การสืบทอดสถานะ การใช้งาน และประเภทข้อมูลหลายรายการ" บทช่วยสอน Java . Oracle เก็บถาวรจากแหล่งเดิมเมื่อ 9 พฤศจิกายน 2014 . สืบค้นเมื่อ10 ธันวาคม 2014 .
- ^ "Deprecated APIs, Features, and Options". Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 19 มิถุนายน 2019 . สืบค้นเมื่อ31 พฤษภาคม 2019 .
- ^ "Applet (Java Platform SE 7)". Docs . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 2 สิงหาคม 2020 . สืบค้นเมื่อ 1 พฤษภาคม 2020 .
- ^ "What Is a JSP Page? - The Java EE 5 Tutorial". docs.oracle.com . เก็บถาวรจากแหล่งเดิมเมื่อ 2 สิงหาคม 2020 . สืบค้นเมื่อ1 พฤษภาคม 2020 .
- ^ "Trail: Creating a GUI With JFC/Swing (The Java Tutorials)". docs.oracle.com . เก็บถาวรจากแหล่งเดิมเมื่อ 29 เมษายน 2020 . สืบค้นเมื่อ 1 พฤษภาคม 2020 .
- ^ "Removed from JDK 11, JavaFX 11 arrives as a standalone module". InfoWorld . 20 กันยายน 2018. Archived from the original on 14 ตุลาคม 2020. สืบค้นเมื่อ13 ตุลาคม 2020 .
- ^ "เริ่มต้นใช้งาน JavaFX: สวัสดีโลก สไตล์ JavaFX" บทช่วยสอนและเอกสาร JavaFX 2 Oracle เก็บถาวรจากแหล่งเดิมเมื่อ 2 สิงหาคม 2020 สืบค้น เมื่อ 1 พฤษภาคม 2020
- ^ "Java and Scala's Type Systems are Unsound" (PDF) . เก็บถาวร(PDF)จากแหล่งเดิมเมื่อ 28 พฤศจิกายน 2016 . สืบค้นเมื่อ20 กุมภาพันธ์ 2017 .
- ^ Arnold, Ken (27 มิถุนายน 2005). "Generics Considered Harmful". java.net. เก็บถาวรจากแหล่งเดิมเมื่อ 10 ตุลาคม 2007 . สืบค้นเมื่อ10 กันยายน 2015 .
- ^ Owens, Sean R. "Java และ unsigned int, unsigned short, unsigned byte, unsigned long ฯลฯ (หรืออีกนัยหนึ่งคือการขาดหายไปของสิ่งเหล่านี้)" เก็บถาวรจากแหล่งเดิมเมื่อ 20 กุมภาพันธ์ 2009 สืบค้นเมื่อ4 กรกฎาคม 2011
- ^ Kahan, William (1 มีนาคม 1998). "How Java's Floating-Point Hurts Everyone Everywhere – ACM 1998 Workshop on Java (Stanford)" (PDF) . วิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์ มหาวิทยาลัยแคลิฟอร์เนียที่เบิร์กลีย์ เก็บถาวร(PDF)จากแหล่งเดิมเมื่อ 5 กันยายน 2012 . สืบค้นเมื่อ4 มิถุนายน 2011 .
- ^ "คุณได้ตรวจสอบ Java แล้วหรือยัง?". เก็บถาวรจากแหล่งเดิมเมื่อ 21 กันยายน 2012 . สืบค้นเมื่อ23 ธันวาคม 2011 .
- ^ Chidester, Ashlan. Java Persistence API, Jenkins และ AWS. ISBN 9798224253951. ดึงข้อมูลเมื่อ16 กันยายน 2567 .
- ^ Cadenhead, Rogers (20 พฤศจิกายน 2017) ทำความเข้าใจวิธีการทำงานของโปรแกรม Java เก็บถาวรจากแหล่งเดิมเมื่อ 13 สิงหาคม 2021 สืบค้นเมื่อ26 มีนาคม 2019
- ^ Woolf, Nicky (26 พฤษภาคม 2016). "Google wins six-year legal battle with Oracle over Android code copyright". The Guardian . ISSN 0261-3077. เก็บถาวรจากแหล่งเดิมเมื่อ 26 มีนาคม 2019 . สืบค้น เมื่อ 26 มีนาคม 2019 .
- ^ ab Bloch 2018, หน้า 1–4, § 1 บทนำ
- ↑ "java.nio (แพลตฟอร์ม Java SE 8)" docs.oracle.com
- ^ "เครือข่าย Java". docs.oracle.com .
- ^ "HttpClient (Java SE 11 และ JDK 11)". docs.oracle.com .
- ^ "Collections Framework Overview". Java Documentation . Oracle. เก็บ ถาวรจากแหล่งเดิมเมื่อ 31 ธันวาคม 2014 สืบค้นเมื่อ18 ธันวาคม 2014
- ^ "ภาพรวมความปลอดภัยของ Java" เอกสาร Java . Oracle เก็บถาวรจากแหล่งเดิมเมื่อ 3 มกราคม 2015 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ "Trail: Internationalization". The Java Tutorials . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 31 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ "วิธีเขียนคำอธิบายประกอบเอกสารสำหรับเครื่องมือ Javadoc" Oracle Technology Network . Oracle. เก็บถาวรจากแหล่งเดิมเมื่อ 18 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
- ^ Niccolai, James (24 มกราคม 2001). "Sun, Microsoft settle Java lawsuit". JavaWorld . IDG News Service . เก็บถาวรจากแหล่งเดิมเมื่อ 14 กรกฎาคม 2020. สืบค้นเมื่อ13 กรกฎาคม 2020 .
- ^ van Gurp, Jilles (13 พฤศจิกายน 2550). "Google Android: ความประทับใจแรกพบและการวิพากษ์วิจารณ์". Javalobby . เก็บถาวรจากแหล่งเดิมเมื่อ 28 สิงหาคม 2551 . สืบค้นเมื่อ7 มีนาคม 2552 .
พูดตรงๆ ว่าฉันไม่เข้าใจว่าทำไม Google ถึงตั้งใจจะเพิกเฉยต่อการใช้งานที่มีอยู่มากมายมหาศาล สำหรับฉันแล้ว ดูเหมือนว่าจะเป็นกรณีที่ไม่ดีของ "ไม่ได้คิดค้นที่นี่" ในท้ายที่สุด สิ่งนี้จะทำให้การนำไปใช้งานช้าลง มีแพลตฟอร์ม Java มากเกินไปสำหรับโลกมือถืออยู่แล้ว และนี่ก็เป็นอีกแพลตฟอร์มหนึ่ง
- ^ Mullin, Joe (7 พฤษภาคม 2012). "Google มีความผิดฐานละเมิดลิขสิทธิ์ในคดี Oracle; ปัญหาทางกฎหมายในอนาคตกำลังจะเกิดขึ้น". Law & Disorder . Ars Technica. เก็บถาวรจากแหล่งเดิมเมื่อ 8 พฤษภาคม 2012 . สืบค้นเมื่อ 8 พฤษภาคม 2012 .
- ^ Mullin, Joe (31 พฤษภาคม 2012). "Google wins critical API ruling, Oracle's case decimated". Ars Technica . เก็บถาวรจากแหล่งเดิมเมื่อ 12 มีนาคม 2017. สืบค้นเมื่อ 1 มิถุนายน 2012 .
- ^ Rosenblatt, Seth (9 พฤษภาคม 2014). "ศาลตัดสิน Oracle ในกรณี Android อุทธรณ์สิทธิบัตร Java". CNET . เก็บถาวรจากแหล่งเดิมเมื่อ 10 พฤษภาคม 2014. สืบค้นเมื่อ10 พฤษภาคม 2014 .
- ^ Mullin, Joe (26 พฤษภาคม 2016). "Google beats Oracle—Android makes "fair use" of Java APIs". Ars Technica . เก็บถาวรจากแหล่งเดิมเมื่อ 20 มกราคม 2017. สืบค้นเมื่อ26 พฤษภาคม 2016 .
- ^ Farivar, Cyrus (27 มีนาคม 2018). ""Google's use of the Java API packages was not fair," คำตัดสินของศาลอุทธรณ์". Ars Technica . เก็บถาวรจากแหล่งเดิมเมื่อ 24 กันยายน 2019. สืบค้นเมื่อ6 สิงหาคม 2019 .
- ^ Lee, Timothy (23 เมษายน 2019). "Google asks Supreme Court to overrule disastrous ruling on API copyrights". Ars Technica . เก็บถาวรจากแหล่งเดิมเมื่อ 23 เมษายน 2019. สืบค้นเมื่อ23 เมษายน 2019 .
- ^ "Google LLC v. Oracle America, Inc 593 US ____ (2021)" (PDF) . เก็บถาวร(PDF)จากแหล่งเดิมเมื่อ 5 เมษายน 2021 . สืบค้นเมื่อ6 เมษายน 2021 .
บรรณานุกรม
- บลอค, โจชัว (2018). "Effective Java: Programming Language Guide" (ฉบับที่ 3) แอดดิสัน-เวสลีย์ISBN 978-0-13-468599-1-
- Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014). The Java® Language Specification (PDF) (Java SE 8 ed.) Archived (PDF) from the source on ตุลาคม 21, 2014. สืบค้นเมื่อพฤศจิกายน 18, 2014 .
- กอสลิง, เจมส์; จอย, บิล ; สตีล, กาย แอล. จูเนียร์ ; บราชา, กิลาด (2005). ข้อกำหนดภาษา Java (ฉบับที่ 3). แอดดิสัน-เวสลีย์. ISBN 0-321-24678-0. เก็บถาวรจากแหล่งเดิมเมื่อวันที่ 14 กุมภาพันธ์ 2012 . สืบค้นเมื่อ 8 กุมภาพันธ์ 2019 .
- Lindholm, Tim; Yellin, Frank (1999). ข้อกำหนด Java Virtual Machine (ฉบับที่ 2). Addison-Wesley. ISBN 0-201-43294-3. เก็บถาวรจากแหล่งเดิมเมื่อวันที่ 25 กันยายน 2011 . สืบค้นเมื่อ8 กุมภาพันธ์ 2019 .