Java (ภาษาโปรแกรม)

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

Java
โลโก้ภาษาโปรแกรม Java.svg
กระบวนทัศน์หลายกระบวนทัศน์ : ทั่วไป , เชิงวัตถุ ( ตามคลาส ), การทำงาน , ความจำเป็น , การไตร่ตรอง
ออกแบบโดยเจมส์ กอสลิ่ง
นักพัฒนาOracle Corporation
ปรากฏตัวครั้งแรก23 พ.ค. 2538 ; 26 ปีที่แล้ว[1] ( 1995-05-23 )
ปล่อยที่มั่นคง
Java SE 16.0.2 [2] แก้ไขบน Wikidata / 20 กรกฎาคม 2564 ; 9 วันที่ผ่านมา (20 July 2021)
วินัยการพิมพ์สถิต, แข็งแรง, ปลอดภัย , เสนอชื่อ , manifest
นามสกุลไฟล์.java, .class , .jar
เว็บไซต์oracle .com /java /
ได้รับอิทธิพลจาก
CLU , [3] Simula67 , [3] Lisp , [3] Smalltalk , [3] Ada 83 , C++ , [4] C# , [5] ไอเฟล , [6] เมซ่า , [7] Modula-3 , [8] Oberon , [9] Objective-C , [10] UCSD Pascal , [11] [12] Object Pascal [13]
ได้รับอิทธิพล
Ada 2005 , BeanShell , C# , Chapel , [14] Clojure , ECMAScript , Fantom , Gambas , [15] Groovy , Hack , [16] Haxe , J# , Kotlin , PHP , Python , Scala , Seed7 , Vala , JavaScript

Javaเป็นระดับสูง , ระดับ-based , เชิงวัตถุ ภาษาโปรแกรมที่ถูกออกแบบให้มีการดำเนินการไม่กี่อ้างอิงที่เป็นไปได้ เป็นภาษาการเขียนโปรแกรมเอนกประสงค์ที่มีจุดประสงค์เพื่อให้นักพัฒนาแอปพลิเคชัน เขียนครั้งเดียว รันได้ทุกที่ (WORA) [17]หมายความว่าโค้ด Java ที่คอมไพล์แล้วสามารถทำงานบนทุกแพลตฟอร์มที่รองรับ Java โดยไม่ต้องคอมไพล์ใหม่[18]แอปพลิเคชัน Java มักจะถูกคอมไพล์เป็นbytecodeที่สามารถรันบนJava virtual machine (JVM) ใดๆ ก็ได้โดยไม่คำนึงถึงพื้นฐานสถาปัตยกรรมคอมพิวเตอร์ . ไวยากรณ์ของJavaจะคล้ายกับCและC ++แต่มีน้อยในระดับต่ำสิ่งอำนวยความสะดวกกว่าทั้งของพวกเขา รันไทม์ของ Java มีความสามารถแบบไดนามิก (เช่น การสะท้อนและการแก้ไขโค้ดรันไทม์) ซึ่งโดยทั่วไปจะไม่พร้อมใช้งานในภาษาที่คอมไพล์แบบดั้งเดิม ในฐานะของ 2019 , Java เป็นหนึ่งในที่สุดที่นิยมการเขียนโปรแกรมภาษาในการใช้งานตามGitHub , [19] [20]โดยเฉพาะอย่างยิ่งสำหรับลูกค้าเซิร์ฟเวอร์ ใช้งานเว็บที่มีรายงาน 9 ล้านพัฒนา[21]

Java ได้รับการพัฒนามาโดยเจมส์กอสลิงที่ซันไมโครซิสเต็มส์ ( ซึ่งมีตั้งแต่ถูกซื้อกิจการโดยออราเคิล ) และเปิดตัวในปี 1995 เป็นองค์ประกอบหลักของ Sun Microsystems' แพลตฟอร์ม Javaเดิมและการอ้างอิงการใช้งานจาวาคอมไพเลอร์ , เครื่องเสมือนและห้องสมุดชั้นที่ถูกปล่อยออกมาจากดวงอาทิตย์ภายใต้ใบอนุญาตที่เป็นกรรมสิทธิ์ณ เดือนพฤษภาคม 2007 ในการปฏิบัติตามข้อกำหนดของกระบวนการ Java Communityอาทิตย์ได้relicensedที่สุดของเทคโนโลยี Java ของตนภายใต้GPL-2.0 เท่านั้นใบอนุญาต Oracle นำเสนอHotSpot .ของตัวเองJava Virtual Machine อย่างไรก็ตามการใช้งานอ้างอิงอย่างเป็นทางการคือOpenJDK JVM ซึ่งเป็นซอฟต์แวร์โอเพ่นซอร์สฟรีและนักพัฒนาส่วนใหญ่ใช้ และเป็น JVM เริ่มต้นสำหรับการกระจาย Linux เกือบทั้งหมด

ณ เดือนมีนาคม 2021 เวอร์ชันล่าสุดคือJava 16โดยมี Java 11 ซึ่งเป็นเวอร์ชันที่รองรับระยะยาว (LTS) ที่ได้รับการสนับสนุนในปัจจุบันซึ่งเผยแพร่เมื่อวันที่ 25 กันยายน 2018 Oracle ได้เปิดตัวการอัปเดตสาธารณะที่ไม่มีต้นทุนล่าสุดสำหรับJava 8เวอร์ชันเก่า LTS ในเดือนมกราคม 2019 สำหรับการใช้งานเชิงพาณิชย์ แม้ว่าจะยังรองรับ Java 8 พร้อมการอัปเดตสาธารณะสำหรับการใช้งานส่วนตัวอย่างไม่มีกำหนด ผู้จำหน่ายรายอื่นได้เริ่มเสนอOpenJDK 8 และ 11 รุ่นที่ไม่มีต้นทุนซึ่งยังคงได้รับการรักษาความปลอดภัยและการอัพเกรดอื่นๆ

Oracle (และอื่น ๆ ) ขอแนะนำให้ถอนการติดตั้ง Java เวอร์ชันที่ล้าสมัย เนื่องจากมีความเสี่ยงร้ายแรงเนื่องจากปัญหาด้านความปลอดภัยที่ไม่ได้รับการแก้ไข [22]เนื่องจากไม่รองรับ Java 9, 10, 12, 13, 14 และ 15 อีกต่อไป Oracle แนะนำให้ผู้ใช้เปลี่ยนไปใช้เวอร์ชันล่าสุดทันที (ปัจจุบันคือ Java 16) หรือรุ่น LTS

ประวัติ

Duke มาสคอตของชวา
James Goslingผู้สร้าง Java ในปี 2008
TIOBE การเขียนโปรแกรมภาษาดัชนีความนิยมกราฟจากปี 2002 ถึง 2018 Java เป็นอย่างต่อเนื่องด้านบนจากกลางปี 2015 ถึงต้นปี 2020

เจมส์ กอสลิง , ไมค์ เชอริแดน และแพทริค นอตันริเริ่มโครงการภาษาชวาในเดือนมิถุนายน พ.ศ. 2534 [23] Java เดิมได้รับการออกแบบสำหรับโทรทัศน์แบบโต้ตอบ แต่มันล้ำหน้าเกินไปสำหรับอุตสาหกรรมเคเบิลทีวีดิจิทัลในขณะนั้น[24]ภาษาเดิมเรียกว่าต้นโอ๊คตามต้นโอ๊กที่ยืนอยู่นอกสำนักงานของกอสลิง ต่อมาโครงการไปโดยชื่อสีเขียวและเปลี่ยนชื่อที่สุดJavaจากกาแฟ Javaประเภทของกาแฟจากอินโดนีเซีย [25] Gosling ออกแบบ Java ด้วยC / C++รูปแบบไวยากรณ์ที่โปรแกรมเมอร์ระบบและแอปพลิเคชันจะคุ้นเคย (26)

ซันไมโครซิสเต็มส์เปิดตัวการดำเนินการครั้งแรกที่ประชาชนเป็น Java 1.0 ในปี 1996 [27]มันสัญญาว่าเขียนครั้งเดียวทำงานได้ทุกที่ ( วร ) ฟังก์ชั่นให้ไม่มีค่าใช้จ่ายการทำงานครั้งที่นิยมแพลตฟอร์ม มีความปลอดภัยพอสมควรและมีการรักษาความปลอดภัยที่กำหนดค่าได้ อนุญาตให้มีการจำกัดการเข้าถึงเครือข่ายและไฟล์ ในไม่ช้าเว็บเบราว์เซอร์หลักๆ ก็รวมความสามารถในการเรียกใช้Java appletไว้ในหน้าเว็บ และ Java ก็ได้รับความนิยมอย่างรวดเร็ว คอมไพเลอร์ Java 1.0 ถูกเขียนใหม่ใน JavaโดยArthur van Hoffเพื่อให้สอดคล้องกับข้อกำหนดภาษา Java 1.0 อย่างเคร่งครัด (28)ด้วยการถือกำเนิดของ Java 2 (เปิดตัวครั้งแรกในชื่อ J2SE 1.2 ในเดือนธันวาคม 2541-2542) เวอร์ชันใหม่มีการกำหนดค่าหลายอย่างที่สร้างขึ้นสำหรับแพลตฟอร์มประเภทต่างๆ J2EE รวมเทคโนโลยีและ API สำหรับแอปพลิเคชันระดับองค์กรซึ่งมักจะทำงานในสภาพแวดล้อมเซิร์ฟเวอร์ ในขณะที่ J2ME นำเสนอ API ที่ปรับให้เหมาะสมสำหรับแอปพลิเคชันมือถือ เวอร์ชันเดสก์ท็อปถูกเปลี่ยนชื่อเป็น J2SE ในปี 2549 เพื่อวัตถุประสงค์ทางการตลาด Sun ได้เปลี่ยนชื่อเวอร์ชัน J2 ใหม่เป็นJava EE , Java MEและJava SEตามลำดับ

