「Java」の版間の差分
m バージョン表内のAmazon Correttoの無料公開アップデート期限が古かったため見直し、OpenJDKもOracle OpenJDKであることを明記。 |
編集の要約なし |
||
(同じ利用者による、間の2版が非表示) | |||
6行目: | 6行目: | ||
| name = Java |
| name = Java |
||
| logo = File: Java 20131025 1864663017.jpg |
| logo = File: Java 20131025 1864663017.jpg |
||
| released = |
| released = 1995年5月23日α版<br/>1995年秋β版<br/>1996年1月23日ver1.0 |
||
| designer = [[Java Community Process]] |
| designer = [[Java Community Process]] |
||
| latest release version = Java Standard Edition 15.0.1 |
| latest release version = Java Standard Edition 15.0.1 |
||
13行目: | 13行目: | ||
| implementations = [[Javaプラットフォーム]] |
| implementations = [[Javaプラットフォーム]] |
||
|paradigm = [[オブジェクト指向]], コンポーネントベース, [[ジェネリックプログラミング|ジェネリック]], [[関数型プログラミング|関数型]], [[命令型プログラミング]] |
|paradigm = [[オブジェクト指向]], コンポーネントベース, [[ジェネリックプログラミング|ジェネリック]], [[関数型プログラミング|関数型]], [[命令型プログラミング]] |
||
|influenced_by |
|influenced_by=[[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> [[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> |
||
| influenced = [[C Sharp|C#]], [[D言語|D]], [[Dart]], [[Groovy]], [[Scala]], [[Kotlin]], [[Ceylon]] |
| 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]] |
| operating system = [[Solaris]], [[Linux]], [[Microsoft Windows|Windows]],<br>[[macOS]], [[AIX]], [[i5/OS|System i]] |
||
21行目: | 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の特徴 == |
== Javaの特徴 == |
||
44行目: | 44行目: | ||
{{main|Java仮想マシン}}[[プラットフォーム (コンピューティング)|プラットフォーム]]非依存とは、Javaプログラムが特定のハードウェアおよびオペレーティングシステムの機能に依存する事なく、Java実行環境が導入されたあらゆるコンピューター環境上において共通した動作を見せる事を意味する。”''Write once, run anywhere''”(一度プログラムを書いてしまえば、どのコンピューターでも動くよ)がそのスローガンとされていた。Javaのプラットフォーム非依存性は次のようにして実現されている。 |
{{main|Java仮想マシン}}[[プラットフォーム (コンピューティング)|プラットフォーム]]非依存とは、Javaプログラムが特定のハードウェアおよびオペレーティングシステムの機能に依存する事なく、Java実行環境が導入されたあらゆるコンピューター環境上において共通した動作を見せる事を意味する。”''Write once, run anywhere''”(一度プログラムを書いてしまえば、どのコンピューターでも動くよ)がそのスローガンとされていた。Javaのプラットフォーム非依存性は次のようにして実現されている。 |
||
#[[Javaコンパイラ]]は、Javaプログラムのソースコードを、[[Javaバイトコード]]と呼ばれる[[中間表現]]にコンパイルする。Javaバイトコードは[[アセンブリ言語|アセンブラ]]の[[ニーモニック]]に似たもので、[[Java仮想マシン]]上で実行される専用のコードになる。Javaバイトコードは |
#[[Javaコンパイラ]]は、Javaプログラムのソースコードを、[[Javaバイトコード]]と呼ばれる[[中間表現]]にコンパイルする。Javaバイトコードは[[アセンブリ言語|アセンブラ]]の[[ニーモニック]]に似たもので、[[Java仮想マシン]]上で実行される専用のコードになる。Javaバイトコードは大抵のプラットフォームでは、[[Javaクラスファイル]]と呼ばれるclass拡張子のファイルにまとめられる。 |
||
#[[Java仮想マシン]]は、各プラットフォームの環境の違いを吸収するクッション的なソフトウェアである。Java仮想マシンは |
#[[Java仮想マシン]]は、各プラットフォームの環境の違いを吸収するクッション的なソフトウェアである。Java仮想マシンは様々なコンピューター環境に対応したバージョンが提供されており、それぞれのプラットフォームにJava実行環境のコアテクノロジとしてインストールされる。 |
||
#[[Java仮想マシン]]は、指定された[[Javaクラスファイル]]を[[Javaクラスローダー]]で読み込み、その中の[[Javaバイトコード]]を逐一解釈しながら実行する。これはインタプリタ式に行うものと、[[実行時コンパイラ]]で走行させるものがある。 |
#[[Java仮想マシン]]は、指定された[[Javaクラスファイル]]を[[Javaクラスローダー]]で読み込み、その中の[[Javaバイトコード]]を逐一解釈しながら実行する。これはインタプリタ式に行うものと、[[実行時コンパイラ]]で走行させるものがある。 |
||
57行目: | 57行目: | ||
=== ガベージコレクション === |
=== ガベージコレクション === |
||
{{see also|ガベージコレクション}} |
{{see also|ガベージコレクション}} |
||
Javaプログラムのメモリ管理は、[[Java仮想マシン]]に備えられた[[ガベージコレクション]]機能によって行われる。ガベージコレクションとは、すでにどこからも参照されていないオブジェクトを自動的に特定して破棄し、その占有メモリを解放する機能である。一つのシステムスレッドに乗って未参照のオブジェクトを探し続ける実行プロセスはガベージコレクタと呼ばれる。ガベージコレクタは |
Javaプログラムのメモリ管理は、[[Java仮想マシン]]に備えられた[[ガベージコレクション]]機能によって行われる。ガベージコレクションとは、すでにどこからも参照されていないオブジェクトを自動的に特定して破棄し、その占有メモリ領域を自動的に解放する機能である。人の手によるオブジェクトの生成と破棄を正確に対応させるメモリ管理作業は煩雑化するのが常であり、メモリリークやその反対の不正解放によるプログラムエラーを引き起こしやすくバグの温床の代表格と見なされていた。自動化されたガベージコレクションによってJavaプログラマは複雑なメモリ管理作業から解放される。一つのシステムスレッドに乗って未参照のオブジェクトを探し続ける実行プロセスはガベージコレクタと呼ばれる。ガベージコレクタはどこかの末端だけが途切れている参照の連鎖のかたまりも正確に特定して参照の孤島に例えられたメモリ領域を一気に解放する事もできる。Javaではガベージコレクションの機能に並々ならぬ力が入れられており、その技術更新は現在も進行中である。[[世代別ガベージコレクション|世代別ガベージコレクタ]]、応答時間短縮化ガーベジコレクタ、休止時間短縮化ガーベジコレクタなどが導入されて更に改訂を重ねている。 |
||
=== 分散コンピューティング === |
=== 分散コンピューティング === |
||
{{see also|分散コンピューティング}} |
{{see also|分散コンピューティング}} |
||
[[分散コンピューティング]]は[[Object Request Broker|オブジェクト要求ブローカー]]の機構に基づい |
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コンテナ]]と連携し |
[[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|サンドボックス (セキュリティ)}} |
{{see also|サンドボックス (セキュリティ)}} |
||
分散ネットワークを |
分散ネットワークシステムプログラミングを重視しているJavaは、[[サンドボックス (セキュリティ)|サンドボックス]]モデルに基づいたセキュリティ機構を備えている。これは遠隔ダウンロードされた追加プログラム([[Javaバイトコード]])による実行環境への予期せぬ操作やユーザー資源への好ましくないアクセスを防止するためのものである。分散(''distributed'')指向のJavaプログラムでは必要に応じてクラスを追加ロードする機会が多いので、サンドボックス実行は必須である。サンドボックス機能は、仮想マシン上の実行が同時にモニタリングを兼ねているので無理なく実現されている。大抵は以下の手順になる。 |
||
*[[クラスローダ|クラスローダー]]はバイトコードをダウンロードして順次クラス化する。 |
*[[クラスローダ|クラスローダー]]はバイトコードをダウンロードして順次クラス化する。 |
||
82行目: | 83行目: | ||
'''家電向けプロジェクトの立ち上げ(1990年12月)''' |
'''家電向けプロジェクトの立ち上げ(1990年12月)''' |
||
[[ファイル:James Gosling 2008.jpg|サムネイル|181x181ピクセル|ジェームズ・ゴスリン]] |
[[ファイル:James Gosling 2008.jpg|サムネイル|181x181ピクセル|ジェームズ・ゴスリン]] |
||
Javaの歴史は、1990年12月に[[サン・マイクロシステムズ]]社が、次世代の家電製品が内蔵するマイクロコントローラ向けのプログラミング言語を開発する |
Javaの歴史は、1990年12月に[[サン・マイクロシステムズ]]社が、次世代の家電製品が内蔵するマイクロコントローラ向けのプログラミング言語を開発するための水面下プロジェクトをリサーチ段階を兼ねて試験的に立ち上げた事から始まる。サン社はこの分野が今後の重要市場になると予測していた。サン社のエンジニアである[[ジェームズ・ゴスリン]]とパトリック・ノートンの参加により、現実味を帯びたプロジェクトの名称は正式に「グリーンプロジェクト」と定められた。彼らはカリフォルニア州[[メンローパーク (カリフォルニア州)|メンローパーク]]市サンドヒルロードに用意された比較的小さなオフィスで開発を始めた。 |
||
'''Oak言語とGreen OSの誕生(1991年)''' |
'''Oak言語とGreen OSの誕生(1991年)''' |
||
88行目: | 89行目: | ||
グリーンチーム内では当時のメインストリームであったオブジェクト指向を採用する事で一致していた。彼らはそのモデル言語である[[C++]]に白羽の矢を立て、当初はその移植版を検討していたが、プロジェクトの対象が家電製品の[[組み込みシステム]]であったために自然と却下された。C++の複雑な言語仕様はコンピュータ資源の浪費とプログラムエラーの発生率を高めがちであり、堅牢性と安全性が最重要の家電製品の制御装置には不向きであると判断されたためだった。加えてC++では[[移植性]]に対応できない点も指摘されており、プロジェクトの中で[[プラットフォーム非依存]]が特に重要な議題として上がった。彼らはC++に代わる言語の開発と同時に、あらゆる機器に容易に移植できるプラットフォームの必要性も認識するようになった。こうして新言語プログラムの動作環境になる「Green OS」の開発も始められた。一方で、[[Mesa]]言語と[[C言語]]の長所を理想にしていたサン社エンジニアの[[ビル・ジョイ]]は、C++をモデルにした新しいオブジェクト指向言語の開発を提案するワーキングペーパーに''Further''(彼方へ)という題名を付けて自社に上申した。それを受けてまずジェームズ・ゴスリンがC++の拡張言語を提出した。ゴスリンはこれを「C++ ++ --」と名付けたがすぐに取り下げ、改めて一から設計しなおしたプログラミング言語を1991年秋に誕生させた。オフィスの側に立つオークの木を眺めながら開発を進めていたゴスリンはこの新しい言語に「Oak」という名前をつけた。これがJavaの前身である。 |
グリーンチーム内では当時のメインストリームであったオブジェクト指向を採用する事で一致していた。彼らはそのモデル言語である[[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プログラムを実行できるようになっていた。この頃になるとグリーンプロジェクトの対象は |
'''携帯端末、テレビ機器市場への参入と撤退(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月)''' |
'''ワールドワイドウェブ参入(1994年6月~1994年9月)''' |
||
98行目: | 99行目: | ||
1994年秋までにグリーンチームは、Oakを「Java」に、WebRunnerを「[[HotJava]]」に改称した。Green OSは「Java Runtime Environment」に落とし込まれた。改称の理由はOakがすでにビデオカードアダプタ製造会社の登録商標になっていたからだった。この命名は一部のチームメンバーがよく出入りしていた近くのコーヒーショップで決定されたと言われる。Javaの由来は不明とされているが、ロゴが示している通りコーヒーに因んでいるのは明らかである。ジャワ島はコーヒー豆の名産地であり、豆(''Bean'')はJavaテクノロジ内でコンポーネントを指す用語にされている。 |
1994年秋までにグリーンチームは、Oakを「Java」に、WebRunnerを「[[HotJava]]」に改称した。Green OSは「Java Runtime Environment」に落とし込まれた。改称の理由はOakがすでにビデオカードアダプタ製造会社の登録商標になっていたからだった。この命名は一部のチームメンバーがよく出入りしていた近くのコーヒーショップで決定されたと言われる。Javaの由来は不明とされているが、ロゴが示している通りコーヒーに因んでいるのは明らかである。ジャワ島はコーヒー豆の名産地であり、豆(''Bean'')はJavaテクノロジ内でコンポーネントを指す用語にされている。 |
||
1994年10月、JavaランタイムとHotJavaブラウザがサン社の幹部社員たちの前でデモンストレーションされた。1995年5月にアルファ版が社内公開され、 |
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」である。 |
{{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;" |
{| class="wikitable" style="margin-left:9px;" |
2020年11月11日 (水) 07:23時点における版
この記事の内容の信頼性について検証が求められています。 |
Java Javaのロゴ | |
パラダイム | オブジェクト指向, コンポーネントベース, ジェネリック, 関数型, 命令型プログラミング |
---|---|
登場時期 |
1995年5月23日α版 1995年秋β版 1996年1月23日ver1.0 |
設計者 | Java Community Process |
開発者 | サン・マイクロシステムズ、オラクル |
最新リリース | Java Standard Edition 15.0.1/ 2020年10月20日 |
型付け | 強い静的型付け |
主な処理系 | Javaプラットフォーム |
影響を受けた言語 | C++, Ada,[1] Eiffel,[2]Mesa,[3] Modula-3,[4] Objective-C,[5] |
影響を与えた言語 | C#, D, Dart, Groovy, Scala, Kotlin, Ceylon |
プラットフォーム |
Solaris, Linux, Windows, macOS, AIX, System i |
ライセンス | GNU General Public License、Java Community Process |
ウェブサイト |
www |
拡張子 | java、class、jar |
Java(ジャヴァ)は、汎用プログラミング言語とソフトウェアプラットフォームの双方を指している総称ブランドである[6]。オラクル社およびその関連会社の登録商標である。1996年にサン・マイクロシステムズ社によって市場リリースされ、2010年に同社がオラクル社に吸収合併された事により、Javaの版権もそちらに移行した。
プログラミング言語Javaは、C++に類似の構文、クラスベースのオブジェクト指向、マルチスレッド、ガーベジコレクション、コンポーネント指向、分散コンピューティングといった特徴を持ち、平易性重視のプログラム書式による堅牢性と、仮想マシン上での実行によるセキュリティ性およびプラットフォーム非依存性が理念とされている。Javaプラットフォームは、Javaプログラムの実行環境または、実行環境と開発環境の双方を統合したソフトウェアであり、ビジネスサーバー、モバイル機器、組み込みシステム、スマートカードといった様々なハードウェア環境に対応したソフトウェア形態で提供されている。その中枢技術であるJava仮想マシンは各プラットフォーム環境間の違いを吸収しながら、Javaプログラムの適切な共通動作を実現する機能を備えている[7]。このテクノロジは「write once, run anywhere」と標榜されていた[8]。
2019年の時点でGitHubによると[9]、Javaは特にクライアント/サーバーモデルのWebアプリケーションで使用されている最も人気の高いプログラミング言語の1つであり[10]、全世界でおよそ900万人の開発者がいるとレポートされている[11]。最新バージョンは、2020年9月にリリースされたJava 15と、2018年9月にリリースされた長期サポート(LTS)版のJava 11である。オラクル社は未解決のセキュリティ問題によるリスクを回避するために、旧バージョンのアンインストールと新バージョンへの移行を強く推奨している[12]。
Javaの特徴
Java開発元のSun Microsystemsを買収し、Java開発を引き継いだOracleによる公式な主張は下記である[13]。企業内システムの開発に最適であるとしている。
Java reduces costs, shortens developer timeframes, drives innovation, and improves application services as the programming language of choice for enterprise architecture, finance, and HR. Java is used in many industries including manufacturing, automotive, insurance, and public sector. Javaは、コストを削減し、開発者の時間枠を短縮し、イノベーションを促進し、エンタープライズアーキテクチャ、財務、およびHRに最適なプログラミング言語としてアプリケーションサービスを改善します。 Javaは、製造、自動車、保険、公共部門などの多くの業界で使用されています。
また全世界では、3億のデバイスで動作し、1200万人が開発で使用し、250億のJava Card(Javaアプリケーションが動作するスマートカード)が購入されていると発表している[13]。
Javaの構文
Javaプログラムの構文は、C言語またはC++によく似たものである。オブジェクト指向言語としての一面が強調されがちだが、幾つかの構文ルールの違いを除いては、C言語とほぼ同様にシンプルな手続き型プログラミングのスタイルでもプログラミングできる。Javaはオブジェクト指向のプログラミングスタイルをそれほど強制しない。
オブジェクト指向
Javaの主要パラダイムはクラスベースのオブジェクト指向である[14]。クラスはフィールド(メンバ変数)とメソッド(メンバ関数)をひとまとめにしたものである。クラスの構成要素はフィールド、メソッド、静的フィールド、静的メソッド、定数、内部クラス(入れ子クラス)の六種類である。Javaプログラムは1個以上のクラス定義文から形成される。Javaのクラス機構はカプセル化、継承、多態性をサポートしている。
Javaのカプセル化は、フィールドとメソッドの可視性を定める四つの修飾子(private、package、protected、public)でサポートされている。privateは同クラス内限定、packageは同クラス内と同パッケージ内限定、protectedは同クラス内と同パッケージ内と派生クラス内限定、publicは制限なしを意味する。パッケージはプログラム全体を任意に分割したソースファイルの1個以上のまとまりである。Javaのデフォルト可視性はファイル単位のpackageなので隠蔽性よりも利便性が重視されている。Javaの継承は、スーパークラスが一つに限られる単一継承をサポートしており多重継承は除外されている。既存クラスを元にして任意のフィールドとメソッドを追加した新しいクラスを作成できる。Javaの全クラスはObjectクラスをデフォルト継承する。全クラスの派生元になるObjectクラスが持つロック機能はオブジェクト指向とマルチスレッド同期を調和させている。Javaの多態性は、仮想関数とインターフェースと実行時ダウンキャストとリフレクションでサポートされている。親クラスのabstractメソッドが仮想関数の抽象メソッドになり、子クラスの同名オーバーライドメソッドが仮想関数の実装メソッドになる。インターフェースは抽象メソッドだけで構成される純粋抽象クラスであり、implements構文によって任意の数だけクラスに実装できる。実行時ダウンキャストはinstanceof演算子による実行時型チェックで事前確認でき、ダウンキャスト失敗時は例外発生によってフォローできる。リフレクションはクラスの構造内容を操作できる機能で動的ディスパッチ、メソッドミッシング、モンキーパッチなどの実装に活用できる。ただし安易な使用は推奨されていない。
プラットフォーム非依存
プラットフォーム非依存とは、Javaプログラムが特定のハードウェアおよびオペレーティングシステムの機能に依存する事なく、Java実行環境が導入されたあらゆるコンピューター環境上において共通した動作を見せる事を意味する。”Write once, run anywhere”(一度プログラムを書いてしまえば、どのコンピューターでも動くよ)がそのスローガンとされていた。Javaのプラットフォーム非依存性は次のようにして実現されている。
- Javaコンパイラは、Javaプログラムのソースコードを、Javaバイトコードと呼ばれる中間表現にコンパイルする。Javaバイトコードはアセンブラのニーモニックに似たもので、Java仮想マシン上で実行される専用のコードになる。Javaバイトコードは大抵のプラットフォームでは、Javaクラスファイルと呼ばれるclass拡張子のファイルにまとめられる。
- Java仮想マシンは、各プラットフォームの環境の違いを吸収するクッション的なソフトウェアである。Java仮想マシンは様々なコンピューター環境に対応したバージョンが提供されており、それぞれのプラットフォームにJava実行環境のコアテクノロジとしてインストールされる。
- Java仮想マシンは、指定されたJavaクラスファイルをJavaクラスローダーで読み込み、その中のJavaバイトコードを逐一解釈しながら実行する。これはインタプリタ式に行うものと、実行時コンパイラで走行させるものがある。
公開初期のインタプリタ式のみで走行されるJavaプログラムの実行速度は遅かったが、Java仮想マシンへの実行時コンパイラ技術と動的再コンパイル技術(dynamic recompilation)の導入によって速度問題はほぼ解決した。実行時コンパイラとは一定範囲のJavaバイトコードをまとめて機械語コードにコンパイルして継続的に実行させる技術である。Java仮想マシンはメモリ境界とバッファオーバーフローに対するチェックを随時行いながらプログラムを走行させるので実行時の堅牢性も実現している。また、クラスロード時にそのバイトコードを検証して一定のニーモニック整列基準を満たしているか判定する機能も備えており、あからさまなコード暴走や致命的エラーの頻発を事前に抑止するという安全性も実現している。
マルチスレッド
Javaプログラムは複数のスレッドを同時に走らせる事ができる。多数のスレッドを扱う大規模システムにも対応できる各種設計を備えており、その一つであるスレッドグループは、各スレッドを役割や性質でグループ化して様々な一括操作を可能にしている。これはクライアント・サーバーシステムの実装でよく用いられる。また膨大な数の断続的トランザクションをさばくシステムにおいて発生しがちなスレッド生成と破棄の繰り返しによる負荷増大を解決する為の、スレッドプールとタスクキューを併せたいわゆるモニタの技法を提供するAPIも用意されている。
マルチスレッド「同期」の特徴としては、前述のObjectクラスの基底継承強制により全てのインスタンスにロック機能を持たせている事が挙げられる。このロックはsynchronizedキーワードで示される標準同期構文で使用される。標準同期はJava仮想マシン内包仕様であり、機能的にはミューテックスに相当する。synchronized修飾子の各メソッドはその全体が排他制御エリアになり、その呼び出し時はthisインスタンスからロックをデフォルト取得するので、イメージ的にインスタンス単位になる排他制御を自然に表現している。このロック普遍化はオブジェクト指向との調和を実現する設計と言える。synchronized静的メソッドの方は、システム内に暗黙的に存在するクラスオブジェクトからロック取得を試みるので、これもイメージ的に同型インスタンス共通単位の排他制御を表現している。また、synchronized()定義子の波括弧でくくられた任意のコードブロックは、this以外のインスタンスもロックオブジェクトにできる排他制御エリアになるので、きめ細かな同期も表現できる。このミューテックス相当の標準同期は様々なロック手法にも応用可能であるが、実際にカウントセマフォやバリアや読み書きロックなどを再現しようとすると余計なワンステップを必要としがちなので、それらのロック手法は専用のAPIで用意されている。
ガベージコレクション
Javaプログラムのメモリ管理は、Java仮想マシンに備えられたガベージコレクション機能によって行われる。ガベージコレクションとは、すでにどこからも参照されていないオブジェクトを自動的に特定して破棄し、その占有メモリ領域を自動的に解放する機能である。人の手によるオブジェクトの生成と破棄を正確に対応させるメモリ管理作業は煩雑化するのが常であり、メモリリークやその反対の不正解放によるプログラムエラーを引き起こしやすくバグの温床の代表格と見なされていた。自動化されたガベージコレクションによってJavaプログラマは複雑なメモリ管理作業から解放される。一つのシステムスレッドに乗って未参照のオブジェクトを探し続ける実行プロセスはガベージコレクタと呼ばれる。ガベージコレクタはどこかの末端だけが途切れている参照の連鎖のかたまりも正確に特定して参照の孤島に例えられたメモリ領域を一気に解放する事もできる。Javaではガベージコレクションの機能に並々ならぬ力が入れられており、その技術更新は現在も進行中である。世代別ガベージコレクタ、応答時間短縮化ガーベジコレクタ、休止時間短縮化ガーベジコレクタなどが導入されて更に改訂を重ねている。
分散コンピューティング
Javaの分散コンピューティングプログラミングはオブジェクト要求ブローカーの機構に基づいている。これはネットワーク上に存在する様々なプラットフォームの間で、互いに異なる環境を意識せずにリクエストとレスポンスを送りあい任意のタスクを遂行する分散システムの構築をサポートする。各プラットフォーム上で稼働されるサーバーアプリケーションとクライアントアプリケーションはそれぞれオブジェクトを内包しており、業界共通規格のCORBAまたはJava独自規格のRMIが提供する運用アーキテクチャと通信プロトコルを通して他のオブジェクトと相互にコミュニケーションする。それらは分散オブジェクトと呼ばれている。業務用システムではすでにCORBAが普及していたので、高パフォーマンスだがJavaプラットフォーム間の限定になるRMIはその後追いであった。そのためRMIはCORBAと連携できるようにRMI over IIOPなどの様々な技術が実装されている。CORBAの通信プロトコルはIIOP、RMIの方はJRMPである。分散オブジェクトを実装するためのAPIとクラスライブラリの多くはエンタープライズ版(Java EE)に属している。分散オブジェクトの中でサーバー機能に特化されたものはEJB(Enterprise JavaBeans)と呼ばれている。
EJBは、クライアントと同期通信を行いトランザクションを管理するセッションビーン、データベースとリンクして永続データを管理するエンティティビーン、様々なイベントからの非同期通信を管理するメッセージドリブンビーンの三種に大別される。これらのEJBは、EJBコンテナと呼ばれる業務用サーバーアプリケーションに内包されて運用される。EJB同士を含む他の分散オブジェクトと通信する際のプロトコルはIIOPかJRMPが使われる。与えられた識別名から分散オブジェクトと各種リソースのネットワーク上の位置を特定してアクセスさせる機能がJNDIである。EJBコンテナはWEBコンテナと連携して運用されるのが普通である。EJBコンテナはWEBコンテナを一般的なクライアント窓口として使用することが多い。WEBコンテナはサーブレットとJSP(Java Server Pages)を内包しているWEB用サーバーアプリケーションであり、HTTPプロトコルを通して一般的なWEBブラウザとの同期通信を行う。WEB方面の分散オブジェクトは、WEBコンポーネントと呼ばれる。JSPはいわゆるWEBサイトの表示に特化したコンポーネントである。サーブレットはWEBサイトへのリクエストを処理し、場合によってはセッションビーンにトランザクションを委譲するコンポーネントである。EJBコンテナではJBossやWebSphereなどが有名である。EJBコンテナはWEBコンテナと統合されて提供されている事が多い。WEBコンテナではApatcheが有名である。
セキュリティ
分散ネットワークシステムプログラミングを重視しているJavaは、サンドボックスモデルに基づいたセキュリティ機構を備えている。これは遠隔ダウンロードされた追加プログラム(Javaバイトコード)による実行環境への予期せぬ操作やユーザー資源への好ましくないアクセスを防止するためのものである。分散(distributed)指向のJavaプログラムでは必要に応じてクラスを追加ロードする機会が多いので、サンドボックス実行は必須である。サンドボックス機能は、仮想マシン上の実行が同時にモニタリングを兼ねているので無理なく実現されている。大抵は以下の手順になる。
- クラスローダーはバイトコードをダウンロードして順次クラス化する。
- 実行環境にあるセキュリティポリシーファイルに基づいて各種パーミッションが各クラスに付与される。セキュリティポリシーは主に指定クラス名とその対象パーミッションを照合するものである。
- 実行環境に元からあるクラスは、オールパーミッション付与がデフォルトである。
- スレッドがリソースアクセスなどの操作をする度に、セキュリティマネージャが現行のパーミッションを調べて対象外なら例外を発生させる。
- その際はスレッドの各通過メソッドのクラスのパーミッションが全チェックされ、原則的に最少パーミッションの方に合わせる。
- 遠隔ロードされたappletクラスなどパーミッション皆無のクラスを通ったスレッドは、完全なサンドボックス実行になりほとんどのリソースにアクセスできなくなる。
実際には上記に加えて、各クラスを同一操作&同一セキュリティレベルでまとめるドメイン機構、認証と承認によるユーザーパーミッション機構、バイトコード送受信時の署名付き証明書機構などが組み合わされて実装運用される。
Javaの歴史
誕生の経緯
家電向けプロジェクトの立ち上げ(1990年12月)
Javaの歴史は、1990年12月にサン・マイクロシステムズ社が、次世代の家電製品が内蔵するマイクロコントローラ向けのプログラミング言語を開発するための水面下プロジェクトをリサーチ段階を兼ねて試験的に立ち上げた事から始まる。サン社はこの分野が今後の重要市場になると予測していた。サン社のエンジニアであるジェームズ・ゴスリンとパトリック・ノートンの参加により、現実味を帯びたプロジェクトの名称は正式に「グリーンプロジェクト」と定められた。彼らはカリフォルニア州メンローパーク市サンドヒルロードに用意された比較的小さなオフィスで開発を始めた。
Oak言語とGreen OSの誕生(1991年)
グリーンチーム内では当時のメインストリームであったオブジェクト指向を採用する事で一致していた。彼らはそのモデル言語であるC++に白羽の矢を立て、当初はその移植版を検討していたが、プロジェクトの対象が家電製品の組み込みシステムであったために自然と却下された。C++の複雑な言語仕様はコンピュータ資源の浪費とプログラムエラーの発生率を高めがちであり、堅牢性と安全性が最重要の家電製品の制御装置には不向きであると判断されたためだった。加えてC++では移植性に対応できない点も指摘されており、プロジェクトの中でプラットフォーム非依存が特に重要な議題として上がった。彼らはC++に代わる言語の開発と同時に、あらゆる機器に容易に移植できるプラットフォームの必要性も認識するようになった。こうして新言語プログラムの動作環境になる「Green OS」の開発も始められた。一方で、Mesa言語とC言語の長所を理想にしていたサン社エンジニアのビル・ジョイは、C++をモデルにした新しいオブジェクト指向言語の開発を提案するワーキングペーパーにFurther(彼方へ)という題名を付けて自社に上申した。それを受けてまずジェームズ・ゴスリンがC++の拡張言語を提出した。ゴスリンはこれを「C++ ++ --」と名付けたがすぐに取り下げ、改めて一から設計しなおしたプログラミング言語を1991年秋に誕生させた。オフィスの側に立つオークの木を眺めながら開発を進めていたゴスリンはこの新しい言語に「Oak」という名前をつけた。これがJavaの前身である。
携帯端末、テレビ機器市場への参入と撤退(1992年~1994年5月)
1992年夏にはGreen OSを実際の機器に載せてOakプログラムを実行できるようになっていた。この頃になるとより広範囲な可能性を秘めるようになったグリーンプロジェクトの対象は当初の家電機器から、当時のトレンドであった携帯情報端末(PDA)へとシフトされていた。1992年9月3日に最初のデモンストレーションが開催され「Star7」という名のPDA機器がOakプログラムの初のお披露目舞台になった。このStar7のユーザーインターフェース上で後のマスコットキャラ「Duke」が初登場している。1992年11月、サン社はファーストパーソン社を設立しグリーンチームをそちらに所属させた。次世代のインタラクティブ機器に関心を持つファーストパーソン社は、ケーブルテレビ用セットトップボックス事業への参入を決めて、タイムワーナー社と3DO社にそれぞれOakテクノロジを提示したが、その高度な柔軟さが逆に倦厭されて契約実現には到らなかった。サン本社はファーストパーソン社の解散を決め、グリーンチームも本社に戻された。
ワールドワイドウェブ参入(1994年6月~1994年9月)
1994年6月、サン社技術部長ジョン・ゲージがジェームズ・ゴスリン、ビル・ジョイ、パトリック・ノートン、エリック・シュミットら集めて、延べ3日に渡るブレインストーミングが行われた。ここで彼らはワールドワイドウェブをプロジェクトの本命に据える事で一致した。革新的なウェブブラウザである「NCSA Mosaic」の登場に触発された彼らは、インターネットの世界がケーブルテレビのそれを超えたインタラクティブな媒体に発展しつつある事を認識していた。パトリック・ノートンはOakテクノロジをベースにした「WebRunner」という小さなウェブブラウザを開発した。Oakによる小さなアクティブプログラムが埋め込まれたウェブページにアクセスすると、WebRunner上でマウス操作に連動するインタラクティブなアニメーションが表示された。
Javaの始動(1994年10月~1996年1月)
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」ブラウザへもこのアプレット機能を配備するとアナウンスして業界の注目を集めた。1995年秋にベータ版が社外公開された。1996年1月9日にサン社は正式にJavaソフトウェア部門を立ち上げた。基礎テクノロジは市場リリース段階まで進捗していたが、その他テクノロジは未だ途上段階で統合基盤であるプラットフォームと呼べる域までは達しておらず、初リリースのプロダクト名はJavaランタイム環境を内包したデヴェロップメントキットになった。1月23日に最初の公開バージョンである「JDK 1.0」が市場リリースされた。
バージョン履歴
1996年1月の初リリースからバージョン更新はおおむね数年おきに行われていたが [15]、2017年9月の「Java SE 9」から一定の新機能蓄積を待たずに強制公開する旨が発表され、毎年3月9月の年二回定期リリース制に変更された。それに伴い従来の長期間サポート(LTS)制度も廃止され、原則的に次回バージョンまでの半年間サポートになった。2018年9月の「Java SE 11」から有償契約LTS制度が発表され、このバージョンはLTS対象とされた[16]。LTS対象バージョンは安定版、そうでないものは新機能提供版といった位置付けである。現行のLTS対象バージョンは「Java SE 11」と「Java SE 8」である。
バージョン | リリース日 | 無料公開アップデート期限[17][18] | 延長サポート期限 |
---|---|---|---|
JDK Beta | 1995 | ? | ? |
JDK 1.0 | 1996年1月 | ? | ? |
JDK 1.1 | 1997年2月 | ? | ? |
J2SE 1.2 | 1998年12月 | ? | ? |
J2SE 1.3 | 2000年5月 | ? | ? |
J2SE 1.4 | 2002年2月 | 2008年10月 | 2013年2月 |
J2SE 5.0 | 2004年9月 | 2009年11月 | 2015年4月 |
Java SE 6 | 2006年12月 | 2013年4月 | 2018年12月 |
Java SE 7 | 2011年7月 | 2015年4月 | 2022年7月 |
Java SE 8 (LTS) | 2014年3月 | Oracle(商用) 2019年1月まで
Oracle(個人用) 無期限 AdoptOpenJDK 2026年5月 Amazon Corretto 2026年5月[19] |
2030年12月 |
Java SE 9 | 2017年9月 | Oracle 2018年3月 | — |
Java SE 10 | 2018年3月 | Oracle 2018年9月 | — |
Java SE 11 (LTS) | 2018年9月 | AdoptOpenJDK 2024年10月
Amazon Corretto 2027年9月[19] |
2026年9月 |
Java SE 12 | 2019年3月 | Oracle OpenJDK 2019年9月 | — |
Java SE 13 | 2019年9月 | Oracle OpenJDK 2020年3月 | — |
Java SE 14 | 2020年3月 | Oracle OpenJDK 2020年9月 | — |
Java SE 15 | 2020年9月 | Oracle OpenJDK 2021年3月 | — |
Java SE 16 | 2021年3月 | Oracle OpenJDK 2021年9月 | — |
Java SE 17 (LTS) | 2021年9月 | 未公表 | 未公表 |
凡例 サポート終了 サポート中 現行バージョン 将来のリリース |
Javaプログラミング例
Hello World
//ハローワールド.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
- Javaプログラムでは全てのフィールドとメソッドが
class
内に記述される。 - Javaプログラムは静的メソッド
public void static main (String[] args)
から開始される。args
はプログラム開始時のコマンドライン・パラメータである。 System.out
はSystemクラスの静的フィールドoutを意味する。outはPrintStream型のインスタンスである。out.println("文字列")
はoutがprintlnメソッドを呼び出す。
キーワード一覧
Javaの基本言語仕様は54種類程度に抑えたキーワードによって比較的コンパクトにまとめられている。Javaの構文はC++言語によく似たものであり、それよりも比較的平易化されている。従って以下のキーワードを眺めるだけでもJavaプログラミングの大まかなスタイルを掴むことができる。
類別 | キーワード | 説明 |
---|---|---|
アクセス修飾子 | import | パッケージ名前空間の解決用 |
private | 同クラス内でアクセス可 | |
package | 同クラス内と同パッケージ内でアクセス可、パッケージスコープの宣言 | |
protected | 同クラス内と同パッケージ内と派生クラス内でアクセス可 | |
public | 全範囲でアクセス可 | |
クラス定義系 | abstract | 抽象クラス、抽象メソッド |
class | クラス | |
enum | 列挙型 | |
extends | スーパークラスの指定 | |
final | クラスの継承不可、メソッドのオーバーライド不可、フィールドの定数化 | |
implements | 実装するインターフェース | |
interface | インターフェース | |
native | そのメソッドは他言語コンパイルコードで実装される | |
static | 静的フィールド、静的メソッド、静的内部クラスはトップレベル扱いされる | |
strictfp | 指定クラス、指定メソッドで厳密な浮動小数点計算が行われる | |
synchronized | 同期用クラス、同期用メソッド、同期用ブロック | |
transient | 直列化から除外されるフィールド | |
void | 返り値無しのメソッド | |
volatile | そのフィールドは各スレッドからキャッシュ参照されない | |
制御構文系 | break | ループ脱出 |
case | パターンマッチ項目 | |
continue | ループ起点回帰 | |
default | パターンマッチ外 | |
do | 無条件ループ起点 | |
else | 条件式の偽側フロー | |
for | 初期値定義と周回毎値変化で修飾された条件式ループ | |
if | 条件式の真側フロー | |
instanceof | インスタンスの実行時型チェック | |
return | メソッドの評価終了 | |
switch | パターンマッチ起点 | |
while | 条件式ループ | |
例外処理系 | assert | 条件式が偽ならプログラム中断 |
catch | 例外パターン捕捉 | |
finally | 例外デフォルト捕捉 | |
throw | 例外発生 | |
throws | そのメソッドで発生する例外候補 | |
try | 例外発生ブロック | |
基本値系 | boolean | 真偽値 |
byte | 8ビット値 | |
char | 文字表現用16ビット値 | |
double | 64ビット浮動小数点 | |
float | 32ビット浮動小数点 | |
false | 偽値 | |
int | 符号付き32ビット値 | |
long | 符号付き64ビット値 | |
short | 符号付き16ビット値 | |
true | 真値 | |
null | ヌルポインタ | |
参照値系 | super | スーパークラスのインスタンス |
this | カレントクラスのインスタンス | |
new | インスタンスの生成 | |
予約語 | goto | 使用できない |
const | 使用できない |
Javaプラットフォーム
Javaプラットフォーム(Java Platform)は、Javaプログラムを開発または実行する為のソフトウェア群の総称である。Javaプラットフォームは対象環境に合わせて、Java実行環境およびJava開発環境の構成内容と、Javaテクノロジの追加内容を変えたエディションに編集されて公開されている。Javaテクノロジは権利元ベンダーだけでなくサードパーティ側からも提供されており、その標準化はJavaコミュニティプロセス(JCP)が管理している。Java実行環境とJava開発環境はオープンソース化されているので各企業、各団体、開発者各自が営利または非営利で様々なソフトウェアと関連技術を公開しており、巨大なITエコシステムを構築している。
エディション
2019年現在、Java権利元のオラクル社は、対象環境に合わせたJavaプラットフォームの4つのエディションを公開している。エディションによってJava実行環境とJava開発キットに含まれるツール構成に違いがあり、またクラスライブラリとAPIの構成内容も異なっている。Java仮想マシンの性能にも差異がある。JDK 1.1までは単体エディションで、J2SE 1.2から3エディションに分かれた。J2SE 5.0頃から拡張テクノロジの一つであったJava Cardが昇格して4エディションとなった。
- Java Platform, Standard Edition (Java SE)
- スマートフォンやタブレットを含むパーソナルコンピュータ向けである。主にデスクトップアプリケーションとWEBアプリを開発または実行する。一般ユーザー用仕様と言える。
- Java Platform, Enterprise Edition (Java EE) / Jakarta EE
- サーバーマシン、ワークステーション向けである。スタンダード版に加え、WEBサーバー及び多層クライアントサーバーや業務用システムを開発する為の、様々な拡張技術クラスライブラリ&APIが追加されている。業務用プロフェッショナル仕様であり大規模である。
- 2017年9月にOracle社は今後のJava EEのバージョンアップがエクリプス財団によって行われる事を発表した[20][21]。Java EEの商標は現行版のサポートを続けるOracle社が保持したので、エクリプス財団による今後のバージョンはJakarta EEの名称で公開される事になった[22]。
- Java Platform, Micro Edition (Java ME)
- 組み込みシステム、マイクロコントローラ向けである。コンピュータ資源が制限されている集積回路や電子機器に対応した特定技術仕様であり、専用のクラスライブラリ&APIも用意されている。Java仮想マシンも比較的コンパクトにまとめられている。
- Java Card
- スマートカード(ICカード)、小型メモリデバイス上で運用されるプログラムを開発するためのエディションである。現在[いつ?]ではSIMカードやATMカードなど幅広い分野に普及している。Java仮想マシンの機能は非常にコンパクトにまとめられており、幾つかのプリミティブ型も省略されている。故に特殊なプログラミングスタイルが求められる。
Java実行環境(JRE)
Java実行環境 (Java Runtime Environment) は、Javaアプリケーションを実行するために必要なソフトウェアである。Java仮想マシン、''Java.exe''のスターターを含めた各種実行サポートツール、Javaクラスライブラリで構成される。Java実行環境の中核はJava仮想マシンである。エディション毎に仮想マシンの仕様と性能は異なっており、また実行時は複数の動作モードを持つ。仮想マシンはスターターを通して稼働されるのが普通である。様々な使用状況に対応したスターターが最初に実行されて、そこから仮想マシンが呼び出されてJavaプログラムの実行を移譲される。仮想マシンはJavaクラスライブラリを逐次読み込みながらJavaプログラムを実行する。Java実行環境のツール内容とクラスライブラリ構成は、エディション毎に違いがある。
- Javaクラスライブラリ
Javaクラスライブラリは、普遍的に呼び出される特定の機能を実装したクラスの集合体である。Javaプログラムはライブラリ内のクラスを逐次呼び出しながら処理を実行する。なお、それぞれのJavaクラスライブラリ内部からプログラマの利用に向けて外部公開されている部分を「Java API」と呼ぶ。
- 基礎ライブラリ - Java言語の基礎を扱う。
- 入出力ライブラリ - ファイル入出力など。
- コレクションライブラリ - 動的配列と動的連想配列。データ集合の操作。
- 数学ライブラリ - 各種計算を扱う。
- 国際化地域化ライブラリ - 暦、日付、時間、通貨、文字コードなどの国際化と地域化を扱う。
- ネットワークライブラリ - ソケット通信を扱う。
- GUIライブラリ - グラフィカル・ユーザーインターフェースを扱う。
- アプレットライブラリ - アプレット生成用。
- Javaビーンズライブラリ - ソフトウェアコンポーネント作成用。
- データベース接続ライブラリ - SQLを扱う。
- リモートメソッドライブラリ - 分散オブジェクトを扱う。
- セキュリティライブラリ - セキュリティポリシー、ユーザー認証と権限承認、公開鍵暗号方式など。
- Javaアプリケーションの形態
Java実行環境に用意されている特定のJavaクラスライブラリを利用する事でJavaプログラムは結果的に、以下の四種類のアプリケーション形態に派生する。
- Javaアプリケーション (application)
- パーソナルコンピュータなどのローカル環境で実行されるJavaプログラム。「Java Web Start」は任意のjnlpファイル(java network launching protocol)をダウンロードして実行できるJavaアプリの配布システムである。この類似技術としてマイクロソフトのノータッチデプロイメント、ClickOnceがある。
- Javaアプレット (applet)
- サーバーからダウンロードされてWEBブラウザ上で実行されるJavaプログラム。サンドボックス機能下で厳しい動作制約が加えられている。当初はJavaの目玉技術であったが、様々な理由からさほど普及しなかった。
- Java Cardプラットフォームの分野であるスマートカード(ICカード)上で動くJavaプログラムもアプレットと呼ばれており、現在ではこちらに舞台を移している。
- Javaサーブレット (servlet)
- サーバーマシンで実行されるJavaプログラム。その名の通り手軽にサーバープログラムを実装出来るが、大規模サーバーの構築にも適している。サーブレットはクライアントからのリクエストを逐次トランザクションして順次レスポンスする。WEBクライアントにはHTMLなどのプロトコルページ及び各種メディアをレスポンスしてWEBブラウザ上で表示させる。PerlなどによるCGIに比べ、サーバ側の負荷が低いなどのメリットがある。
- Javaサーバーページ (server page)
- サーブレットをWEBサーバー用に特化したものであり、XHTML (HTML) 内に記述するJavaプログラムである。WEBクライアントからのリクエストに伴うパラメータに従い、それをサーバー側で解釈してWEBページ内容を動的に生成、変化させてレスポンスする。コードは似ているが、JavaScriptの様にブラウザ側で実行するスクリプトではない。類似の技術にActive Server Pages、PHPがある。
Java開発キット(JDK)
Java開発キット (Java Development Kit) は、Javaプログラムを開発するために必要なソフトウェアである。Java実行環境も内包している。Javaコンパイラなどの基本開発ツール、各種開発サポートツール、Java APIで構成されている。前述のエディションによって開発ツール内容とAPI構成に違いがある。Java開発キットの呼称はこれまでに何度か変更されている。
- J2SE 1.2.2_004 までは、JDK(Java Development Kit)と呼んでいた。
- J2SE 1.4 までは、Java2 SDK(Java2 Software Development Kit)と呼んでいた。
- J2SE 5.0 からは再び、JDK(Java Development Kit)と呼んだ。
- JavaSE 7 からは、エンタープライズ版とマイクロ版では Java SDK(Java Software Development Kit)と呼び、スタンダード版とカード版では JDK(Java Development Kit)と呼ぶようになった。JDKはSDKの拡張サブセット(SDKの一部分+その他)とされる。
- Java API
APIは、アプリケーション・プログラミング・インタフェースの頭字語であり、Javaクラスライブラリ内部からプログラマに向けて外部公開されているクラス、インタフェース、メソッド、フィールド、定数の集合である。プログラマはこれを用いて各種ソフトウェアの開発を行う。APIは基本的にクラスライブラリの所属に沿って、パッケージ(package)と呼ばれる名前空間で分類されて提供されている。パッケージは各ワードをピリオトで連結して階層化されている。先頭ワードのjavaは開発元提供の純正基礎版を意味する。他に純正拡張版のjavax、任意団体提供のorg、企業提供のcomがある。
- java.lang - Java言語の基礎を扱う。
- java.io - ファイル入出力など。
- java.util - 動的配列と動的連想配列。データ集合の操作。
- java.math - 各種計算を扱う。
- java.text - 暦、日付、時間、通貨、文字コードなどの国際化と地域化を扱う。
- java.net - ソケット通信を扱う。
- java.awt - グラフィカル・ユーザーインターフェースを扱う。
- java.applet - アプレット生成用。
- java.beans - ソフトウェアコンポーネント作成用。
- java.sql - SQLを扱う。
- java.rmi - 分散オブジェクトを扱う。
- java.security - セキュリティポリシー、ユーザー認証と権限承認、公開鍵暗号方式など。
- 統合開発環境と開発支援ツール
統合開発環境(IDE)は、JDKを中核にしてビジュアルエディターやビルドマネージャーなどの様々な開発支援機能を備えたソフトウェアである。JDKのみだと、メモ帳でプログラムを書きコマンドラインでコンパイルしコンソールでデバッグをするという極めて原始的な作業になるが、IDEを使用する事で多機能エディタコーディングとビルド過程の自動化と視覚的なデバッグが可能になる。Java開発用のIDEは様々な企業と任意団体から公開されている。
- NetBeans - (サン社→オラクル社)オープンソースIDE。NetBeans.org NetBeans.jp。
- Eclipse SDK - (IBM社→Eclipse財団)オープンソースIDE。Java用IDEの共通基盤存在である。ここからWebSphere Studio、JBuilderなど様々なIDEが派生している。eclipse.org EclipseWiki。
- WebSphere Studio -(IBM社)商用IDE。Eclipseに有料プラグイン機能を組み合わせたもの[23]。現在はアップデート停止。WebSphere。
- IBM Rational - (IBM社)Rationalブランド商用IDE。WebSphere Studioの後継製品。
- JBuilder - (ボーランド社→エンバカデロ社)商用IDE。JBuilder2007からEclipseベースになっている。JBuilder。
- Oracle JDeveloper - (オラクル社)Oracle Application Serverと統合されている。2005年6月28日に無料化した。JDeveloper。
- Oracle Workshop for WebLogic - (BEAシステムズ社→オラクル社)WebLogicと統合されている。Oracle Workshop。
- BlueJ - (サン社、豪ディーキン大学、英ケント大学の共同開発)フリーIDE。BlueJ。
- IntelliJ IDEA - (JetBrains社)商用IDE。Android Studioのベースになった。IntelliJ IDEA。
- JCreator - (Xinox Software社)商用IDE。JCreator。
- Xcode - (アップル社)macOSに付属するIDE。
開発サポートツールは、プロジェクト管理、自動ビルド、デバッグ、モニタリングを容易にする。下記の他にも多くの支援ツールが存在する。
- Apache Ant - Javaアプリケーションのビルドツール。Apacheソフトウェア財団のプロジェクトによって開発された。コンパイル、バージョン管理システムとの連携、jar、javadoc生成、ファイルのコピー/移動/削除/変換などの一連の処理を自動化して効率的に実行する。make と同種のツールであり、XMLファイルにビルドの規則を記述する。Java 以外の言語によるアプリケーション開発や、アプリケーション開発以外の用途にも使うことができる。
- Apache Maven - Javaアプリケーションのプロジェクト管理ツール。Apacheソフトウェア財団のプロジェクトによって開発された。
- Gradle - Apache AntやApache Mavenのコンセプトに基づくオープンソースビルド自動化システム。
- JUnit - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。xUnitの一種である。テスト駆動開発を支援する。
Javaテクノロジの数々
Javaテクノロジは個人を含む各種組織から様々な形態で公開されている。開発元から提示された技術は、Javaコミュニティプロセス(JCP)による審査を合格した後にJavaテクノロジの一つとして認証される。これを標準化(standardization)と言う。Javaテクノロジが準拠すべき規範仕様は、JCP管理下で発行される数々のJava仕様要求(Java Specification Request)にて定義されている。Javaテクノロジは様々な分野に導入されている。その一例を以下に列挙する。
- JNI (Java Native Interface) - 他の言語で実装されたネイティブコードを呼び出す技術
- JMI (Java Metadata Interface) - Javaのメタデータの作成・アクセス・検索・送受信に関する仕様
- JML (Java Modeling Language) - 契約による設計(DbC)を指向した形式言語をソースコードに導入する
- JMX (Java Management Extensions) - 主に分散システムで依存性の注入によるJavaプログラムの動的な再構成技術
- JDMK (Java Dynamic Management Kit) - JMX仕様に基づいた開発支援ソフトウェア
- JDO (Java Data Objects) - オブジェクト永続化の仕様
- Jini - 分散システムを構築するネットワークアーキテクチャ
- JavaSpaces - Jiniの分散システム環境でオブジェクトの送受信と永続化などをサポートするテクノロジ
- JAIN (Java API for Integrated Networks) - 統合通信ネットワーク用のAPI
- JSF (Java Server Faces) - WEBクライアントにユーザーインターフェースを提供するサーバー用テクノロジ
- JXTA - Peer to Peer (P2P) の仮想ネットワークのためのオープンプロトコル
- OSGi - サービスの動的な管理と遠隔保守
- Java3D - 3次元グラフィクスプログラミングのための高水準なAPI。Java 3D
- JOGL (Java OpenGL) - OpenGLを使う3Dプログラミングのための低水準なAPI
- JAI (Java Advanced Imaging) - 高水準な画像操作API
- LWJGL - ゲーム開発用のAPI。OpenGL、OpenAL、OpenCLを扱える。様々なゲーム用コントローラーも扱える。
- JSML (Java Speech Markup Language) - 音声合成システムにテキスト注釈を追加する
- Blu-ray Disc Java - ブルーレイディスクで実行される各種コンテンツ制作用
Javaオープンソースモデル
サン・マイクロシステムズ社は1996年のリリース当初からJava実行環境とJava開発環境をオープンソース化しており、サードパーティにJavaテクノロジ開発への参入をアピールしていた。ただしJava普及に一定のコントロールをかける為にソースコードの改変までは認めていなかった。2004年になるとIBM社が業界の優位性を活かしてJavaオープンソースプロジェクトの主導権を握るようになった。Javaコミュニティプロセスを取り巻く業界の変化を悟ったサン社はIBM社との本格的な提携を承認し、2007年にJava SE 6を「OpenJDK」としてGNU一般公開ライセンスの下でリリースした[24]。OpenJDKではソースコードの改変も認められた。GNUプロジェクトは「GNU Interpreter for Java」、GNUコンパイラコレクションの「GNU Compiler for Java」、互換クラスライブラリの「GNU Classpath」を公開した。Windows用GNU Compilerは、MinGWと併せてCygwinの環境上でも実行できた。
WindowsやLinuxなどのメジャーOSでは、オラクル社、IBM社、Blackdown社、GNUプロジェクト、Kaffe.orgなどによるJavaプラットフォームが公開されている。また、JavaソースコードをそのままWin用実行ファイルに変換する「Excelsior JET」や[25]、JarファイルをWin用実行ファイルに変換する「exewrap」「Launch4j」「NSIS」「JSmooth」なども販売ないし公開されている。
Java認定資格
オラクル[注釈 1]は複数のJava認定資格を主催している。Javaのバージョンアップに伴って資格も変更されることがある。ただし、変更前に取得した資格は変更後も有効である。認定試験に不合格だった場合、その試験日を含めて14日以内は同一試験を受験することができない。
資格名 | レベル | 対象バージョン |
---|---|---|
Java Foundations Certified Junior Associate | Junior Associate | 不明 |
Oracle Certified Java Programmer, Bronze SE 7/8[注釈 2] | Bronze | Java SE 7/8 |
Oracle Certified Java Programmer, Silver SE 8[注釈 3] | Associate | Java SE 8 |
Oracle Certified Java Programmer, Gold SE 8[注釈 4] | Professional | Java SE 8 |
Oracle Certified Professional, Java EE 7 Application Developer | Professional | Java EE 7 |
Oracle Certified Master, Java EE 6 Enterprise Architect | Master | Java EE 6 |
Oracle Certified Expert, Java EE 6 Enterprise JavaBeans Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 JavaServer Faces Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 Web Services Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 Java Persistence API Developer | Expert | Java EE 6 |
Oracle Certified Expert, Java EE 6 Web Component Developer | Expert | Java EE 6 |
脚注
注釈
出典
- ^ Chaudhary, Harry H. (2014年7月28日). “Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans”. 2016年5月29日閲覧。
- ^ “The Java Language Environment” (May 1996). May 6, 2014時点のオリジナルよりアーカイブ。May 6, 2014閲覧。
- ^ “The Java Language Specification, 2nd Edition”. August 5, 2011時点のオリジナルよりアーカイブ。February 8, 2008閲覧。
- ^ “The A-Z of Programming Languages: Modula-3”. Computerworld.com.au. January 5, 2009時点のオリジナルよりアーカイブ。2010年6月9日閲覧。
- ^ 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 protocol) and primitive wrapper classes. [1] Archived July 13, 2011, at the Wayback Machine.
- ^ “What is Java and why do I need it?” (英語). 2019年1月閲覧。
- ^ “1.2 Design Goals of the Java™ Programming Language”. Oracle (January 1, 1999). January 23, 2013時点のオリジナルよりアーカイブ。2013年1月14日閲覧。
- ^ “Write once, run anywhere?”. Computer Weekly (May 2, 2002). 2009年7月27日閲覧。
- ^ Chan (January 22, 2019). “The 10 most popular programming languages, according to the 'Facebook for programmers'”. Business Insider. June 29, 2019時点のオリジナルよりアーカイブ。June 29, 2019閲覧。
- ^ Chan (January 22, 2019). “The 10 most popular programming languages, according to the 'Facebook for programmers'”. Business Insider. June 29, 2019時点のオリジナルよりアーカイブ。June 29, 2019閲覧。
- ^ “JavaOne 2013 Review: Java Takes on the Internet of Things”. www.oracle.com. April 19, 2016時点のオリジナルよりアーカイブ。2016年6月19日閲覧。
- ^ “Why should I uninstall older versions of Java from my system?”. Oracle. 2016年9月9日閲覧。
- ^ a b “Java Software | Oracle”. www.oracle.com. 2019年10月19日閲覧。
- ^ 広辞苑 第六版
- ^ “JAVASOFT SHIPS JAVA 1.0”. March 10, 2007時点のオリジナルよりアーカイブ。2008年2月5日閲覧。
- ^ Chander. “Introducing Java SE 11”. oracle.com. September 26, 2018時点のオリジナルよりアーカイブ。September 26, 2018閲覧。
- ^ “Oracle Java SE Support Roadmap”. www.oracle.com. 2020年10月27日閲覧。
- ^ “Support | AdoptOpenJDK”. adoptopenjdk.net. 2020年10月27日閲覧。
- ^ a b “Amazon Corretto 8 & 11 support extended” (2020年8月20日). 2020年10月27日閲覧。
- ^ “Opening Up Java EE - An Update” (英語). Oracle (2017年9月12日). 2019年3月10日閲覧。
- ^ “EE4J、EclipseファウンデーションがオープンソースJava EEを準備”. InfoQ (2017年11月16日). 2019年3月10日閲覧。
- ^ “Java EE は Jakarta EE となる”. InfoQ (2018年3月5日). 2019年3月10日閲覧。
- ^ 星 暁雄=日経BP Javaプロジェクト (2003年10月31日). “EclipseとWebSphere Studioはどう違うのか | 日経 xTECH(クロステック)”. 日経 xTECH(クロステック). Nikkei Business Publications, Inc.. 2019年11月17日閲覧。
- ^ Sun Microsystems, Inc (2007年5月8日). “Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community”. 2009年9月16日閲覧。
- ^ http://www.excelsior-usa.com/jet.html
- ^ “オラクル Java SE 認定資格パス 概要”. 2019年3月7日閲覧。
- ^ “オラクル Java EE and Web Services 認定資格パス 概要”. 2019年3月7日閲覧。
- ^ “Java Foundations Certified Junior Associate (novice-level certification)”. 2019年3月10日閲覧。
- ^ “認定試験一覧”. 2019年3月7日閲覧。
- ^ “Java資格が大幅リニューアル。Bronze/Silver/Goldが登場”. 2019年3月7日閲覧。
参考文献
- Jon Byous, Java technology: The early years. Sun Developer Network, 日付不明(1998年頃).(2005年4月22日に参照)
- James Gosling, A brief history of the Green project. Java.net, 日付不明(1998年第1四半期頃).(2005年4月22日に参照)
- James Gosling, Bill Joy, Guy Steele, and Gilad Bracha, The Java language specification, third edition. Addison-Wesley, 2005. ISBN 0-321-24678-0.
- 村上雅章(訳) 『Java言語仕様 第3版』 ピアソン・エデュケーション、2006年、ISBN 4-89471-715-8
- Tim Lindholm and Frank Yellin. The Java Virtual Machine specification, second edition. Addison-Wesley, 1999. ISBN 0-201-43294-3.
- 村上雅章(訳) 『Java 仮想マシン仕様 第2版』 ピアソン・エデュケーション、2001年、ISBN 4-89471-356-X
- ジョシュア・ブロック(著)、柴田芳樹(訳) 『Effective Java プログラミング言語ガイド』 ピアソン・エデュケーション、2001年、ISBN 4-89471-436-1
関連項目
- Javaの文法
- Javaのキーワード (予約語)
- Javaの性能
- Javaに対する批判
- C♯とJavaの比較
- Java仮想マシン
- Javaコンパイラ
- Java Community Process - Java技術の標準化プロセス
外部リンク
- オラクル・JCP関連
- Java.com - Javaのユーザー向け公式サイト
- Java | Oracle Community - Javaの技術者向け公式サイト
- Java Community Process - JCPのサイト。JSRなどを閲覧できる
- Oracle Technology Network - Java - オラクルの技術者向けサイト
- 技術情報
- @IT: Java Agile - Java技術者のための情報提供/情報交換フォーラム
- IBM developerWorks Java technology - IBM developerWorks の開発者向けの記事
- Computer-Books.us - Java の複数の書籍(無償でダウンロード可能)
- Java SE - オラクル(旧サン)によるJREとJDKの実装
- Oracle JRockit - オラクル(旧BEAシステムズ)によるJava仮想マシンとJDKの実装
- OpenJDK
- GNU Compiler for Java (GCJ)