削除された内容 追加された内容
Yamadamn (会話 | 投稿記録)
m バージョン表内のAmazon Correttoの無料公開アップデート期限が古かったため見直し、OpenJDKもOracle OpenJDKであることを明記。
編集の要約なし
(同じ利用者による、間の2版が非表示)
6行目:
| name = Java
| logo = File: Java 20131025 1864663017.jpg
| released = {{start date and age|1995}}年5月23日α版<br/>1995年秋β版<br/>1996年1月23日ver1.0
| designer = [[Java Community Process]]
| latest release version = Java Standard Edition 15.0.1
13行目:
| implementations = [[Javaプラットフォーム]]
|paradigm = [[オブジェクト指向]], コンポーネントベース, [[ジェネリックプログラミング|ジェネリック]], [[関数型プログラミング|関数型]], [[命令型プログラミング]]
|influenced_by=CLU,<ref name="BarbaraLiskov">{{cite book |title=Program Development in Java - Abstraction, Specification, and Object-Oriented Design|author=[[Barbara LiskovC++]] with [[John Guttag]]|publisher=USA, Addison Wesley|year=2000}}</ref> [[Simula|Simula67]],<ref name="BarbaraLiskov"/> [[C++Ada]],<ref>{{cite web|url={{Google books|0rUtBAAAQBAJ|page=PA133|keywords=|text=|plainurl=yes}}|title=Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans|first=Harry H.|last=Chaudhary|accessdate=2016-05-29|date=2014-07-28}}</ref> [[Eiffel]],<ref>{{cite web|author1=Gosling, James|author2=McGilton, Henry|title=The Java Language Environment|date=May 1996|url=https://www.oracle.com/technetwork/java/langenv-140151.html|access-date=May 6, 2014|archive-url=https://web.archive.org/web/20140506214653/http://www.oracle.com/technetwork/java/langenv-140151.html|archive-date=May 6, 2014|url-status=live|df=mdy-all}}</ref>[[Mesa]],<ref>{{cite web|author1=Gosling, James|author2=Joy, Bill|author3=Steele, Guy|author4=Bracha, Gilad|title=The Java Language Specification, 2nd Edition|url=https://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#237601|access-date=February 8, 2008|archive-url=https://web.archive.org/web/20110805051057/http://java.sun.com/docs/books/jls/second_edition/html/intro.doc.html#237601|archive-date=August 5, 2011 |url-status=live |df=mdy-all}}</ref> [[Modula-3]],<ref>{{cite web|url=http://www.computerworld.com.au/index.php/id;1422447371;pp;3;fp;4194304;fpid;1|title=The A-Z of Programming Languages: Modula-3|publisher=Computerworld.com.au|accessdate=2010-06-09|url-status=dead|archiveurl=https://web.archive.org/web/20090105145818/http://www.computerworld.com.au/index.php/id%3B1422447371%3Bpp%3B3%3Bfp%3B4194304%3Bfpid%3B1|archivedate=January 5, 2009|df=mdy-all}}</ref> [[Oberon]],<ref>[[Niklaus Wirth]] stated on a number of public occasions, e.g. in a lecture at the Polytechnic Museum, Moscow in September 2005 (several independent first-hand accounts in Russian exist, e.g. one with an audio recording: {{cite web|author=Filippova, Elena|title=Niklaus Wirth's lecture at the Polytechnic Museum in Moscow|date=September 22, 2005|url=http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1155}}), that the Sun Java design team licensed the Oberon compiler sources a number of years prior to the release of Java and examined it: a (relative) compactness, type safety, garbage collection, no multiple inheritance for classes{{snd}} all these key overall design features are shared by Java and Oberon.</ref> [[Objective-C]],<ref>[[Patrick Naughton]] cites [[Objective-C]] as a strong influence on the design of the Java programming language, stating that notable direct derivatives include Java interfaces (derived from Objective-C's [[Objective-C#Protocols|protocol]]) and primitive wrapper classes. [http://cs.gmu.edu/~sean/stuff/java-objc.html] {{Webarchive|url=https://web.archive.org/web/20110713014816/http://cs.gmu.edu/~sean/stuff/java-objc.html|date=July 13, 2011}}</ref>[[Object Pascal]]<ref>In the summer of 1996, Sun was designing the precursor to what is now the event model of the AWT and the JavaBeans component architecture. Borland contributed greatly to this process. We looked very carefully at Delphi Object Pascal and built a working prototype of bound method references in order to understand their interaction with the Java programming language and its APIs.[https://web.archive.org/web/20120627043929/http://java.sun.com/docs/white/delegates.html White Paper About Microsoft's Delegates]</ref>
| influenced = [[C Sharp|C#]], [[D言語|D]], [[Dart]], [[Groovy]], [[Scala]], [[Kotlin]], [[Ceylon]]
| operating system = [[Solaris]], [[Linux]], [[Microsoft Windows|Windows]],<br>[[macOS]], [[AIX]], [[i5/OS|System i]]
21行目:
}}
{{プログラミング言語}}
'''Java'''(ジャヴァ)は、汎用[[プログラミング言語]]と[[プラットフォーム (コンピューティング)|ソフトウェアプラットフォーム]]の双方を指している総称ブランドである<ref>{{Cite web|url=https://www.java.com/en/download/faq/whatis_java.xml|title=What is Java and why do I need it?|language=en|accessdate=2019-01|publisher=}}</ref>。[[オラクル (企業)|オラクル社]]およびその関連会社の登録商標である。1996年に[[サン・マイクロシステムズ|サン・マイクロシステムズ社]]によって市場リリースされ、2010年に同社がオラクル社に吸収合併された事により、Javaの版権もそちらに移行した。
'''Java'''(ジャヴァ)は、[[クラスベース]]の[[オブジェクト指向プログラミング|オブジェクト指向]]の、実装の[[結合度|依存関係]]をできるだけ少なくするように設計された汎用[[プログラミング言語]]である。これは、アプリケーション開発者が一度書いたらどこでも実行できるようにすること(WORA:''write once, run anywhere'')<ref>{{Cite web|url=http://www.computerweekly.com/Articles/2002/05/02/186793/write-once-run-anywhere.htm|title=Write once, run anywhere?|date=May 2, 2002|publisher=[[Computer Weekly]]|accessdate=2009-07-27}}</ref>を目的としている。つまり、[[コンパイラ|コンパイル]]されたJavaコードは、再コンパイルを必要とせずにJavaをサポートするすべてのプラットフォーム上で実行できる<ref name="design_goals">{{Cite web|url=https://www.oracle.com/technetwork/java/intro-141325.html|title=1.2 Design Goals of the Java™ Programming Language|publisher=Oracle|date=January 1, 1999|accessdate=2013-01-14|archiveurl=https://web.archive.org/web/20130123204103/http://www.oracle.com/technetwork/java/intro-141325.html|archivedate=January 23, 2013}}</ref>。Javaアプリケーションは、通常、基礎となるコンピュータアーキテクチャに関係なく、あらゆるJava仮想マシン(JVM)上で実行できるバイトコードにコンパイルされる。Javaの構文は[[C言語|C]]および[[C++|C ++]]に似ているが、どちらよりも[[低水準言語|低レベル]]の機能が少ない。2019年の時点で、[[GitHub]] <ref name=":02">{{Cite web|url=https://www.wired.com/2013/01/java-no-longer-a-favorite/|title=Is Java Losing Its Mojo?|quote=Java is on the wane, at least according to one outfit that keeps on eye on the ever-changing world of computer programming languages. For more than a decade, it has dominated the [[TIOBE index|TIOBE]] Programming Community Index, and is back on top – a snapshot of software developer enthusiasm that looks at things like internet search results to measure how much buzz different languages have. But lately, Java has been slipping.|first=Robert|author=McMillan|date=August 1, 2013|publisher=[[wired.com]]|accessdate=March 8, 2017|archiveurl=https://web.archive.org/web/20170215115409/https://www.wired.com/2013/01/java-no-longer-a-favorite/|archivedate=February 15, 2017}}</ref> <ref>{{Cite web|author=Chan|first=Rosalie|title=The 10 most popular programming languages, according to the 'Facebook for programmers'|url=https://www.businessinsider.de/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1|website=[[Business Insider]]|accessdate=June 29, 2019|archiveurl=https://archive.today/20190629083530/https://www.businessinsider.com/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1&r=DE&IR=T|archivedate=June 29, 2019|date=January 22, 2019}}</ref>によると、Javaは、特に[[クライアントサーバモデル|クライアント/サーバー]]型の[[ウェブアプリケーション|Webアプリケーション]]で使用されている最も人気のあるプログラミング言語の1つであり<ref name=":02" /> <ref>{{Cite web|author=Chan|first=Rosalie|title=The 10 most popular programming languages, according to the 'Facebook for programmers'|url=https://www.businessinsider.de/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1|website=[[Business Insider]]|accessdate=June 29, 2019|archiveurl=https://archive.today/20190629083530/https://www.businessinsider.com/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1&r=DE&IR=T|archivedate=June 29, 2019|date=January 22, 2019}}</ref>、900万人の開発者がいると報告されている<ref>{{Cite web|url=https://www.oracle.com/technetwork/articles/java/afterglow2013-2030343.html|title=JavaOne 2013 Review: Java Takes on the Internet of Things|website=www.oracle.com|accessdate=2016-06-19|archiveurl=https://www.imarslan.com/javaone-2013-review-java-takes-on-the-internet-of-things|archivedate=April 19, 2016}}</ref>。
 
プログラミング言語Javaは、[[C++]]に類似の構文、[[クラスベース]]の[[オブジェクト指向プログラミング|オブジェクト指向]]、[[マルチスレッド]]、[[ガーベジコレクション]]、[[ソフトウェアコンポーネント|コンポーネント指向]]、[[分散コンピューティング]]といった特徴を持ち、平易性重視のプログラム書式による堅牢性と、[[仮想マシン]]上での実行によるセキュリティ性および[[プラットフォーム非依存|プラットフォーム非依存性]]が理念とされている。[[Javaプラットフォーム]]は、Javaプログラムの実行環境または、実行環境と開発環境の双方を統合したソフトウェアであり、[[サーバー (コンピューター)|ビジネスサーバー]]、[[モバイル機器]]、[[組み込みシステム]]、[[スマートカード]]といった様々なハードウェア環境に対応したソフトウェア形態で提供されている。その中枢技術である[[Java仮想マシン]]は各プラットフォーム環境間の違いを吸収しながら、Javaプログラムの適切な共通動作を実現する機能を備えている<ref name="design_goals">{{Cite web|url=https://www.oracle.com/technetwork/java/intro-141325.html|title=1.2 Design Goals of the Java™ Programming Language|publisher=Oracle|date=January 1, 1999|accessdate=2013-01-14|archiveurl=https://web.archive.org/web/20130123204103/http://www.oracle.com/technetwork/java/intro-141325.html|archivedate=January 23, 2013}}</ref>。このテクノロジは''「[[write once, run anywhere]]''」と標榜されていた<ref>{{Cite web|url=http://www.computerweekly.com/Articles/2002/05/02/186793/write-once-run-anywhere.htm|title=Write once, run anywhere?|date=May 2, 2002|publisher=[[Computer Weekly]]|accessdate=2009-07-27}}</ref>。
Javaは元々、[[サン・マイクロシステムズ]](その後[[オラクル|Oracle]]に買収された)の[[ジェームズ・ゴスリン]]によって開発され、Sun Microsystemsの[[Javaプラットフォーム]]のコアコンポーネントとして1995年にリリースされた。オリジナルのJavaコンパイラや[[リファレンス実装]]のJavaコンパイラ、仮想マシン、クラス[[ライブラリ]]は、もともとSunが[[プロプライエタリ・ソフトウェア|独占的なライセンス]]でリリースしていた。2007年5月の時点では、[[Java Community Process]]の仕様に準拠して、SunはそのJava技術のほとんどを[[GNU General Public License]]の下で再ライセンスしていた。一方で、[[GNU Compiler for Java]](バイトコードコンパイラ)、[[GNU Classpath]](標準ライブラリ)、[[IcedTea]]-Web(アプレット用ブラウザプラグイン)など、Sunの技術の代替実装が開発されている。
 
2019年の時点で[[GitHub]]によると<ref>{{Cite web|author=Chan|first=Rosalie|title=The 10 most popular programming languages, according to the 'Facebook for programmers'|url=https://www.businessinsider.de/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1|website=[[Business Insider]]|accessdate=June 29, 2019|archiveurl=https://archive.today/20190629083530/https://www.businessinsider.com/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1&r=DE&IR=T|archivedate=June 29, 2019|date=January 22, 2019}}</ref>、Javaは特に[[クライアントサーバモデル|クライアント/サーバーモデル]]の[[ウェブアプリケーション|Webアプリケーション]]で使用されている最も人気の高いプログラミング言語の1つであり<ref>{{Cite web|author=Chan|first=Rosalie|title=The 10 most popular programming languages, according to the 'Facebook for programmers'|url=https://www.businessinsider.de/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1|website=[[Business Insider]]|accessdate=June 29, 2019|archiveurl=https://archive.today/20190629083530/https://www.businessinsider.com/the-10-most-popular-programming-languages-according-to-github-2018-10?op=1&r=DE&IR=T|archivedate=June 29, 2019|date=January 22, 2019}}</ref>、全世界でおよそ900万人の開発者がいるとレポートされている<ref>{{Cite web|url=https://www.oracle.com/technetwork/articles/java/afterglow2013-2030343.html|title=JavaOne 2013 Review: Java Takes on the Internet of Things|website=www.oracle.com|accessdate=2016-06-19|archiveurl=https://www.imarslan.com/javaone-2013-review-java-takes-on-the-internet-of-things|archivedate=April 19, 2016}}</ref>。最新バージョンは、2020年9月にリリースされたJava 15と、2018年9月にリリースされた長期サポート(LTS)版のJava 11である。オラクル社は未解決のセキュリティ問題によるリスクを回避するために、旧バージョンのアンインストールと新バージョンへの移行を強く推奨している<ref>{{Cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml|title=Why should I uninstall older versions of Java from my system?|publisher=Oracle|accessdate=2016-09-09}}</ref>。
最新バージョンは、2020年9月にリリースされたJava 15と、2018年9月25日にリリースされ現在サポートされている長期サポート(LTS)版のJava 11である。オラクルは、[[レガシーシステム|レガシー]]であるJava 8 LTSについては商用利用向けに2019年1月に最後の無料公開アップデートをリリースしたが、一方で個人利用向けの公開アップデートは無期限(終了時は少なくとも18か月前にJava SE Support Roadmapにて通知予定)<ref>{{Cite web|url=https://blogs.oracle.com/java-platform-group/java-client-roadmap-updates|title=Java Client Roadmap Updates|accessdate=2020-10-27|date=2020-05-13}}</ref>としてJava 8をサポートする予定である。オラクル(およびその他)は、未解決のセキュリティ問題による深刻なリスクがあるため、古いバージョンのJavaをアンインストールすることを強く推奨している<ref>{{Cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml|title=Why should I uninstall older versions of Java from my system?|publisher=Oracle|accessdate=2016-09-09}}</ref>。Java 15とLTSを除いてサポートされなくなったため、オラクルはユーザーに最新バージョン(現在はJava 15)またはLTSリリース版に直ちに移行するようアドバイスしている。
 
== Javaの特徴 ==
44行目:
{{main|Java仮想マシン}}[[プラットフォーム (コンピューティング)|プラットフォーム]]非依存とは、Javaプログラムが特定のハードウェアおよびオペレーティングシステムの機能に依存する事なく、Java実行環境が導入されたあらゆるコンピューター環境上において共通した動作を見せる事を意味する。”''Write once, run anywhere''”(一度プログラムを書いてしまえば、どのコンピューターでも動くよ)がそのスローガンとされていた。Javaのプラットフォーム非依存性は次のようにして実現されている。
 
#[[Javaコンパイラ]]は、Javaプログラムのソースコードを、[[Javaバイトコード]]と呼ばれる[[中間表現]]にコンパイルする。Javaバイトコードは[[アセンブリ言語|アセンブラ]]の[[ニーモニック]]に似たもので、[[Java仮想マシン]]上で実行される専用のコードになる。Javaバイトコードは多く大抵のプラットフォームでは、[[Javaクラスファイル]]と呼ばれるclass拡張子のファイルにまとめられる。
#[[Java仮想マシン]]は、各プラットフォームの環境の違いを吸収するクッション的なソフトウェアである。Java仮想マシンは家電や車両搭載のマイクロコントローラ、モバイル端末、ICカード、サーバーマシンなどの様々なコンピューター環境に対応したバージョンが提供されており、それぞれのプラットフォームにJava実行環境のコアテクノロジとしてインストールされる。
#[[Java仮想マシン]]は、指定された[[Javaクラスファイル]]を[[Javaクラスローダー]]で読み込み、その中の[[Javaバイトコード]]を逐一解釈しながら実行する。これはインタプリタ式に行うものと、[[実行時コンパイラ]]で走行させるものがある。
 
57行目:
=== ガベージコレクション ===
{{see also|ガベージコレクション}}
Javaプログラムのメモリ管理は、[[Java仮想マシン]]に備えられた[[ガベージコレクション]]機能によって行われる。ガベージコレクションとは、すでにどこからも参照されていないオブジェクトを自動的に特定して破棄し、その占有メモリ領域自動的に解放する機能である。人の手によるオブジェクトの生成と破棄を正確に対応させるメモリ管理作業は煩雑化するのが常であり、メモリリークやその反対の不正解放によるプログラムエラーを引き起こしやすくバグの温床の代表格と見なされていた。自動化されたガベージコレクションによってJavaプログラマは複雑なメモリ管理作業から解放される。一つのシステムスレッドに乗って未参照のオブジェクトを探し続ける実行プロセスはガベージコレクタと呼ばれる。ガベージコレクタはどこかの末端だけが途切れている参照の連鎖のかたまりも正確に特定して参照の孤島に例えられたメモリ領域を一気に解放する事もできる。Javaではガベージコレクションの機能に並々ならぬ力が入れられており、その技術更新は現在も進行中である。[[世代別ガベージコレクション|世代別ガベージコレクタ]]、応答時間短縮化ガーベジコレクタ、休止時間短縮化ガーベジコレクタなどの技術が導入されて新は現在も進行中であに改訂を重ねている。
 
=== 分散コンピューティング ===
{{see also|分散コンピューティング}}
Javaの[[分散コンピューティング]]プログラミングは[[Object Request Broker|オブジェクト要求ブローカー]]の機構に基づいた技術であている。これはネットワーク上に存在する様々なプラットフォームの間で、互いに異なる環境を意識せずにリクエストとレスポンスを送りあい任意のタスクを遂行する[[分散システム]]の構築をサポートする。各プラットフォーム上で稼働されるサーバーアプリケーションとクライアントアプリケーションはそれぞれオブジェクトを内包しており、業界共通規格の[[Common Object Request Broker Architecture|CORBA]]またはJava独自規格の[[Java Remote Method Invocation|RMI]]が提供する運用アーキテクチャと通信プロトコルを通して他のオブジェクトと相互にコミュニケーションする。それらは分散オブジェクトと呼ばれている。業務用システムではすでにCORBAが普及していたので、高パフォーマンスだがJavaプラットフォーム間の限定になるRMIはその後追いであった。そのためRMIはCORBAと連携できるようにRMI over IIOPなどの様々な技術が実装されている。CORBAの通信プロトコルは[[IIOP]]、RMIの方はJRMPである。分散オブジェクトを実装するためのAPIとクラスライブラリの多くは[[Java EE|エンタープライズ版]](Java EE)に属している。分散オブジェクトの中でサーバー機能に特化されたものは[[Enterprise JavaBeans|EJB]](''Enterprise JavaBeans'')と呼ばれている。
 
[[Enterprise JavaBeans|EJB]]は、クライアントと同期通信を行いトランザクションを管理するセッションビーン、データベースとリンクして永続データを管理するエンティティビーン、様々なイベントからの非同期通信を管理するメッセージドリブンビーンの三種に大別される。これらのEJBは、[[EJBコンテナ]]と呼ばれる業務用サーバーアプリケーションに内包されて運用される。EJB同士を含む他の分散オブジェクトと通信する際のプロトコルはIIOPかJRMPが使われる。与えられた識別名から分散オブジェクトと各種リソースのネットワーク上の位置を特定してアクセスさせる機能が[[Java Naming and Directory Interface|JNDI]]である。EJBコンテナは[[Webコンテナ|WEBコンテナ]]と連携して運用されるのが普通である。EJBコンテナはWEBコンテナの方より一般的なクライアント窓口として使用することが多い。WEBコンテナは[[サーブレット]]と[[JavaServer Pages|JSP]](''Java Server Pages'')を内包しているWEB用サーバーアプリケーションであり、[[HTTP]]プロトコルを通して一般的な[[WEBブラウザ]]との同期通信を行う。WEB方面の分散オブジェクトは、WEBコンポーネントと呼ばれる。JSPはいわゆるWEBサイトの表示に特化したコンポーネントである。サーブレットはWEBサイトへのリクエストを処理し、場合によってはセッションビーンにトランザクションを委譲するコンポーネントである。[[EJBコンテナ]]では[[JBoss]]や[[WebSphere Application Server|WebSphere]]などが有名である。これらEJBコンテナはWEBコンテナと統合されて提供されている事が多い。[[Webコンテナ|WEBコンテナ]]では[[Apache HTTP Server|Apatche]]が有名である。
 
=== セキュリティ ===
{{see also|サンドボックス (セキュリティ)}}
分散ネットワークシステムプログラミング指向す重視しているJavaは、[[サンドボックス (セキュリティ)|サンドボックス]]モデルに基づいたセキュリティ機構を備えている。これは遠隔ダウンロードされた追加プログラム([[Javaバイトコード]])による実行環境への予期せぬ操作やユーザー資源への好ましくないアクセスを防止するためのものである。分散(''distributed'')指向のJavaプログラムでは必要に応じてクラスを追加ロードする機会が多いので、サンドボックス実行は必須である。サンドボックス機能は、仮想マシン上の実行が同時にモニタリングを兼ねているので無理なく実現されている。大抵は以下の手順になる。
 
*[[クラスローダ|クラスローダー]]はバイトコードをダウンロードして順次クラス化する。
82 ⟶ 83行目:
'''家電向けプロジェクトの立ち上げ(1990年12月)'''
[[ファイル:James Gosling 2008.jpg|サムネイル|181x181ピクセル|ジェームズ・ゴスリン]]
Javaの歴史は、1990年12月に[[サン・マイクロシステムズ]]社が、次世代の家電製品が内蔵するマイクロコントローラ向けのプログラミング言語を開発するステルス・ための水面下プロジェクトをリサーチ段階を兼ねて試験的に立ち上げた事から始まる。サン社はこの分野が今後の重要市場になると予測していた。サン社のエンジニアである[[ジェームズ・ゴスリン]]とパトリック・ノートンの参加により、現実味を帯びたプロジェクトの名称は正式に「グリーンプロジェクト」と定められた。彼らはカリフォルニア州[[メンローパーク (カリフォルニア州)|メンローパーク]]市サンドヒルロードにある用意された比較的小さなオフィスで開発を始めた。
 
'''Oak言語とGreen OSの誕生(1991年)'''
88 ⟶ 89行目:
グリーンチーム内では当時のメインストリームであったオブジェクト指向を採用する事で一致していた。彼らはそのモデル言語である[[C++]]に白羽の矢を立て、当初はその移植版を検討していたが、プロジェクトの対象が家電製品の[[組み込みシステム]]であったために自然と却下された。C++の複雑な言語仕様はコンピュータ資源の浪費とプログラムエラーの発生率を高めがちであり、堅牢性と安全性が最重要の家電製品の制御装置には不向きであると判断されたためだった。加えてC++では[[移植性]]に対応できない点も指摘されており、プロジェクトの中で[[プラットフォーム非依存]]が特に重要な議題として上がった。彼らはC++に代わる言語の開発と同時に、あらゆる機器に容易に移植できるプラットフォームの必要性も認識するようになった。こうして新言語プログラムの動作環境になる「Green OS」の開発も始められた。一方で、[[Mesa]]言語と[[C言語]]の長所を理想にしていたサン社エンジニアの[[ビル・ジョイ]]は、C++をモデルにした新しいオブジェクト指向言語の開発を提案するワーキングペーパーに''Further''(彼方へ)という題名を付けて自社に上申した。それを受けてまずジェームズ・ゴスリンがC++の拡張言語を提出した。ゴスリンはこれを「C++ ++ --」と名付けたがすぐに取り下げ、改めて一から設計しなおしたプログラミング言語を1991年秋に誕生させた。オフィスの側に立つオークの木を眺めながら開発を進めていたゴスリンはこの新しい言語に「Oak」という名前をつけた。これがJavaの前身である。
 
'''携帯端末、テレビ機器市場への参入と撤退(1992年~1994年5月)'''[[ファイル:Duke3D.png|thumb|Javaのマスコット「'''Duke'''」with [[BSDライセンス]]|代替文=|190x190ピクセル]]1992年夏にはGreen OSを実際の機器に載せてOakプログラムを実行できるようになっていた。この頃になるとより広範囲な可能性を秘めるようになったグリーンプロジェクトの対象は当初の家電機器から、当時のトレンドであった[[携帯情報端末]](PDA)へとシフトされていた。1992年9月3日に最初のデモンストレーションが開催され「Star7」という名のPDA機器がOakプログラムの初のお披露目舞台になった。このStar7のユーザーインターフェース上で後のマスコットキャラ「Duke」が初登場している。1992年11月、サン社はファーストパーソン社を設立しグリーンチームをそちらに所属させた。次世代のインタラクティブ機器に関心を持つファーストパーソン社は、ケーブルテレビ用[[セットトップボックス]]事業への参入を決めて、[[タイム・ワーナー|タイムワーナー]]社と[[3DO]]社にそれぞれOakテクノロジを提示したが、その高度な柔軟さが逆に倦厭されて契約実現には到らなかった。サン本社はファーストパーソン社の解散を決め、グリーンチームも本社に戻された。
 
'''ワールドワイドウェブ参入(1994年6月~1994年9月)'''
98 ⟶ 99行目:
1994年秋までにグリーンチームは、Oakを「Java」に、WebRunnerを「[[HotJava]]」に改称した。Green OSは「Java Runtime Environment」に落とし込まれた。改称の理由はOakがすでにビデオカードアダプタ製造会社の登録商標になっていたからだった。この命名は一部のチームメンバーがよく出入りしていた近くのコーヒーショップで決定されたと言われる。Javaの由来は不明とされているが、ロゴが示している通りコーヒーに因んでいるのは明らかである。ジャワ島はコーヒー豆の名産地であり、豆(''Bean'')はJavaテクノロジ内でコンポーネントを指す用語にされている。
 
1994年10月、JavaランタイムとHotJavaブラウザがサン社の幹部社員たちの前でデモンストレーションされた。1995年5月にアルファ版が社内公開され、5月23日のSunワールドカンファレンスで、JavaランタイムとHotJavaブラウザが社外初披露された。ここでは[[Javaアプレット]]の技術がセールスポイント的にアピールされ、同時に[[ネットスケープコミュニケーションズ|ネットスケープ社]]が「[[Netscape Navigator (ネットスケープコミュニケーションズ)|Netscape Navigator]]」ブラウザへもこのアプレット機能を配備するとアナウンスして業界の注目を集めた。1995年秋にベータ版が社外公開された。1996年1月9日にサン社は正式にJavaソフトウェア部門を立ち上げた。基礎およびコアテクノロジは市場リリースに恥じない段階まで進捗していたが、その他テクノロジは未だ途上段階で統合基盤であるプラットフォームと呼べる域までは達しておらず、初リリースのプロダクト名はJavaランタイム環境を内包したデヴェロップメントキットになった。1月23日に最初の公開バージョンである「JDK 1.0」が市場リリースされた。
 
=== バージョン履歴 ===
{{main|Javaバージョン履歴}}1996年1月の初リリースからバージョン更新はおおむね数年おきに行われていたが <ref>{{Cite web|url=http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|title=JAVASOFT SHIPS JAVA 1.0|accessdate=2008-02-05|archiveurl=https://web.archive.org/web/20070310235103/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|archivedate=March 10, 2007}}</ref>、2017年9月の「Java SE 9」から一定の機能蓄積を待たずに強制公開する旨が発表され、毎年3月9月の年二回定期リリース制に変更された。それに伴い従来の長期間サポート(LTS)制度も廃止され、原則的に次回バージョンまでの半年間サポートになった。2018年9月の「Java SE 11」から有償契約LTS制度が発表され、このバージョンはLTS対象とされた<ref>{{Cite web|url=https://blogs.oracle.com/java-platform-group/introducing-java-se-11|title=Introducing Java SE 11|first=Sharat|author=Chander|website=oracle.com|accessdate=September 26, 2018|archiveurl=https://web.archive.org/web/20180926093144/https://blogs.oracle.com/java-platform-group/introducing-java-se-11|archivedate=September 26, 2018}}</ref>。LTS対象バージョンは安定版、そうでないものは新機能提供版といった位置付けである。現行のLTS対象バージョンは「Java SE 11」と「Java SE 8」である。
 
{| class="wikitable" style="margin-left:9px;"