ในปี 1997 Sun Microsystems ได้ติดต่อหน่วยงานมาตรฐาน ISO/IEC JTC 1และต่อมาEcma Internationalเพื่อทำให้ Java เป็นทางการ แต่ไม่นานก็ถอนตัวออกจากกระบวนการ[29] [30] [31] Java ยังคงเป็นพฤตินัยมาตรฐานควบคุมผ่านกระบวนการ Java Community [32]ครั้งหนึ่ง ซันทำให้การใช้งาน Java ส่วนใหญ่มีให้โดยไม่คิดค่าใช้จ่าย แม้จะมีสถานะซอฟต์แวร์ที่เป็นกรรมสิทธิ์ของตนก็ตาม Sun สร้างรายได้จาก Java ผ่านการขายใบอนุญาตสำหรับผลิตภัณฑ์เฉพาะทาง เช่น Java Enterprise System

เมื่อวันที่ 13 พฤศจิกายน 2006, ดวงอาทิตย์ปล่อยออกมามาก Java เครื่องเสมือน (JVM) เป็นฟรีและเปิดแหล่งซอฟแวร์ (ฟอสส์) ภายใต้เงื่อนไขของGPL-2.0 เท่านั้นใบอนุญาต เมื่อวันที่ 8 พฤษภาคม พ.ศ. 2550 Sun ได้เสร็จสิ้นกระบวนการ ทำให้รหัสหลักของ JVM ทั้งหมดพร้อมใช้งานภายใต้เงื่อนไขการแจกจ่ายซอฟต์แวร์ฟรี /โอเพ่นซอร์ส นอกเหนือจากโค้ดส่วนเล็กๆ ที่ Sun ไม่ได้ถือครองลิขสิทธิ์[33]

ซันรองประธานริชกรีนกล่าวว่าบทบาทในอุดมคติของดวงอาทิตย์ในเรื่องเกี่ยวกับ Java ด้วยคือในฐานะที่เป็นผู้สอนศาสนา [34]หลังจากที่Oracle Corporationเข้าซื้อกิจการ Sun Microsystems ในปี 2552-2553 Oracle ได้อธิบายตัวเองว่าเป็นผู้ดูแลเทคโนโลยี Java ด้วยความมุ่งมั่นอย่างไม่ลดละที่จะส่งเสริมชุมชนที่มีส่วนร่วมและความโปร่งใส [35]สิ่งนี้ไม่ได้ป้องกัน Oracle จากการยื่นฟ้อง Google ไม่นานหลังจากนั้น สำหรับการใช้ Java ภายในAndroid SDK (ดูส่วนAndroid )

เมื่อวันที่ 2 เมษายน 2010 เจมส์กอสลิงลาออกจากออราเคิล (36)

ในเดือนมกราคม 2559 Oracle ประกาศว่าสภาพแวดล้อมรันไทม์ Java ที่ใช้ JDK 9 จะยุติการใช้งานปลั๊กอินของเบราว์เซอร์ [37]

ซอฟต์แวร์ Java วิ่งบนทุกอย่างจากแล็ปท็อปศูนย์ข้อมูล , เกมคอนโซลการทางวิทยาศาสตร์ซูเปอร์คอมพิวเตอร์ [38]

หลักการ

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

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

รุ่น

ตั้งแต่เดือนกันยายน 2020 เป็นต้นไป Java 8 และ 11 ได้รับการสนับสนุนเป็นเวอร์ชัน Long Term Support (LTS) และรองรับเวอร์ชันที่ไม่ใช่ LTS ที่ใหม่กว่าหนึ่งเวอร์ชัน [39] Java เวอร์ชันหลักที่วางจำหน่ายพร้อมกับวันที่วางจำหน่าย:

เวอร์ชั่น วันที่
JDK เบต้า 1995
JDK1.0 23 มกราคม 2539 [40]
JDK 1.1 19 กุมภาพันธ์ 1997
J2SE 1.2 8 ธันวาคม 1998
J2SE 1.3 8 พฤษภาคม 2000
J2SE 1.4 6 กุมภาพันธ์ 2545
J2SE 5.0 30 กันยายน 2547
Java SE 6 11 ธันวาคม 2549
Java SE 7 28 กรกฎาคม 2554
Java SE 8 18 มีนาคม 2014
Java SE 9 21 กันยายน 2017
Java SE 10 20 มีนาคม 2018
Java SE 11 25 กันยายน 2561 [41]
Java SE 12 19 มีนาคม 2019
Java SE 13 กันยายน 17, 2019
Java SE 14 17 มีนาคม 2020
Java SE 15 15 กันยายน 2563 [42]
Java SE 16 16 มีนาคม 2564

ฉบับ

Sun ได้กำหนดและสนับสนุน Java สี่รุ่นที่กำหนดเป้าหมายสภาพแวดล้อมแอปพลิเคชันที่แตกต่างกัน และแบ่งกลุ่มAPIจำนวนมากเพื่อให้เป็นส่วนหนึ่งของหนึ่งในแพลตฟอร์ม แพลตฟอร์มคือ:

  • Java Cardสำหรับสมาร์ทการ์ด [43]
  • Java Platform, Micro Edition (Java ME) – การกำหนดเป้าหมายสภาพแวดล้อมด้วยทรัพยากรที่จำกัด [44]
  • Java Platform, Standard Edition (Java SE) – กำหนดเป้าหมายสภาพแวดล้อมเวิร์กสเตชัน [45]
  • Java Platform, Enterprise Edition (Java EE) – กำหนดเป้าหมายไปยังองค์กรขนาดใหญ่แบบกระจายหรือสภาพแวดล้อมทางอินเทอร์เน็ต [46]

เรียนใน Java API ที่มีการจัดเป็นกลุ่มที่แยกต่างหากที่เรียกว่าแพคเกจ แต่ละแพ็คเกจประกอบด้วยชุดของอินเตอร์เฟสคลาสแพ็คเกจย่อย และข้อยกเว้นที่เกี่ยวข้อง

ซันยังได้จัดเตรียมรุ่นที่เรียกว่าJava ส่วนบุคคลซึ่งต่อมาถูกแทนที่ด้วยการจับคู่โปรไฟล์การกำหนดค่า Java ME แบบอิงมาตรฐานในภายหลัง

ระบบการดำเนินการ

Java JVM และ bytecode

เป้าหมายการออกแบบอย่างหนึ่งของ Java คือportabilityซึ่งหมายความว่าโปรแกรมที่เขียนขึ้นสำหรับแพลตฟอร์ม Java จะต้องทำงานในลักษณะเดียวกันบนฮาร์ดแวร์และระบบปฏิบัติการร่วมกันทุกรูปแบบที่มีการรองรับรันไทม์ที่เพียงพอ นี่คือความสำเร็จโดยการรวบรวมรหัสภาษา Java เพื่อเป็นตัวแทนระดับกลางที่เรียกว่าJava bytecodeแทนที่จะโดยตรงกับสถาปัตยกรรมเฉพาะรหัสเครื่อง คำสั่ง Java bytecode นั้นคล้ายคลึงกับรหัสเครื่อง แต่มีจุดประสงค์เพื่อเรียกใช้งานโดยเครื่องเสมือน (VM) ที่เขียนขึ้นโดยเฉพาะสำหรับฮาร์ดแวร์โฮสต์ ผู้ใช้ปลายทางมักใช้Java Runtime Environment (JRE) ที่ติดตั้งบนเครื่องของตนสำหรับแอปพลิเคชัน Java แบบสแตนด์อโลน หรือในเว็บเบราว์เซอร์สำหรับจาวา

ห้องสมุดมาตรฐานให้เป็นวิธีทั่วไปเพื่อเข้าถึงโฮสต์เฉพาะคุณสมบัติเช่นกราฟิกเกลียวและเครือข่าย

การใช้ bytecode สากลทำให้การพอร์ตเป็นเรื่องง่าย แต่ค่าใช้จ่ายของการตีความโปรแกรม bytecode เข้าไปในคำแนะนำเครื่องทำตีความทำงานมักจะช้ากว่าพื้นเมืองexecutables คอมไพเลอร์Just-in-time (JIT) ที่คอมไพล์ไบต์โค้ดไปยังโค้ดเครื่องระหว่างรันไทม์ได้รับการแนะนำจากระยะเริ่มต้น Java นั้นไม่ขึ้นกับแพลตฟอร์มและถูกปรับให้เข้ากับแพลตฟอร์มเฉพาะที่จะรันโดยJava virtual machine (JVM) สำหรับมัน ซึ่งแปลJava bytecodeเป็นภาษาเครื่องของแพลตฟอร์ม [47]

ประสิทธิภาพ

โปรแกรมเขียนใน Java มีชื่อเสียงในการเป็นช้าลงและกำหนดให้หน่วยความจำมากขึ้นกว่าที่เขียนในภาษา C ++ [48] [49]แต่ความเร็วในการทำงาน Java โปรแกรมดีขึ้นอย่างมีนัยสำคัญด้วยการแนะนำของสะสมเพียงในเวลาใน 1997/1998 สำหรับJava 1.1 , [50]นอกเหนือจากภาษาที่สนับสนุนคุณสมบัติการวิเคราะห์รหัสที่ดีขึ้น (เช่นการเรียนภายใน คลาส StringBuilder การยืนยันทางเลือก เป็นต้น) และการเพิ่มประสิทธิภาพในเครื่องเสมือน Java เช่นHotSpotกลายเป็น JVM เริ่มต้นของ Sun ในปี 2000 ด้วย Java 1.5 ประสิทธิภาพได้รับการปรับปรุงด้วยการเพิ่มแพ็คเกจ java.util.concurrent รวมถึงการใช้งานล็อคฟรีของConcurrentMapsและคอลเล็กชันมัลติคอร์อื่นๆ และได้รับการปรับปรุงเพิ่มเติมด้วย Java 1.6

ไม่ใช่ JVM

บางแพลตฟอร์มให้การสนับสนุนฮาร์ดแวร์โดยตรงสำหรับ Java; มีไมโครคอนโทรลเลอร์ที่สามารถเรียกใช้ Java bytecode ในฮาร์ดแวร์แทนซอฟต์แวร์ Java virtual machine [51]และโปรเซสเซอร์ที่ใช้ARMบางตัวอาจมีการสนับสนุนฮาร์ดแวร์สำหรับการรัน Java bytecode ผ่านตัวเลือกJazelleแม้ว่าการสนับสนุนส่วนใหญ่จะลดลงในการใช้งานในปัจจุบัน ของอาร์ม

การจัดการหน่วยความจำอัตโนมัติ

