กลับไปหน้าบทความ

อ่าน 21 นาที

ภาษาจาวา (ภาษาโปรแกรม)

Java เป็น ภาษาโปรแกรม ระดับสูง อเนกประสงค์ปลอดภัย ต่อหน่วยความจำ และ เชิงวัตถุ มี จุด ประสงค์เพื่อให้ โปรแกรมเมอร์ เขียนโค้ดเพียงครั้งเดียวและรันได้ทุกที่ (WORA) [ 17 ]...

ภาษาจาวา (ภาษาโปรแกรม)

หน้าเว็บได้รับการป้องกันบางส่วน

ชวา
กระบวนทัศน์รูปแบบการเขียนโปรแกรมหลายแบบ : ทั่วไป , เชิงวัตถุ ( แบบคลาส ), เชิงฟังก์ชัน , เชิงคำสั่ง , เชิงสะท้อน , พร้อมกัน
ตระกูลJVM - โฮสต์
ออกแบบโดยเจมส์ กอสลิง
นักพัฒนาบริษัท ออราเคิล คอร์ปอเรชั่น
ปรากฏครั้งแรก23 พฤษภาคม 2538 [ 1 ] ( 23 พฤษภาคม 1995 )
เวอร์ชันเสถียร
Java SE 26 [ 2 ] แก้ไขข้อมูลนี้บนวิกิดาต้า / 17 มีนาคม 2569 ( 17 มีนาคม 2569 )
วินัยในการพิมพ์คง ที่แข็งแกร่ง ปลอดภัยระบุชื่อชัดเจน
การจัดการหน่วยความจำเก็บขยะ
นามสกุลไฟล์.java, .class , .jar , .jmod, .war
เว็บไซต์
  • oracle.com/java/
  • java.com
  • dev .java
ได้รับอิทธิพลจาก
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
  • โลโก้ Wikibooksการเขียนโปรแกรม Javaที่ Wikibooks

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
เจมส์ กอสลิงผู้สร้างภาษาจาวา ในปี 2008

เจมส์ กอสลิง , ไมค์ เชอริแดน และแพทริก นอตันได้ริเริ่มโครงการภาษา 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 ]

  1. มันต้องเรียบง่าย เป็นแบบเชิงวัตถุและคุ้นเคย
  2. ต้องมีความแข็งแกร่งและปลอดภัย
  3. ต้องใช้งานได้กับทุกสถาปัตยกรรมและพกพาได้สะดวก
  4. ต้องทำงานด้วยประสิทธิภาพสูง
  5. ต้องมีการตีความการเชื่อมโยงและความยืดหยุ่น

เวอร์ชัน

ณ เดือนมิถุนายน พ.ศ. 2569 Java 8, 11, 17, 21 และ 25 ได้รับการสนับสนุนเป็นเวอร์ชันระยะยาว (LTS) [ 40 ]

Oracle ได้ปล่อยการอัปเดตสาธารณะฟรีครั้งสุดท้ายสำหรับJava 8 LTS เวอร์ชันเก่าในเดือนมกราคม 2019 สำหรับการใช้งานเชิงพาณิชย์ แม้ว่าจะยังคงสนับสนุน Java 8 ด้วยการอัปเดตสาธารณะสำหรับการใช้งานส่วนบุคคลอย่างไม่มีกำหนดก็ตาม ผู้จำหน่ายรายอื่น เช่นAdoptiumยังคงเสนอเวอร์ชัน OpenJDK ที่รองรับระยะยาว (LTS) เวอร์ชันฟรี เวอร์ชันเหล่านี้อาจมีแพตช์ความปลอดภัยเพิ่มเติมและการแก้ไขข้อบกพร่อง[ 41 ]

เวอร์ชันหลักของ Java พร้อมวันที่วางจำหน่าย:

เวอร์ชั่นวันที่
เจดีเคเบต้าพ.ศ. 2538
เจดีเค 1.023 มกราคม พ.ศ. 2539 [ 42 ]
เจดีเค 1.1วันที่ 19 กุมภาพันธ์ พ.ศ. 2540
เจ2เอสอี 1.28 ธันวาคม พ.ศ. 2541
เจ2เอสอี 1.38 พฤษภาคม 2543
เจ2เอสอี 1.46 กุมภาพันธ์ พ.ศ. 2545
เจ2เอสอี 5.030 กันยายน 2547
Java SE 6วันที่ 11 ธันวาคม พ.ศ. 2549
Java SE 728 กรกฎาคม 2554
Java SE 8 (LTS)18 มีนาคม 2557
Java SE 921 กันยายน 2560
Java SE 1020 มีนาคม 2561
Java SE 11 (LTS)25 กันยายน 2018 [ 43 ]
Java SE 1219 มีนาคม 2562
Java SE 1317 กันยายน 2562
Java SE 1417 มีนาคม 2563
Java SE 1515 กันยายน 2020 [ 44 ]
Java SE 1616 มีนาคม 2564
Java SE 17 (LTS)14 กันยายน 2564
Java SE 1822 มีนาคม 2565
Java SE 1920 กันยายน 2022
Java SE 2021 มีนาคม 2566
Java SE 21 (LTS)19 กันยายน 2023 [ 45 ]
Java SE 2219 มีนาคม 2567
Java SE 2317 กันยายน 2567
Java SE 2418 มีนาคม 2025 [ 46 ]
Java SE 25 (LTS)16 กันยายน 2025 [ 47 ]
Java SE 2617 มีนาคม 2026 [ 48 ]

ฉบับพิมพ์

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 นี้สร้างขึ้นโดยใช้ jdeps และGephi

ไวยากรณ์ของ 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 สำหรับบริการเว็บ:

โดยทั่วไป การใช้งาน 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 ]ไลบรารีคลาสประกอบด้วยคุณสมบัติต่างๆ เช่น:

เอกสารประกอบ

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 ]

ดูเพิ่มเติม

บรรณานุกรม

  • บล็อก, โจชัว (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
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Java_(programming_language)&oldid=1359457407 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ภาษาจาวา (ภาษาโปรแกรม)

Java เป็น ภาษาโปรแกรม ระดับสูง อเนกประสงค์ปลอดภัย ต่อหน่วยความจำ และ เชิงวัตถุ มี จุด ประสงค์เพื่อให้ โปรแกรมเมอร์ เขียนโค้ดเพียงครั้งเดียวและรันได้ทุกที่ (WORA) [ 17 ]...

ประวัติศาสตร์

เจมส์ กอสลิง , ไมค์ เชอริแดน และ แพทริก นอตัน ได้ริเริ่มโครงการภาษา Java ในเดือนมิถุนายน พ.ศ.

หลักการ

มีเป้าหมายหลักห้าประการในการสร้างภาษา Java: [ 18 ]

เวอร์ชัน

ณ เดือนมิถุนายน พ.ศ. 2569 Java 8, 11, 17, 21 และ 25 ได้รับการสนับสนุนเป็น เวอร์ชันระยะยาว (LTS) [ 40 ]