Java ใช้เก็บขยะอัตโนมัติในการจัดการหน่วยความจำในวงจรชีวิตของวัตถุโปรแกรมเมอร์กำหนดเมื่ออ็อบเจ็กต์ถูกสร้างขึ้น และรันไทม์ Java มีหน้าที่ในการกู้คืนหน่วยความจำเมื่อไม่มีการใช้อ็อบเจ็กต์อีกต่อไป เมื่อไม่มีการอ้างถึงอ็อบเจ็กต์เหลืออยู่หน่วยความจำที่ไม่สามารถเข้าถึงได้จะมีสิทธิ์ถูกปลดปล่อยโดยอัตโนมัติโดยตัวรวบรวมขยะ บางสิ่งที่คล้ายกับหน่วยความจำรั่วอาจยังคงเกิดขึ้นได้หากรหัสของโปรแกรมเมอร์มีการอ้างอิงถึงวัตถุที่ไม่ต้องการอีกต่อไป โดยปกติเมื่อวัตถุที่ไม่ต้องการแล้วจะถูกเก็บไว้ในคอนเทนเนอร์ที่ยังคงใช้งานอยู่ หากมีการเรียกเมธอดสำหรับอ็อบเจ็กต์ที่ไม่มีอยู่จริงข้อยกเว้นตัวชี้ nullจะถูกส่งออกไป[52] [53]

หนึ่งในแนวคิดที่อยู่เบื้องหลังโมเดลการจัดการหน่วยความจำอัตโนมัติของ Java คือโปรแกรมเมอร์สามารถแบ่งเบาภาระที่ต้องดำเนินการจัดการหน่วยความจำด้วยตนเองได้ ในบางภาษา หน่วยความจำสำหรับการสร้างอ็อบเจ็กต์จะถูกจัดสรรโดยปริยายบนสแต็กหรือจัดสรรและจัดสรรคืนจากฮีปอย่างชัดเจน ในกรณีหลังนี้ ความรับผิดชอบในการจัดการหน่วยความจำอยู่ที่โปรแกรมเมอร์ ถ้าโปรแกรมไม่จัดสรรคืนอ็อบเจ็กต์หน่วยความจำรั่วจะเกิดขึ้น หากโปรแกรมพยายามเข้าถึงหรือจัดสรรคืนหน่วยความจำที่ได้รับการจัดสรรคืนแล้ว ผลลัพธ์จะไม่ถูกกำหนดและคาดการณ์ได้ยาก และโปรแกรมมีแนวโน้มที่จะไม่เสถียรหรือหยุดทำงาน ซึ่งสามารถแก้ไขได้บางส่วนโดยใช้ตัวชี้อัจฉริยะแต่สิ่งเหล่านี้เพิ่มค่าใช้จ่ายและความซับซ้อน โปรดทราบว่าการรวบรวมขยะไม่ได้ป้องกันการรั่วไหลของหน่วยความจำแบบลอจิคัลกล่าวคือ ส่วนที่หน่วยความจำยังอ้างอิงอยู่แต่ไม่เคยใช้

การเก็บขยะอาจเกิดขึ้นได้ตลอดเวลา ตามหลักการแล้วมันจะเกิดขึ้นเมื่อโปรแกรมไม่ได้ใช้งาน รับประกันได้ว่าจะถูกทริกเกอร์หากมีหน่วยความจำว่างไม่เพียงพอบนฮีปเพื่อจัดสรรอ็อบเจ็กต์ใหม่ ซึ่งอาจทำให้โปรแกรมหยุดทำงานชั่วขณะ ไม่สามารถจัดการหน่วยความจำที่ชัดเจนใน Java

Java ไม่สนับสนุนเลขคณิตพอยน์เตอร์สไตล์ C/C++ โดยที่แอดเดรสของอ็อบเจ็กต์สามารถจัดการทางคณิตศาสตร์ได้ (เช่น โดยการเพิ่มหรือลบออฟเซ็ต) ซึ่งช่วยให้ตัวรวบรวมขยะสามารถย้ายวัตถุที่อ้างอิงและรับรองความปลอดภัยและความปลอดภัยของประเภท

เช่นเดียวกับในภาษา C++ และภาษาเชิงวัตถุอื่นๆ ตัวแปรของประเภทข้อมูลดั้งเดิมของ Java จะถูกจัดเก็บโดยตรงในฟิลด์ (สำหรับอ็อบเจ็กต์) หรือบนสแต็ก (สำหรับเมธอด) แทนที่จะเป็นบนฮีป ซึ่งมักจะเป็นจริงสำหรับข้อมูลที่ไม่ใช่แบบพื้นฐาน ประเภท (แต่ดูการวิเคราะห์การหลบหนี ) นี่เป็นการตัดสินใจอย่างมีสติโดยนักออกแบบของ Java ด้วยเหตุผลด้านประสิทธิภาพ

Java มีตัวรวบรวมขยะหลายประเภท ตั้งแต่ Java 9 HotSpot ใช้Garbage First Garbage Collector (G1GC) เป็นค่าเริ่มต้น [54]อย่างไรก็ตาม ยังมีตัวเก็บขยะอีกหลายตัวที่สามารถใช้จัดการกองได้ สำหรับแอปพลิเคชันส่วนใหญ่ใน Java G1GC ก็เพียงพอแล้ว ก่อนหน้านี้Parallel Garbage Collectorถูกใช้ใน Java 8

การแก้ไขปัญหาการจัดการหน่วยความจำไม่ได้ช่วยแบ่งเบาภาระของโปรแกรมเมอร์ในการจัดการทรัพยากรประเภทอื่นอย่างเหมาะสม เช่น การเชื่อมต่อเครือข่ายหรือฐานข้อมูล การจัดการไฟล์ ฯลฯ โดยเฉพาะอย่างยิ่งเมื่อมีข้อยกเว้น

ไวยากรณ์

กราฟการพึ่งพาของคลาส Java Core (สร้างด้วย jdeps และGephi )

ไวยากรณ์ของ Java ได้รับอิทธิพลส่วนใหญ่โดยC ++และC ต่างจาก C++ ซึ่งรวมไวยากรณ์สำหรับการเขียนโปรแกรมแบบมีโครงสร้าง ทั่วไป และเชิงวัตถุ Java ถูกสร้างขึ้นเกือบทั้งหมดเป็นภาษาเชิงวัตถุโดยเฉพาะ [18]รหัสทั้งหมดเขียนขึ้นภายในคลาส และทุกรายการข้อมูลเป็นวัตถุ ยกเว้นประเภทข้อมูลพื้นฐาน (เช่น จำนวนเต็ม ตัวเลขทศนิยมค่าบูลีนและอักขระ) ซึ่งไม่ใช่วัตถุด้วยเหตุผลด้านประสิทธิภาพ . Java นำบางแง่มุมที่เป็นที่นิยมของ C ++ มาใช้ซ้ำ (เช่นprintfวิธีการ)

ซึ่งแตกต่างจาก C ++, Java ไม่สนับสนุนการดำเนินงานมาก[55]หรือมรดกหลายสำหรับการเรียนแม้ว่ามรดกหลายได้รับการสนับสนุนสำหรับการเชื่อมต่อ [56]

Java ใช้ความคิดเห็นที่คล้ายกับของ C++ รูปแบบบรรทัดเดียวที่มีเครื่องหมายทับสอง (มีสามรูปแบบที่แตกต่างกันของการแสดงความคิดเห็นเป็น//) ซึ่งเป็นรูปแบบหลายบรรทัดเปิด/*และปิดด้วย*/และJavadocแสดงความคิดเห็นรูปแบบเปิดและปิดด้วย/** */รูปแบบการแสดงความคิดเห็นของ Javadoc อนุญาตให้ผู้ใช้เรียกใช้โปรแกรมเรียกทำงาน Javadoc เพื่อสร้างเอกสารประกอบสำหรับโปรแกรม และสามารถอ่านได้โดยสภาพแวดล้อมการพัฒนาแบบรวม (IDE) บางอย่าง เช่นEclipseเพื่อให้นักพัฒนาสามารถเข้าถึงเอกสารประกอบภายใน IDE

ตัวอย่าง สวัสดีชาวโลก

โปรแกรมHello worldดั้งเดิมสามารถเขียนด้วยภาษาจาวาได้ดังนี้: [57]

 HelloWorldApp คลาส สาธารณะ{ 
     โมฆะคงที่ สาธารณะหลัก( สตริง[ ] args ) {   
        ระบบ. ออก. println ( "สวัสดีชาวโลก!" );  // พิมพ์สตริงไปที่คอนโซล
    }
}

ไฟล์ต้นฉบับทั้งหมดต้องตั้งชื่อตามคลาสสาธารณะที่มีอยู่ โดยต่อท้ายคำต่อท้าย.javaเช่นHelloWorldApp.java. ก่อนอื่นต้องคอมไพล์เป็น bytecode โดยใช้Java compilerสร้างไฟล์ที่มี.classคำต่อท้าย ( HelloWorldApp.classในกรณีนี้) เท่านั้นจึงจะสามารถดำเนินการหรือเปิดตัวได้ แฟ้มแหล่งที่มา Java อาจมีเพียงหนึ่งชั้นเรียนของประชาชน แต่ก็สามารถมีหลายชั้นเรียนด้วยการปรับปรุงการเข้าถึงที่ไม่ใช่แบบสาธารณะและจำนวนของประชาชนใด ๆเรียนภายในเมื่อไฟล์ต้นฉบับมีหลายคลาส จำเป็นต้องทำให้หนึ่งคลาส (แนะนำโดยคีย์เวิร์ด) เป็นแบบสาธารณะ (นำหน้าด้วยคีย์เวิร์ด) และตั้งชื่อไฟล์ต้นฉบับด้วยชื่อคลาสสาธารณะนั้น classpublic

คลาสที่ไม่ได้ประกาศเป็นสาธารณะอาจถูกเก็บไว้ใน.javaไฟล์ใดก็ได้คอมไพเลอร์จะสร้างไฟล์คลาสสำหรับแต่ละคลาสที่กำหนดไว้ในไฟล์ต้นฉบับ ชื่อของไฟล์คลาสคือชื่อของคลาส โดยมี.classต่อท้าย สำหรับการสร้างไฟล์คลาส คลาสที่ไม่ระบุชื่อจะได้รับการปฏิบัติเสมือนว่าชื่อของพวกเขาเป็นการต่อกันของชื่อของคลาสที่ล้อมรอบ$และจำนวนเต็ม

คำหลัก publicหมายถึงว่าวิธีการที่สามารถเรียกจากรหัสในชั้นเรียนอื่น ๆ หรือว่าชั้นอาจถูกใช้โดยการเรียนนอกลำดับชั้นของชั้นเรียน ลำดับชั้นของคลาสเกี่ยวข้องกับชื่อของไดเร็กทอรีที่ไฟล์ .java ตั้งอยู่ สิ่งนี้เรียกว่าตัวแก้ไขระดับการเข้าถึง ตัวแก้ไขระดับการเข้าถึงอื่นๆ ได้แก่ คีย์เวิร์ดprivate(วิธีการที่สามารถเข้าถึงได้ในคลาสเดียวกันเท่านั้น) และprotected(ซึ่งอนุญาตให้เข้าถึงโค้ดจากแพ็กเกจเดียวกันได้) หากโค้ดบางส่วนพยายามเข้าถึงเมธอดส่วนตัวหรือเมธอดที่ได้รับการป้องกัน JVM จะส่ง aSecurityException

คีย์เวิร์ดstatic[19]หน้าเมธอดบ่งชี้ถึงเมธอดแบบสแตติกซึ่งสัมพันธ์กับคลาสเท่านั้น ไม่เกี่ยวข้องกับอินสแตนซ์เฉพาะใดๆ ของคลาสนั้น เฉพาะเมธอดแบบสแตติกเท่านั้นที่สามารถเรียกใช้ได้โดยไม่ต้องอ้างอิงถึงอ็อบเจ็กต์ วิธีสแตติกไม่สามารถเข้าถึงสมาชิกคลาสใด ๆ ที่ไม่คงที่เช่นกัน เมธอดที่ไม่ได้กำหนดแบบสแตติกคือเมธอดของอินสแตนซ์และต้องการอินสแตนซ์เฉพาะของคลาสเพื่อดำเนินการ

คีย์เวิร์ดvoidระบุว่าเมธอดหลักไม่คืนค่าใดๆ ให้กับผู้โทร ถ้าโปรแกรม Java จะออกพร้อมกับรหัสข้อผิดพลาด โปรแกรมนั้นต้องเรียกSystem.exit()อย่างชัดเจน

ชื่อเมธอดmainไม่ใช่คีย์เวิร์ดในภาษา Java มันเป็นเพียงชื่อของวิธีการที่ตัวเรียกใช้งาน Java เรียกเพื่อส่งการควบคุมไปยังโปรแกรม คลาส Java ที่ทำงานในสภาพแวดล้อมที่มีการจัดการ เช่น แอปเพล็ตและEnterprise JavaBeansไม่ได้ใช้หรือต้องการmain()เมธอด โปรแกรม Java อาจประกอบด้วยหลายคลาสที่มีmainเมธอด ซึ่งหมายความว่า VM จำเป็นต้องได้รับการบอกอย่างชัดเจนว่าคลาสใดที่จะเรียกใช้จาก

วิธีการหลักต้องยอมรับอาร์เรย์ของStringวัตถุ ตามแบบแผน จะมีการอ้างอิงargsถึงแม้ว่าจะสามารถใช้ชื่อตัวระบุทางกฎหมายอื่นๆ ได้ ตั้งแต่ Java 5 วิธีการหลักก็สามารถใช้ตัวแปรอาร์กิวเมนต์ในรูปแบบของpublic static void main(String... args)อนุญาตให้เรียกใช้เมธอดหลักด้วยจำนวนStringอาร์กิวเมนต์ตามอำเภอใจผลของการประกาศทางเลือกนี้มีความหมายเหมือนกัน (กับargsพารามิเตอร์ที่ยังคงเป็นอาร์เรย์ของStringวัตถุ) แต่อนุญาตให้ใช้รูปแบบอื่นสำหรับการสร้างและส่งอาร์เรย์

ตัวเรียกใช้งาน Java เรียกใช้ Java โดยการโหลดคลาสที่กำหนด (ระบุไว้ในบรรทัดคำสั่งหรือเป็นแอตทริบิวต์ในJAR ) และเริ่มต้นpublic static void main(String[])วิธีการ โปรแกรมแบบสแตนด์อโลนต้องประกาศวิธีนี้อย่างชัดเจน String[] argsพารามิเตอร์เป็นอาร์เรย์ของStringวัตถุที่มีข้อโต้แย้งใด ๆ ที่ส่งผ่านไปยังชั้นเรียน พารามิเตอร์ที่จะmainมักจะผ่านไปได้โดยวิธีการของบรรทัดคำสั่ง

พิมพ์เป็นส่วนหนึ่งของห้องสมุดมาตรฐาน Java: ระดับกำหนดฟิลด์สาธารณะคงเรียกว่าSystem วัตถุเป็นตัวอย่างของการเรียนและมีวิธีการหลายสำหรับการพิมพ์ข้อมูลเพื่อออกมาตรฐานรวมทั้งที่ยังผนวกบรรทัดใหม่จะผ่านสตริง outoutPrintStreamprintln(String)

สตริง"Hello World!"จะถูกแปลงเป็นวัตถุสตริงโดยอัตโนมัติโดยคอมไพเลอร์

ตัวอย่างวิธีการ

// นี่คือตัวอย่างความคิดเห็นบรรทัดเดียวโดยใช้เครื่องหมายทับสองอัน

/* 
* นี่คือตัวอย่างของความคิดเห็นหลายบรรทัดโดยใช้เครื่องหมายทับและเครื่องหมายดอกจัน 
* ความคิดเห็นประเภทนี้สามารถใช้เพื่อเก็บข้อมูลจำนวนมากหรือปิดใช้งาน
รหัส * ได้ แต่สิ่งสำคัญคือต้องไม่ลืมที่จะปิดความคิดเห็น 
*/

แพ็คเกจ fibsandlies ;

นำเข้า java.util.Map ; 
นำเข้า java.util.HashMap ;

/** 
* นี่คือตัวอย่างของความคิดเห็น Javadoc; Javadoc สามารถรวบรวมเอกสาร
* จากข้อความนี้ ข้อคิดเห็น Javadoc ต้องอยู่ก่อนคลาส เมธอด
* หรือฟิลด์ที่กำลังจัดทำเอกสาร
* @author Wikipedia อาสาสมัคร
*/ 
คลาสสาธารณะ FibCalculator ขยายFibonacci ใช้เครื่องคิดเลข{ แผนที่คงที่ส่วนตัว< Integer , Integer > memoized = HashMap ใหม่<> ();      
           

    /* 
     * วิธีการหลักที่เขียนดังต่อไปนี้ถูกใช้โดย JVM เป็นจุดเริ่มต้น
     * สำหรับโปรแกรม
     * / 
    สาธารณะ คง เป็นโมฆะ หลัก( String []  args )  { 
        memoized ใส่( 1 , 1 ); บันทึกไว้ใส่( 2 , 1 ); ระบบ. ออก. println ( fibonacci ( 12 )); // รับหมายเลขฟีโบนักชีที่ 12 และพิมพ์ไปยังคอนโซล} 
         
         
    

    /** 
     * ตัวอย่างเมธอดที่เขียนด้วย Java ห่อหุ้มในคลาส
     * ให้ FIBINDEX เป็นตัวเลขที่ไม่ใช่ค่าลบ ส่งกลับ
     * หมายเลข Fibonacci ที่ N โดยที่ N เท่ากับ FIBINDEX 
     * * * * 
     * * * * @ พระราม fibIndex ดัชนีของจำนวนฟีโบนักชี
     * กลับ @ จำนวนฟีโบนักชี
     * / 
    สาธารณะ คง int  fibonacci ( int  fibIndex )  { 
        ถ้า ( memoized . containsKey ( fibIndex ))  กลับ memoized รับ( fibIndex ); อื่นๆ{ int
         
             คำตอบ =  fibonacci ( fibIndex  -  1 )  +  fibonacci ( fibIndex  -  2 ); 
            บันทึกไว้ ใส่( fibIndex ,  คำตอบ); 
            ส่งคืน คำตอบ; 
        } 
    } 
}

ชั้นเรียนพิเศษ

แอพเพล็ต

แอปเพล็ต Java เป็นโปรแกรมที่ฝังอยู่ในแอปพลิเคชันอื่น โดยทั่วไปแล้วจะอยู่ในหน้าเว็บที่แสดงในเว็บเบราว์เซอร์ Java applet API เลิกใช้แล้วตั้งแต่ Java 9 ในปี 2560 [58] [59]

เซิร์ฟเล็ต

เทคโนโลยีJava servletช่วยให้นักพัฒนาเว็บมีกลไกที่เรียบง่ายและสม่ำเสมอสำหรับการขยายฟังก์ชันการทำงานของเว็บเซิร์ฟเวอร์และสำหรับการเข้าถึงระบบธุรกิจที่มีอยู่ Servlets เป็นด้านเซิร์ฟเวอร์ส่วนประกอบ Java EE ที่สร้างการตอบสนองต่อการร้องขอจากลูกค้า โดยส่วนใหญ่ นี่หมายถึงการสร้างหน้าHTMLเพื่อตอบสนองคำขอHTTPแม้ว่าจะมีคลาสเซิร์ฟเล็ตมาตรฐานอื่นๆ อยู่เป็นจำนวนมาก ตัวอย่างเช่น สำหรับการสื่อสาร WebSocket

Java servlet API ถูกแทนที่ในระดับหนึ่ง (แต่ยังคงใช้ภายใต้ประทุน) โดยเทคโนโลยี Java มาตรฐานสองประการสำหรับบริการเว็บ:

การใช้งาน API เหล่านี้โดยทั่วไปบน Application Servers หรือ Servlet Containers ใช้เซิร์ฟเล็ตมาตรฐานสำหรับจัดการการโต้ตอบทั้งหมดกับคำขอ HTTP และการตอบสนองที่มอบหมายให้วิธีการบริการเว็บสำหรับตรรกะทางธุรกิจที่แท้จริง

หน้า JavaServer

JavaServer Pages (JSP) เป็นด้านเซิร์ฟเวอร์ส่วนประกอบ Java EE ที่สร้างการตอบสนองโดยทั่วไปHTMLหน้าเพื่อHTTPการร้องขอจากลูกค้า JSP ฝังโค้ด Java ในหน้า HTML โดยใช้ตัวคั่น พิเศษ<%และ%>. JSP ถูกคอมไพล์ไปยัง Java servletซึ่งเป็นแอปพลิเคชัน Java ที่เป็นสิทธิ์ของตนเอง ในครั้งแรกที่มีการเข้าถึง หลังจากนั้น เซิร์ฟเล็ตที่สร้างขึ้นจะสร้างการตอบสนอง [60]

แอปพลิเคชั่นสวิง

Swingเป็นไลบรารีส่วนต่อประสานกราฟิกกับผู้ใช้สำหรับแพลตฟอร์ม Java SE เป็นไปได้ที่จะระบุรูปลักษณ์และความรู้สึกที่ต่างออกไปผ่านระบบรูปลักษณ์และสัมผัสที่เสียบได้ของ Swing โคลนของWindows , GTK+และMotifจัดทำโดย Sun แอปเปิ้ลนอกจากนี้ยังมีควาลักษณ์และความรู้สึกสำหรับMacOS ในกรณีที่การใช้งานก่อนหน้านี้ของรูปลักษณ์และความรู้สึกเหล่านี้ได้รับการพิจารณาว่าขาดหายไป Swing ใน Java SE 6 แก้ไขปัญหานี้โดยใช้รูทีนการวาดวิดเจ็ต GUIดั้งเดิมของแพลตฟอร์มพื้นฐาน [61]

แอปพลิเคชัน JavaFX

JavaFXเป็นแพลตฟอร์มซอฟต์แวร์สำหรับการสร้างและส่งมอบแอปพลิเคชันเดสก์ท็อปตลอดจนเว็บแอปพลิเคชันที่สมบูรณ์ซึ่งสามารถทำงานบนอุปกรณ์ที่หลากหลาย JavaFX มีวัตถุประสงค์เพื่อแทนที่Swingเป็นไลบรารีGUIมาตรฐานสำหรับJava SEแต่เนื่องจาก JDK 11 JavaFX ไม่ได้อยู่ในแกนหลักของ JDK และแทนที่จะอยู่ในโมดูลที่แยกจากกัน [62] JavaFX มีการสนับสนุนสำหรับคอมพิวเตอร์เดสก์ทอปและเว็บเบราเซอร์บนMicrosoft Windows , LinuxและMacOS JavaFX ไม่รองรับรูปลักษณ์และความรู้สึกของระบบปฏิบัติการดั้งเดิม [63]

ทั่วไป

ในปี 2547 ได้มีการเพิ่มgenericsในภาษา Java โดยเป็นส่วนหนึ่งของ J2SE 5.0 ก่อนที่จะมีการแนะนำชื่อสามัญ การประกาศตัวแปรแต่ละตัวจะต้องเป็นประเภทเฉพาะ ตัวอย่างเช่น สำหรับคลาสคอนเทนเนอร์ นี่เป็นปัญหาเนื่องจากไม่มีวิธีง่าย ๆ ในการสร้างคอนเทนเนอร์ที่ยอมรับเฉพาะประเภทของอ็อบเจ็กต์เท่านั้น คอนเทนเนอร์ทำงานบนชนิดย่อยทั้งหมดของคลาสหรืออินเทอร์เฟซ โดยปกติObjectหรือต้องสร้างคลาสคอนเทนเนอร์อื่นสำหรับแต่ละคลาสที่มีอยู่ Generics อนุญาตให้ตรวจสอบประเภทเวลาคอมไพล์โดยไม่ต้องสร้างคลาสคอนเทนเนอร์จำนวนมาก แต่ละคลาสมีโค้ดที่เกือบเหมือนกัน นอกเหนือจากการเปิดใช้งานโค้ดที่มีประสิทธิภาพมากขึ้นแล้ว ข้อยกเว้นรันไทม์บางอย่างยังป้องกันไม่ให้เกิดขึ้นด้วยการออกข้อผิดพลาดในการคอมไพล์ หาก Java ป้องกันข้อผิดพลาดประเภทรันไทม์ทั้งหมด (ClassCastExceptions) จากที่เกิดขึ้นก็จะเป็นประเภทที่ปลอดภัย

ในปี 2016 ระบบประเภทของ Java ได้รับการพิสูจน์ไม่น่าไว้ใจ [64]

คำวิจารณ์

การวิพากษ์วิจารณ์ที่มุ่งเป้าไปที่ Java นั้นรวมถึงการใช้ generics, [65]ความเร็ว, [66]การจัดการตัวเลขที่ไม่ได้ลงนาม, [67]การใช้เลขทศนิยม[68]และประวัติของช่องโหว่ด้านความปลอดภัยในการใช้งาน Java VM หลักฮอตสปอต . [69]

ห้องสมุดชั้นเรียน

ไลบรารีคลาส Javaเป็นห้องสมุดมาตรฐานได้รับการพัฒนาเพื่อสนับสนุนการพัฒนาแอพลิเคชันในชวา มันจะถูกควบคุมโดยออราเคิลในความร่วมมือกับคนอื่น ๆ ผ่านกระบวนการ Java Communityโปรแกรม [70]บริษัทหรือบุคคลที่มีส่วนร่วมในกระบวนการนี้สามารถมีอิทธิพลต่อการออกแบบและการพัฒนาของ API กระบวนการนี้เป็นประเด็นถกเถียงในช่วงปี 2010 [71]ไลบรารีคลาสมีคุณสมบัติเช่น:

เอกสาร

javadoc เป็นระบบเอกสารครบวงจรที่สร้างขึ้นโดยSun Microsystems ให้นักพัฒนามีระบบที่เป็นระเบียบสำหรับการจัดทำเอกสารรหัสของพวกเขา ความคิดเห็น Javadoc มีเครื่องหมายดอกจันพิเศษที่จุดเริ่มต้น กล่าวคือ ตัวคั่นคือ/**และ*/ในขณะที่ความคิดเห็นแบบหลายบรรทัดปกติใน Java ถูกตั้งค่าด้วยตัวคั่น/*และ*/และความคิดเห็นบรรทัดเดียวจะเริ่มต้นด้วย//. [75]

การใช้งาน

Oracle Corporationเป็นเจ้าของปัจจุบันของการใช้งานแพลตฟอร์ม Java SE อย่างเป็นทางการ ภายหลังการเข้าซื้อกิจการSun Microsystemsเมื่อวันที่ 27 มกราคม 2010 การใช้งานนี้มีพื้นฐานมาจากการใช้งาน Java โดย Sun ดั้งเดิม การดำเนินงาน Oracle เป็นใช้ได้สำหรับMicrosoft Windows (ยังคงทำงานได้สำหรับ XP ขณะที่มีเพียงรุ่นที่ใหม่กว่ากำลังสนับสนุนอย่างเป็นทางการ), MacOS , LinuxและSolarisเพราะ Java ขาดมาตรฐานอย่างเป็นทางการใด ๆ ที่ได้รับการยอมรับโดยEcma นานาชาติ , มาตรฐาน ISO / IEC, ANSI, หรือมาตรฐานของบุคคลที่สามองค์กรอื่น ๆ , การดำเนินการของออราเคิลเป็นมาตรฐาน de facto

การใช้งาน 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 อ้างอิงไปใช้อย่างเป็นทางการ

เป้าหมายของ Java คือการทำให้การใช้งาน Java ทั้งหมดเข้ากันได้ ในอดีตการใช้เครื่องหมายการค้าของดวงอาทิตย์สำหรับการใช้งานของแบรนด์ Java ยืนยันว่าการใช้งานทั้งหมดจะเข้ากันได้ส่งผลให้เกิดข้อพิพาททางกฎหมายกับMicrosoftหลังจากที่ Sun อ้างว่าการใช้งาน Microsoft ไม่สนับสนุนRMIหรือJNIและได้เพิ่มคุณลักษณะเฉพาะแพลตฟอร์มของตนเอง ซันฟ้องในปี 2540 และในปี 2544 ชนะการระงับคดีเป็นจำนวนเงิน 20 ล้านดอลลาร์สหรัฐ ตลอดจนคำสั่งศาลที่บังคับใช้เงื่อนไขของใบอนุญาตจากซัน[76]เป็นผลให้ไมโครซอฟท์เรือไม่ Java กับวินโดวส์

Java ที่ไม่ขึ้นกับแพลตฟอร์มเป็นสิ่งจำเป็นสำหรับJava EEและจำเป็นต้องมีการตรวจสอบที่เข้มงวดยิ่งขึ้นเพื่อรับรองการใช้งาน สภาพแวดล้อมนี้เปิดใช้งานแอปพลิเคชันฝั่งเซิร์ฟเวอร์แบบพกพา

ใช้ภายนอกแพลตฟอร์ม Java

ภาษาการเขียนโปรแกรม Java จำเป็นต้องมีแพลตฟอร์มซอฟต์แวร์เพื่อให้สามารถดำเนินการโปรแกรมที่คอมไพล์ได้

Oracle จัดหาแพลตฟอร์ม Javaสำหรับใช้กับ Java Android SDKเป็นแพลตฟอร์มซอฟแวร์ทางเลือกที่ใช้เป็นหลักในการพัฒนาการใช้งาน Androidกับระบบ GUI ของตัวเอง

แอนดรอยด์

Androidระบบปฏิบัติการทำให้ครอบคลุมการใช้เทคโนโลยีที่เกี่ยวข้องกับ Java

ภาษา Java เป็นเสาหลักสำคัญในการAndroidเป็นโอเพนซอร์ส ระบบปฏิบัติการบนมือถือแม้ว่า Android ที่สร้างขึ้นบนเคอร์เนล Linuxนั้นเขียนด้วยภาษา C เป็นส่วนใหญ่ แต่Android SDK นั้นใช้ภาษา Java เป็นพื้นฐานสำหรับแอปพลิเคชัน Android แต่ไม่ได้ใช้ GUI มาตรฐาน, SE, ME หรือมาตรฐาน Java อื่นๆ[77]ภาษา bytecode ได้รับการสนับสนุนโดย Android SDK เข้ากันไม่ได้กับ Java bytecode และทำงานบนเครื่องเสมือนของตัวเองเหมาะสำหรับอุปกรณ์หน่วยความจำต่ำเช่นมาร์ทโฟนและคอมพิวเตอร์แท็บเล็ต bytecode อาจถูกตีความโดยเครื่องเสมือน Dalvikทั้งนี้ขึ้นอยู่กับเวอร์ชันของ Androidหรือเรียบเรียงรหัสพื้นเมืองโดยRuntime Android

Android ไม่ได้จัดเตรียมไลบรารีมาตรฐาน Java SE เต็มรูปแบบ แม้ว่า Android SDK จะรวมการใช้งานที่เป็นอิสระของชุดย่อยขนาดใหญ่ รองรับ Java 6 และคุณสมบัติบางอย่างของ Java 7 โดยนำเสนอการใช้งานที่เข้ากันได้กับไลบรารีมาตรฐาน ( Apache Harmony )

ความขัดแย้ง

การใช้เทคโนโลยีที่เกี่ยวข้องกับ Java ใน Android ทำให้เกิดข้อพิพาททางกฎหมายระหว่าง Oracle และ Google เมื่อวันที่ 7 พฤษภาคม 2555 คณะลูกขุนในซานฟรานซิสโกพบว่าหาก API สามารถมีลิขสิทธิ์ได้ Google ได้ละเมิดลิขสิทธิ์ของ Oracle โดยการใช้ Java ในอุปกรณ์ Android [78]ผู้พิพากษาเขตWilliam Alsupปกครองเมื่อวันที่ 31 พฤษภาคม 2555 ว่า API ไม่สามารถมีลิขสิทธิ์ได้[79]แต่สิ่งนี้ถูกกลับรายการโดยศาลอุทธรณ์ศาลรัฐบาลกลางของสหรัฐอเมริกาในเดือนพฤษภาคม 2557 [80]เมื่อวันที่ 26 พฤษภาคม 2559 ศาลแขวงตัดสินให้ Google เป็นฝ่ายชนะ การพิจารณาคดีการละเมิดลิขสิทธิ์ของ Java API ใน Android ถือเป็นการใช้งานโดยชอบธรรม[81]ในเดือนมีนาคม พ.ศ. 2561 การพิจารณาคดีนี้ถูกยกเลิกโดยศาลอุทธรณ์ ซึ่งส่งคดีถึงการพิจารณาความเสียหายต่อศาลรัฐบาลกลางในซานฟรานซิสโก[82] Google ยื่นคำร้องเพื่อหมายศาล certiorariกับศาลฎีกาแห่งสหรัฐอเมริกาในเดือนมกราคม 2019 เพื่อคัดค้านคำวินิจฉัยทั้งสองที่ศาลอุทธรณ์ได้เสนอให้ Oracle [83]เมื่อวันที่ 5 เมษายน 2021 ศาลปกครอง 6-2 ในความโปรดปรานของ Google ที่ใช้งานของ Java API ที่ควรได้รับการพิจารณาใช้งานที่เหมาะสมอย่างไรก็ตาม ศาลปฏิเสธที่จะตัดสินเรื่องลิขสิทธิ์ของ API โดยเลือกแทนที่จะพิจารณาคำตัดสินโดยพิจารณาว่า API ของ Java มีลิขสิทธิ์ "เพียงเพื่อประโยชน์ในการโต้แย้งเท่านั้น" [84]

ดูเพิ่มเติม

เปรียบเทียบ Java กับภาษาอื่นๆ

อ้างอิง

  1. ^ Binstock, แอนดรูว์ (20 พ.ค. 2558). "20 ปีแห่งนวัตกรรมของ Java" . ฟอร์บส์ . เก็บถาวรจากต้นฉบับเมื่อ 14 มีนาคม 2016 . สืบค้นเมื่อ18 มีนาคม 2559 .
  2. ^ "JDK หมายเหตุประกอบงบการเงินรวม 16 วางจำหน่าย" 20 กรกฎาคม 2564 . ที่ดึงกรกฏาคม 27, 2021
  3. ^ a b c d Barbara LiskovกับJohn Guttag (2000) โครงการพัฒนาในชวา - นามธรรมข้อมูลจำเพาะและการออกแบบเชิงวัตถุ สหรัฐอเมริกา แอดดิสัน เวสลีย์ ISBN 9780201657685.
  4. ^ Chaudhary, Harry H. (28 กรกฎาคม 2014). "แตก Java Programming สัมภาษณ์ :: 2000 + Java สัมภาษณ์ Que / Ans" สืบค้นเมื่อ29 พฤษภาคม 2559 .
  5. ^ Java 5.0 เพิ่มคุณสมบัติภาษาใหม่หลายอย่าง (การปรับปรุงสำหรับ loop , autoboxing , varargsและหมายเหตุประกอบ ) หลังจากที่ถูกนำมาใช้ในภาษา C#ที่คล้ายกัน (และแข่งขันกัน) [1] เก็บถาวร 19 มีนาคม 2011 ที่ Wayback Machine [2] เก็บถาวร 7 มกราคม 2549 ที่ Wayback Machine
  6. ^ ลูกห่าน เจมส์; แมคกิลตัน, เฮนรี่ (พฤษภาคม 1996). "สภาพแวดล้อมภาษาจาวา" . เก็บถาวรจากต้นฉบับเมื่อ 6 พฤษภาคม 2014 . สืบค้นเมื่อ6 พฤษภาคม 2014 .
  7. ^ ลูกห่าน เจมส์; จอย, บิล; สตีล, กาย; บราชา, กิลัด. "ข้อกำหนดภาษา Java ฉบับที่ 2" . เก็บถาวรจากต้นฉบับเมื่อ 5 สิงหาคม 2011 . สืบค้นเมื่อ8 กุมภาพันธ์ 2551 .
  8. ^ "อาริโซน่าของภาษาการเขียนโปรแกรม: Modula-3" . Computerworld.com.au เก็บถาวรจากต้นฉบับเมื่อ 5 มกราคม 2552 . สืบค้นเมื่อ9 มิถุนายน 2010 .
  9. ^ นิคลัสเวิร์ ธที่ระบุไว้ในหลายครั้งที่สาธารณะเช่นในการบรรยายที่พิพิธภัณฑ์ Polytechnic, มอสโกในเดือนกันยายนบัญชี 2005 (หลายอิสระมือแรกในที่มีอยู่รัสเซียเช่นหนึ่งที่มีการบันทึกเสียง: Filippova เอเลน่า (22 กันยายน 2005 ) "การบรรยายของ Niklaus Wirth ที่พิพิธภัณฑ์โพลีเทคนิคในมอสโก" .) ที่ทีมออกแบบ Sun Java อนุญาตให้ใช้แหล่งที่มาของคอมไพเลอร์ Oberon หลายปีก่อนปล่อย Java และตรวจสอบ: ความกะทัดรัด (สัมพัทธ์) ความปลอดภัยของประเภท การรวบรวมขยะ ไม่มีการสืบทอดหลายรายการสำหรับคลาส - การออกแบบโดยรวมที่สำคัญเหล่านี้ คุณลักษณะที่ใช้ร่วมกันโดย Java และ Oberon
  10. ^ Patrick Naughtonอ้างถึง Objective-Cว่ามีอิทธิพลอย่างมากต่อการออกแบบภาษาการเขียนโปรแกรม Java โดยระบุว่าอนุพันธ์โดยตรงที่โดดเด่นนั้นรวมถึงอินเทอร์เฟซ Java (ที่ได้มาจากโปรโตคอลของ Objective-C) และคลาส wrapper ดั้งเดิม [3] เก็บถาวร 13 กรกฎาคม 2011 ที่ Wayback Machine
  11. ^ การ วิจัย TechMetrix (1999). "ประวัติชวา" (PDF) . Java Application Servers รายงาน เก็บถาวรจากต้นฉบับ(PDF)เมื่อวันที่ 29 ธันวาคม 2010 โปรเจ็กต์ดำเนินต่อไปภายใต้ชื่อgreenและภาษานั้นใช้UCSD Pascalรุ่นเก่าซึ่งทำให้สามารถสร้างโค้ดสำหรับสื่อความหมายได้
  12. ^ "การสนทนากับเจมส์ กอสลิง – คิว ACM" . คิว.acm.org 31 สิงหาคม 2547 เก็บถาวรจากต้นฉบับเมื่อ 16 กรกฎาคม 2558 . สืบค้นเมื่อ9 มิถุนายน 2010 .
  13. ในฤดูร้อนปี 1996 ซันได้ออกแบบสารตั้งต้นสำหรับโมเดลเหตุการณ์ของ AWT และสถาปัตยกรรมคอมโพเนนต์ JavaBeans Borland มีส่วนอย่างมากต่อกระบวนการนี้ เราตรวจสอบ Delphi Object Pascal อย่างรอบคอบ และสร้างต้นแบบการทำงานของการอ้างอิงเมธอดที่ถูกผูกไว้ เพื่อให้เข้าใจการโต้ตอบกับภาษาการเขียนโปรแกรม Java และ API เอกสารไวท์เปเปอร์เกี่ยวกับผู้แทนของ Microsoft
  14. ^ "ข้อมูลจำเพาะของโบสถ์ (รับทราบ)" (PDF) . เครย์อิงค์ที่ 1 ตุลาคม 2015 ที่จัดเก็บ(PDF)จากเดิมในวันที่ 5 กุมภาพันธ์ 2016 สืบค้นเมื่อ14 มกราคม 2559 .
  15. ^ "แนะนำเอกสารกัมบาส" . เว็บไซต์กัมบาส เก็บถาวรจากต้นฉบับเมื่อ 9 ตุลาคม 2017 . สืบค้นเมื่อ9 ตุลาคม 2017 .
  16. ^ "Facebook Q & A: สับนำพิมพ์คง PHP โลก" InfoWorld 26 มีนาคม 2557. เก็บถาวรจากต้นฉบับเมื่อ 13 กุมภาพันธ์ 2558 . สืบค้นเมื่อ11 มกราคม 2558 .
  17. ^ "เขียนครั้งเดียว วิ่งไปไหน" . คอมพิวเตอร์รายสัปดาห์ . 2 พฤษภาคม 2545 . สืบค้นเมื่อ27 กรกฎาคม 2552 .
  18. ^ a b c "1.2 Design Goals of the Java™ Programming Language" . ออราเคิล. 1 มกราคม 2542 เก็บถาวรจากต้นฉบับเมื่อ 23 มกราคม 2556 . สืบค้นเมื่อ14 มกราคม 2556 .
  19. a b McMillan, Robert (1 สิงหาคม 2013). "จาวาสูญเสียโมโจหรือไม่" . แบบมีสาย. comเก็บถาวรจากต้นฉบับเมื่อ 15 กุมภาพันธ์ 2017 . สืบค้นเมื่อ8 มีนาคม 2017 . Java กำลังเสื่อมโทรม อย่างน้อยตามชุดหนึ่งที่คอยจับตาดูโลกที่เปลี่ยนแปลงตลอดเวลาของภาษาโปรแกรมคอมพิวเตอร์ เป็นเวลากว่าทศวรรษแล้วที่TIOBE Programming Community Index ได้ครองตำแหน่งและกลับมาอยู่อันดับต้นๆ อีกครั้ง ซึ่งเป็นภาพรวมของความกระตือรือร้นของนักพัฒนาซอฟต์แวร์ที่จะพิจารณาสิ่งต่างๆ เช่น ผลการค้นหาทางอินเทอร์เน็ตเพื่อวัดว่าภาษาต่างๆ มีความหลากหลายมากเพียงใด แต่ช่วงหลัง Java นั้นลื่นไถล
  20. ^ ชาน, โรซาลี (22 มกราคม 2019). "10 ภาษาโปรแกรมส่วนใหญ่ที่นิยมตามที่ 'Facebook สำหรับโปรแกรมเมอร์' " ธุรกิจภายใน . เก็บจากต้นฉบับเมื่อ 29 มิถุนายน 2019 . สืบค้นเมื่อ29 มิถุนายน 2019 .
  21. ^ "รีวิว JavaOne 2013: Java ก้าวสู่อินเทอร์เน็ตของสรรพสิ่ง" . www.oracle.com . เก็บถาวรจากต้นฉบับเมื่อ 19 เมษายน 2016 . สืบค้นเมื่อ19 มิถุนายน 2559 . Alt URL
  22. ^ "เหตุใดฉันจึงควรถอนการติดตั้ง Java เวอร์ชันเก่าออกจากระบบของฉัน" . ออราเคิล. สืบค้นเมื่อ9 กันยายน 2559 .
  23. ^ Byous จอน (c. 1998) "เทคโนโลยี Java: ปีแรก" . ซันนักพัฒนาเครือข่าย ซันไมโครซิสเต็มส์ . เก็บถาวรจากต้นฉบับเมื่อ 20 เมษายน 2548 . สืบค้นเมื่อ22 เมษายน 2548 .
  24. ^ การเขียนโปรแกรมเชิงวัตถุ "ประวัติความเป็นมาของเทคโนโลยี Java" ซันนักพัฒนาเครือข่าย ค. 2538. เก็บถาวรจากต้นฉบับเมื่อ 10 กุมภาพันธ์ 2553 . สืบค้นเมื่อ30 เมษายน 2010 .
  25. เมอร์ฟี, คีรอน (4 ตุลาคม พ.ศ. 2539) “แล้วทำไมพวกเขาถึงตัดสินใจเรียกมันว่าจาวา?” . JavaWorld สืบค้นเมื่อ2020-07-13 .
  26. ^ คาบุตซ์ ไฮนซ์; Once Upon ไม้โอ๊ค ที่จัดเก็บ 13 เมษายน 2007 ที่เครื่อง Wayback อาร์ทิมา. สืบค้นเมื่อ 29 เมษายน 2550.
  27. ^ "JAVASOFT จัดส่ง JAVA 1.0" . เก็บถาวรจากต้นฉบับเมื่อ 10 มีนาคม 2550 . สืบค้นเมื่อ13 พฤษภาคม 2018 .
  28. ^ การเขียนโปรแกรมเชิงวัตถุกับ Java: Essentials และการประยุกต์ใช้ Tata McGraw-Hill Education. NS. 34.
  29. ^ "JSG – กลุ่มศึกษา Java" . open-std.org เก็บถาวรจากต้นฉบับเมื่อ 25 สิงหาคม 2549 . สืบค้นเมื่อ2 สิงหาคม 2549 .
  30. ^ "ทำไม Java ™เป็น - ไม่ - มาตรฐานครั้งที่สอง" (PDF) เก็บถาวร(PDF)จากต้นฉบับเมื่อ 13 มกราคม 2014 . สืบค้นเมื่อ3 มิถุนายน 2018 .
  31. ^ "ECMA คืออะไร—และทำไม Microsoft ถึงสนใจ" . เก็บถาวรจากต้นฉบับเมื่อ 6 พฤษภาคม 2014 . สืบค้นเมื่อ6 พฤษภาคม 2014 .
  32. ^ "เว็บไซต์ Java Community Process" . Jcp.org 24 พฤษภาคม 2553 เก็บถาวรจากต้นฉบับเมื่อ 8 สิงหาคม 2549 . สืบค้นเมื่อ9 มิถุนายน 2010 .
  33. ^ "JavaOne: อาทิตย์ - เป็นกลุ่มของ Java เป็นโอเพนซอร์ซ" GrnLight.net. เก็บถาวรจากต้นฉบับเมื่อ 27 พฤษภาคม 2014 . สืบค้นเมื่อ26 พฤษภาคม 2014 .
  34. ^ "การพัฒนาบทบาทของดวงอาทิตย์เป็น Java ศาสนา" โอเรลลี่ มีเดีย . เก็บถาวรจากต้นฉบับเมื่อ 15 กันยายน 2553 . สืบค้นเมื่อ2 สิงหาคม 2552 .
  35. ^ "Oracle และ Java" . oracle.com . ออราเคิล คอร์ปอเรชั่น. เก็บถาวรจากต้นฉบับเมื่อ 31 มกราคม 2010 . สืบค้นเมื่อ23 สิงหาคม 2010 . Oracle เป็นผู้สนับสนุนชั้นนำและสำคัญของ Java นับตั้งแต่เปิดตัวในปี 1995 และรับบทบาทใหม่ในฐานะผู้ดูแลเทคโนโลยี Java ด้วยความมุ่งมั่นอย่างไม่ลดละในการส่งเสริมชุมชนที่มีส่วนร่วมและความโปร่งใส
  36. ^ กอสลิง, เจมส์ (9 เมษายน 2010) "เวลาก้าวต่อไป..." บนเส้นทางสายใหม่ . เก็บจากต้นฉบับเมื่อ 5 พฤศจิกายน 2553 . สืบค้นเมื่อ16 พฤศจิกายน 2011 .
  37. ^ หัวข้อ Dalibor. "การย้ายไปยังเว็บที่ไม่มีปลั๊กอิน" . เก็บจากต้นฉบับเมื่อ 16 มีนาคม 2016 . สืบค้นเมื่อ15 มีนาคม 2559 .
  38. ^ "เรียนรู้เกี่ยวกับเทคโนโลยี Java" . ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 24 พฤศจิกายน 2554 . สืบค้นเมื่อ21 พฤศจิกายน 2554 .
  39. ^ "ออราเคิลสนับสนุน Java SE Roadmap" ออราเคิล. 13 พฤษภาคม 2563 . สืบค้นเมื่อ11 ธันวาคม 2020 .
  40. ^ "JAVASOFT จัดส่ง JAVA 1.0" . ซัน .คอม เก็บถาวรจากต้นฉบับเมื่อ 10 มีนาคม 2550 . สืบค้นเมื่อ5 กุมภาพันธ์ 2551 .
  41. ^ แชนเดอร์, ชารัต. "แนะนำ Java SE 11" . oracle.com . เก็บถาวรจากต้นฉบับเมื่อ 26 กันยายน 2018 . สืบค้นเมื่อ26 กันยายน 2018 .
  42. ^ "การมาถึงของ Java 15!" . ออราเคิล . 15 กันยายน 2563 . สืบค้นเมื่อ15 กันยายน 2020 .
  43. ^ "ภาพรวมการ์ด Java" . เครือข่ายเทคโนโลยีของออราเคิล ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 7 มกราคม 2015 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  44. ^ "แพลตฟอร์ม Java, Micro Edition (Java ME)" . เครือข่ายเทคโนโลยีของออราเคิล ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 4 มกราคม 2015 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  45. ^ "จาวา SE" . เครือข่ายเทคโนโลยีของออราเคิล ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 24 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  46. ^ "แพลตฟอร์ม Java รุ่นองค์กร (Java EE)" . เครือข่ายเทคโนโลยีของออราเคิล ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 17 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  47. ^ "แพลตฟอร์ม JVM (Java Virtual Machine) ขึ้นกับหรือเป็นอิสระจากแพลตฟอร์มหรือไม่ อะไรคือข้อดีของการใช้ JVM และให้ Java เป็นภาษาที่แปลแล้ว" . บทสัมภาษณ์โปรแกรมเมอร์ เก็บถาวรจากต้นฉบับเมื่อ 19 มกราคม 2015 . สืบค้นเมื่อ19 มกราคม 2558 .
  48. ^ Jelovic, จัน "ทำไม Java จะช้ากว่า C++เสมอ" เก็บถาวรจากต้นฉบับเมื่อ 11 กุมภาพันธ์ 2008 . สืบค้นเมื่อ15 กุมภาพันธ์ 2551 .
  49. ^ กูเกิล. "การรับรู้ในวง C ++ / Java / Go / สกาล่า" (PDF) สืบค้นเมื่อ12 กรกฎาคม 2555 .
  50. ^ "ไซแมนเทค Just-In-Time Java คอมไพเลอร์จะถูกรวมเข้าไปในดวงอาทิตย์ JDK 1.1" เก็บถาวรจากต้นฉบับเมื่อ 28 มิถุนายน 2010 . สืบค้นเมื่อ1 สิงหาคม 2552 .
  51. ^ ซัลซิก โซรัน; ปาร์ค, ฮีจอง; Teich, เจอร์เก้น; มาลิก, อวินาช; นาดีม, มูฮัมหมัด (22 กรกฎาคม 2017). "Noc-HMP: โปรเซสเซอร์ Multicore ที่แตกต่างกันสำหรับระบบสมองกลฝังตัวที่ออกแบบใน SystemJ" ธุรกรรม ACM ระบบอัตโนมัติการออกแบบระบบอิเล็กทรอนิกส์ 22 (4): 73. ดอย : 10.1145/3073416 . ISSN 1084-4309 . S2CID 11150290 .  
  52. ^ "NullPointerException" . ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 6 พฤษภาคม 2014 . สืบค้นเมื่อ6 พฤษภาคม 2014 .
  53. ^ "ข้อยกเว้นใน Java" . อาร์ทิมา.คอม เก็บถาวรจากต้นฉบับเมื่อ 21 มกราคม 2552 . สืบค้นเมื่อ10 สิงหาคม 2010 .
  54. ^ "Java HotSpot ™เสมือนประสิทธิภาพของเครื่องเพิ่มประสิทธิภาพ" ออราเคิล.คอม เก็บถาวรจากต้นฉบับเมื่อ 29 พฤษภาคม 2017 . สืบค้นเมื่อ26 เมษายน 2017 .
  55. ^ "ตัวดำเนินการโอเวอร์โหลด (C# เทียบกับ Java)" . C # สำหรับ Java Developers ไมโครซอฟต์. เก็บถาวรจากต้นฉบับเมื่อ 7 มกราคม 2015 . สืบค้นเมื่อ10 ธันวาคม 2014 .
  56. ^ "มรดกของรัฐ การนำไปปฏิบัติ และประเภท"หลายรายการ ชวาสอน™ ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 9 พฤศจิกายน 2014 . สืบค้นเมื่อ10 ธันวาคม 2014 .
  57. ^ "บทเรียน: มองใกล้ ๆ ที่ Hello World Application" . ชวา™สอน> การเริ่มต้น ออราเคิล คอร์ปอเรชั่น . เก็บถาวรจากต้นฉบับเมื่อ 17 มีนาคม 2554 . สืบค้นเมื่อ14 เมษายน 2011 .
  58. ^ "เลิกใช้ APIs, คุณสมบัติและตัวเลือก" www.oracle.com . สืบค้นเมื่อ31 พฤษภาคม 2019 .
  59. ^ "Applet (แพลตฟอร์ม Java SE 7 )" . docs.oracle.com ครับ สืบค้นเมื่อ1 พฤษภาคม 2020 .
  60. ^ "คืออะไรหน้า JSP หรือไม่ - Java EE 5 กวดวิชา" docs.oracle.com ครับ สืบค้นเมื่อ1 พฤษภาคม 2020 .
  61. ^ "Trail: การสร้าง GUI ด้วย JFC / Swing (จาวา™ Tutorials)" docs.oracle.com ครับ สืบค้นเมื่อ1 พฤษภาคม 2020 .
  62. ^ "ออกจาก JDK 11 JavaFX 11 มาเป็นโมดูลแบบสแตนด์อโลน" สืบค้นเมื่อ13 ตุลาคม 2020 .
  63. ^ "เริ่มต้นกับ JavaFX: Hello World, JavaFX สไตล์ | JavaFX 2 สอนและเอกสาร" docs.oracle.com ครับ สืบค้นเมื่อ1 พฤษภาคม 2020 .
  64. ^ "ชวาและสกาล่าของระบบการพิมพ์มีความไม่มั่นคง" (PDF) เก็บถาวร(PDF)จากต้นฉบับเมื่อ 28 พฤศจิกายน 2016 . สืบค้นเมื่อ20 กุมภาพันธ์ 2017 .
  65. ^ อาร์โนลด์, เคน. "ยาสามัญถือว่าเป็นอันตราย" . java.net. เก็บถาวรจากต้นฉบับเมื่อ 10 ตุลาคม 2550 . สืบค้นเมื่อ10 กันยายน 2558 . ความคิดเห็นเพิ่มเติมเกี่ยวกับบทความต้นฉบับที่มีอยู่ในภาพรวมของการเก็บถาวรก่อนหน้านี้
  66. ^ Jelovic, จัน "ทำไม Java จะช้ากว่า C++เสมอ" www.jelovic.com. เก็บถาวรจากต้นฉบับเมื่อ 11 กุมภาพันธ์ 2008 . สืบค้นเมื่อ17 ตุลาคม 2555 .
  67. ^ Owens ฌอนอาร์"ชวาและ int ไม่ได้ลงนามสั้นที่ไม่ได้ลงชื่อไบต์ไม่ได้ลงนามที่ไม่มีการลงชื่อยาว ฯลฯ (หรือค่อนข้างขาดมัน)" เก็บถาวรจากต้นฉบับเมื่อ 20 กุมภาพันธ์ 2552 . สืบค้นเมื่อ4 กรกฎาคม 2554 .
  68. ^ คาฮัน, วิลเลียม. "วิธีการของ Java Floating-Point เจ็บทุกคนทุกที่" (PDF) วิศวกรรมไฟฟ้าและวิทยาการคอมพิวเตอร์ University of California at Berkeley เก็บถาวร(PDF)จากต้นฉบับเมื่อ 5 กันยายน 2555 . สืบค้นเมื่อ4 มิถุนายน 2554 .
  69. ^ "คุณตรวจสอบ Java แล้วหรือยัง" . เก็บถาวรจากต้นฉบับเมื่อ 21 กันยายน 2555 . สืบค้นเมื่อ23 ธันวาคม 2011 .
  70. ^ Cadenhead, Rogers (20 พฤศจิกายน 2017), การทำความเข้าใจวิธีการทำงานของโปรแกรม Java , ดึงข้อมูลเมื่อ 26 มีนาคม 2019
  71. ^ วูล์ฟ, นิคกี้ (26 พฤษภาคม 2559). "Google ชนะการต่อสู้ทางกฎหมายกับ Oracle นาน 6 ปี เหนือลิขสิทธิ์โค้ด Android" . เดอะการ์เดียน . ISSN 0261-3077 . สืบค้นเมื่อ26 มีนาคม 2019 . 
  72. ^ "ภาพรวมกรอบงานคอลเลกชั่น" . เอกสาร Java ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 31 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  73. ^ "ภาพรวม Java ™ความปลอดภัย" เอกสาร Java ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 3 มกราคม 2015 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  74. ^ "เส้นทาง: ความเป็นสากล" . ชวาสอน™ ออราเคิล. เก็บถาวรจากต้นฉบับเมื่อ 31 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  75. ^ "วิธีการเขียนความคิดเห็นหมอสำหรับเครื่องมือ Javadoc" เครือข่ายเทคโนโลยีของออราเคิล ออราเคิล. เก็บจากต้นฉบับเมื่อ 18 ธันวาคม 2014 . สืบค้นเมื่อ18 ธันวาคม 2014 .
  76. ^ Niccolai เจมส์ (24 มกราคม 2001) "ซัน ไมโครซอฟต์ ยุติคดีชวา" . JavaWorld ข่าวบริการ IDG สืบค้นเมื่อ2020-07-13 .
  77. ^ แวน เกิร์ป, จิลส์ (13 พฤศจิกายน 2550) "Google Android: ความประทับใจครั้งแรกและการวิจารณ์" . Javalobby สืบค้นเมื่อ7 มีนาคม 2552 . ตรงไปตรงมา ฉันไม่เข้าใจว่าทำไม Google ตั้งใจที่จะเพิกเฉยต่อการใช้งานที่มีอยู่จำนวนมหาศาล สำหรับฉันดูเหมือนว่า "ไม่ได้ประดิษฐ์ขึ้นที่นี่" จะเป็นกรณีที่ไม่ดี ในที่สุด การดำเนินการนี้จะช้าลง มีแพลตฟอร์ม Java มากเกินไปสำหรับโลกมือถือและนี่ก็เป็นอีกแพลตฟอร์มหนึ่ง
  78. ^ มัลลิน, โจ. "ความผิดของ Google ละเมิดสิทธิในการพิจารณาคดีของออราเคิล; อนาคตปวดหัวตามกฎหมายทอผ้า" กฎหมายและความผิดปกติของ อาส เทคนิค. เก็บถาวรจากต้นฉบับเมื่อ 8 พฤษภาคม 2555 . สืบค้นเมื่อ8 พฤษภาคม 2555 .
  79. ^ มัลลิน, โจ (31 พฤษภาคม 2555). "Google ชนะการพิจารณาคดี API สำคัญกรณีของออราเคิลทำลาย" อาส เทคนิค . เก็บถาวรจากต้นฉบับเมื่อ 12 มีนาคม 2017 . สืบค้นเมื่อ1 มิถุนายน 2555 .
  80. ^ Rosenblatt, Seth (9 พฤษภาคม 2014). "ด้านศาลกับ Oracle กว่า Android ในการอุทธรณ์สิทธิบัตร Java" CNET . เก็บถาวรจากต้นฉบับเมื่อ 10 พฤษภาคม 2014 . สืบค้นเมื่อ10 พฤษภาคม 2014 .
  81. ^ มัลลิน, โจ (26 พ.ค. 2559). "Google เต้นของออราเคิล Android ทำให้ 'ยุติธรรมใช้' ของ Java APIs" อาส เทคนิค . เก็บถาวรจากต้นฉบับเมื่อ 20 มกราคม 2017 . สืบค้นเมื่อ26 พฤษภาคม 2559 .
  82. ^ Farivar ไซรัส (27 มีนาคม 2018) " "การใช้งานของ Google แพคเกจ Java API ก็ไม่ยุติธรรม "อุทธรณ์ศาลกฎ" อาส เทคนิค. สืบค้นเมื่อ6 สิงหาคม 2019 .
  83. ^ ลี ทิโมธี (23 เมษายน 2019) "Google ขอให้ศาลฎีกาพิจารณาคดีหายนะลบล้างลิขสิทธิ์ API" อาส เทคนิค . สืบค้นเมื่อ23 เมษายน 2019 .
  84. ^ Google LLC กับ Oracle America, Inc 593 US ____ (2021)

ผลงานที่อ้างถึง

ลิงค์ภายนอก

  • คำจำกัดความพจนานุกรมของJavaที่ Wiktionary
  • สื่อเกี่ยวกับJavaที่ Wikimedia Commons
  • การเขียนโปรแกรม Javaที่ Wikibooks
  • สื่อการเรียนรู้เกี่ยวกับJavaที่ Wikiiversity