削除された内容 追加された内容
タグ: Refタグつき記述の除去 ビジュアルエディター
(同じ利用者による、間の2版が非表示)
43行目:
 
# 言語仕様はシンプルで、オブジェクト指向で、見慣れたものにする(''simple, object-oriented, and familiar'')
# 堅牢(エラバグコ動作の抑止)で安全(不正アセスラッキングの防止)にする(''robust and secure'')
# プラットフォーム非依存で、移植を容易にする(''architecture-neutral and portable'')
# 高いパフォーマンスで動作する(''executing with high performance'')
# インタプリタ(仮想マシン)式で、マルチスレッドで、コードを動的に再解釈できる(''interpreted, threaded, and dynamic'')
 
(1)に関しては、C++をベースにした構文が採用されたが実装の多重継承や演算子オーバーロードなど、言語仕様および処理系の実装を複雑にする機能は採用されなかった<ref group="注釈">ジェネリクスおよび列挙型は当初採用されていなかったが、のちにJava 1.5で追加された。</ref><!-- 言及すべきは予約語の数ではない。予約語の多寡だけで複雑度が決まるわけではない。ベースとなったC++と比較して、削除されたキーワードもあれば、追加されたキーワードもある。予約はされているが使われていないものもある。 -->。オブジェクト指向はクラスベースとされたが、{{独自研究範囲|date=2019年3月|メッセージベースsmalltalk的OOPを実装できる言語仕様とAPI}}{{要説明|date=2019年3月}}<!-- こじつけ? -->加されている。(2)に関しては、ポインタ、アドレス直指定変数、goto文、多重継承、ジェネリクス、演算子オーバーロードなどを堅牢性を損ねるも柔軟だが危険な機能は採用せず、として破棄した。その反対として強い静的型付け定義、例外処理、ガジコレクタなどを採用した。動作上の堅牢性は仮想マシンと不正コードチェックを兼ねたクラスローダを根幹とし、これは同時にプログラムをサンドボックス化して基礎レベルからのセキュリティを確立した。(3)と(4)はJava仮想マシンの技術に依存した。(5)に関しては、マルチスレッドの取り扱いは<code>synchronized</code>ブロックと{{疑問点範囲|date=2019年3月|3つの予約語}}{{要説明|date=2019年3月}}というシンプルな設計でまとめられた。{{独自研究範囲|date=2019年3月|ダイナミック性は様々に解釈できるが、多重ディスパッチは<code>instanceof</code>演算子とダウンキャストと例外処理の活用で実装でき、動的ディスパッチは<code>Serializable</code>インタフェースとリフレクションAPIの用で表現できた}}。
 
=== オブジェクト指向 ===
579行目:
{{独自研究|section=1|date=2019年3月}}
{{Main|Javaプラットフォーム}}
Javaプラットフォーム(''Java Platform'')は、Javaプログラムを開発または実行する為のソフトウェア群の総称であり、より具体的に言うと{{独自研究範囲|'''Java実行環境'''(JRE)と'''Java開発キット'''(JDK)と'''拡張それ以外のJavaテクノロジ'''のである|date=2019-03-07}}。{{独自研究範囲|拡張Javaテクノロジとは様々なIT分野においてJavaを基盤開発された関連するIT技術の総称である|date=2019-03-07}}。Javaプラットフォームは対象環境に合わせて、JREおよびJDKの構成内容と、追加される拡張Javaテクノロジの組み合わせを変えたエディションに編集されて公開されている。これらの各技術要素またはその総称をJavaテクノロジと呼ぶ。Javaテクノロジは公式権利元ベンダーだけでなくサードパーティ側からも提供されており、パーソナルコンピュータ、サーバーマシン、[[フィーチャーフォン]]、[[スマートフォン]]、[[タブレット (コンピュータ)|タブレット]]、組み込みシステム、マイクロコントローラ、スマートカードなどのあらゆる環境に対応したJavaプラットフォームが存在している。各技術の品質を評価して認証するJavaテクノロジの標準化は、公式ベンダーである[[オラクル (企業)|オラクル社]]([[サン・マイクロシステムズ|サン社]])を始めとする各企業各団体が参画する[[Java Community Process|Javaコミュニティプロセス]](JCP)が管理している。Javaテクノロジの中核となるJREとJDKはオープンソース化されているので、各企業及び任意団体及び開発者各自が営利または非営利で膨大な数のソフトウェアと関連技術を公開し、巨大なITエコシステムを構築している。
 
=== エディション ===
{{いつ範囲|date=2019年3月|現在}}、Java権利元のオットフォームにクル社対象環境に合わせたJavaプラットフォームの4つの仕様セエディションを公開している。エディションによってJava実行環境とJava開発キットに含まれるツール構成に違い存在すあり、またクラスライブラリとAPIの構成内容も異なっている。Java仮想マシンの性能にも差異がある。JDK 1.1までは単体エディションで、J2SE 1.2から3エディションに分かれた。J2SE 5.0頃から拡張テクノロジの一つであったJava Cardが昇格して4エディションとなった。なお、これら公式エディションの他にも、サードパーティ側から様々なJavaプラットフォームの互換品=互換エディションが公開されている
 
Javaプラットフォームの[[実装]]はいずれかの仕様に準拠し、互換性テスト({{仮リンク|Technology Compatibility Kit|en|Technology Compatibility Kit}})に合格する必要がある{{efn|受けない、合格しない場合は ''Java'' などの商標をはじめとする知的財産権の利用を認められない。}}。
 
; [[Java Platform, Standard Edition]] (Java SE)
605 ⟶ 603行目:
{{Main|Java Runtime Environment}}
 
Java実行環境 (''Java Runtime Environment'') は、Javaアプリケーションを実行するために必要なソフトウェアである。'''[[Java仮想マシン]]'''(''Java Virtual Machine'')と、<nowiki>''</nowiki>Java.exe<nowiki>''</nowiki>を始めとする様々な'''スターター'''(Web用プラグインを含む)と、'''Javaクラスライブラリ'''(''Java Class Library'')で構成される。Java実行環境の中核はJava仮想マシンである。エディション毎に仮想マシンの仕様と性能は異なっており、また実行時は複数の動作モードを持つ。仮想マシンはスターターを通して稼働されるのが普通である。様々な使用状況に対応したスターターが最初に実行されて、そこから仮想マシンが呼び出されてJavaプログラムの実行を移譲される。仮想マシンはJavaクラスライブラリを逐次読み込みながらJavaプログラムを実行する。エンドユーザはソフトウェアパッケージか、企業/団体サイトからのダウンロード、又はWEBブラウザ[[プラグイン]]を通してJava実行環境をインストールする。Java実行環境のツール内容とクラスライブラリ構成は、エディション毎に違いがある。
 
エンドユーザはソフトウェアパッケージか、企業/団体サイトからのダウンロード、又はWEBブラウザ[[プラグイン]]を通してJava実行環境をインストールする。Java実行環境のツール内容とクラスライブラリ構成は、エディション毎に違いがある。
 
;Javaクラスライブラリ
615 ⟶ 611行目:
# 基礎ライブラリ - Java言語仕様の基礎を扱う。
# 入出力ライブラリ - ファイル入出力など。
# データコレクションライブラリ - 配列の操作と{{要検証範囲|date=2019年3月|順序収納List索引収納Set連想収納}}Mapなどのデータ集合。
# 数学ライブラリ - 各種計算。
# 国際化地域化ライブラリ - 暦、日付、時間、通貨、文字コードなどの[[国際化と地域化]]を扱う。
644 ⟶ 640行目:
{{main|Java Development Kit}}
 
Java開発キット (''Java Development Kit'') は、Javaプログラムを開発するための基本的なソフトウェアである。[[Javaコンパイラ|コンパイラ]]、デバッガ、アーカイバ、ソフトウェアモニター、ドキュメントジェネレーターなどの'''基本開発ツール'''と、様々な'''開発支援ツール'''と、'''Java API'''(''Java Application Programming Interface'')で構成されている。前述のエディションによって開発ツール内容とAPI構成に違いがある。Java開発キットの呼称はこれまでに何度か変更されている。
 
*J2SE 1.2.2_004 までは、JDK(''Java Development Kit'')と呼んでいた。
657 ⟶ 653行目:
# java.lang - Java言語仕様の基礎を扱う。
# java.io - ファイル入出力など。
# java.util - 配列の操作と{{要検証範囲|date=2019年3月|順序収納List索引収納Set連想収納}}Mapなどのデータ集合。
# java.math - 各種計算。
# java.text - 暦、日付、時間、通貨、文字コードなどの国際化と地域化を扱う。
690 ⟶ 686行目:
*'''[[JUnit]]''' - Javaアプリケーションの単体テストフレームワーク。単体テストを自動化する。[[xUnit]]の一種である。[[テスト駆動開発]]を支援する。
 
=== 様々なJavaの拡張テクノロジ ===
<!--================================================================================
ここには、Java Community Process のもとで開発された拡張機能と関連技術のみを記述します。
=================================================================================-->
拡張Javaプラットフォームの構成要素であるJavaテクノロジは様々な営利企業および任意、各団体、各開発者から、javaxパッケージまた様々な形で公開されている。具体的な実装形態として、主にorgパッケージなどのJava API、JREとJDKを中核にした拡張独自仕様コンテナの形態で提供されている。また様々なアリケーション、ログラム&ソフトウェアコンポーネントデータベースシステム、ネットワーク&通信プロトコル等を組み合わせたソフトウェア・統合システムとして公などがある。各発元から提示されている。以下た技術その代表例でありいずれも[[Java Community Process|Javaコミュニティプロセス(JCP)]]による審査を合格した後にJavaテクノロジの一つとし認証される。これを標準化され(''standardization'')と言う。Javaテクノロジは多岐に渡る分野に存在している。その一例を以下に列挙する。
 
*[[Java Naming and Directory Interface|JNDI]] (Java Naming and Directory Interface) - ネーミングサービス[[ディレクトリ・サービス|ディレクトリサービス]]へのアクセスを扱う
* JSML (Java Speech Markup Language) - [[音声合成]]システムにテキストの注釈を追加する
*[[JDBC]]<!--(Java Database Connectivity)--> - [[データベース]]接続の API
702 ⟶ 698行目:
*JAI (Java Advanced Imaging) - 画像を扱うための高水準なオブジェクト指向 API
*JAIN (Java API for Integrated Networks) - 統合された通信ネットワークの API
*JDMK (Java Dynamic Management Kit) - JMX仕様に基づいたアプリケーション開発支援するソフトウェア
*Jini - 分散システムを構築するネットワークアーキテクチャ
*Jiro - 分散した記憶装置を管理する技術
*JavaSpaces - 分散環境でJavaオブジェクトの送受信・永続化などを支援する技術
*JML (Java Modeling Language) - [[契約による設計|契約による設計(DbC)]] (Design by contract) に基づいを指向し開発形式言語支援ソースコードに導入する技術
*JMI (Java Metadata Interface) - Javaのメタデータの作成・アクセス・検索・送受信に関する仕様
*[[Java Management Extensions|JMX]] (Java Management Extensions) - 分散オブジェクト環境における機器・アプリケーション・ネットワークサービスの管理 / 監視を行う技術
*[[JavaServer Faces|JSF]] (JavaServer Faces) - Java EE によるウェブWEBクライプリケーショでユートに一定のデザインタフェースの簡易な開発に基づいたUI支援提供するサーバー用技術
*[[Java Native Interface|JNI]] (Java Native Interface) - Java から他の言語で実装されたネイティブなプログラムやライブラリコードを呼び出すための仕様技術
*[[JXTA]] - [[Peer to Peer]] (P2P) の仮想ネットワークのためのオープンプロトコル
*[[Java3D|Java 3D]] - 3次元グラフィクスプログラミングのための高水準な API [https://java3d.dev.java.net/ Java 3D]<!--([http://java.sun.com/products/java-media/3D/ ホーム]、[http://java.sun.com/products/java-media/3D/forDevelopers/J3D_1_3_API/j3dapi/ API])-->
*JOGL (Java OpenGL) - [[OpenGL]] を使う3Dグラフィクスプログラミングのための低水準な API
*[[LWJGL]] (Light Weight Java Game Library) - ゲーム開発するため低水準な API で、[[OpenGL]]、[[OpenAL]]、[[OpenCL]] および多を扱える。[[入力機器]]の制御機能ゲーム用コントローラー提供す扱え
*[[OSGi]] - サービスの動的な管理と遠隔保守<!--
*Java Media APIs [http://java.sun.com/products/java-media/](リンク切れ?) - java.media - マルチメディア向けAPI--><!--
*Shared Data ToolkitSound-->
*[http://community.java.net/javadesktop/ JavaDesktop]
*[[JavaOne]]
*[[BD-J|Blu-ray Disc Java]]
*[[FindBugs]] - javaソースコードからコーディングレベルのバグを発見する開発支援ツール。
*[[CheckStyle]]
 
=== Javaテクノロジの標準化 ===
{{Main|Java Community Process}}
 
Javaプラットフォームを形の構要素であるJavaテクノロジの標準化(''standardization'')は、[[Java Community Process|Javaコミュニティプロセス(JCP)]] (Java Community Process, JCP) に管理されてい。標準化とはその技術の品質を評価してJavaテクノロジの一つとして認証する事である。JCPに参画すが発行してい事で数々の[[:Category:Java specification requests|Java仕様要求書(JSRs)]]によって、Javaテクノロジの標化カンファレンスに関与で拠すべた。[[ボーランド|ボーランド社]]、[[富士通]]、[[Apacheソフトウェア財団]]、[[ヒューレット・パッカード|ヒューレット・パッカード社]]なども参加し仕様規定と技術基準は逐一定められていJCPその中にはJavaプラットフォーム言語に追加される新たな言語仕様や技術を、JSRs (''Java Specification Requests'') と呼ばなどのコアテクノロジも含まる文書で公開していJava言語仕様標準APIして主に5.0版に関連したJSRsを以下に列挙する。
 
*[http://www.jcp.org/en/jsr/detail?id=14 JSR 14] ''Add [[総称型|Generic Types]] To The Java Programming Language'' (J2SE 5.0)
*[http://www.jcp.org/en/jsr/detail?id=41 JSR 41] ''A Simple [[表明|Assertion]] Facility'' (J2SE 1.4)
*[http://www.jcp.org/en/jsr/detail?id=47 JSR 47] ''[[ロギング|Logging]] API Specification''(J2SE 1.4)
*[http://www.jcp.org/en/jsr/detail?id=51 JSR 51] ''New I/O APIs for the Java Platform'' (J2SE 1.4)
*[http://www.jcp.org/en/jsr/detail?id=59 JSR 59] ''J2SE Merlin Release Contents'' (J2SE 1.4)
*[http://www.jcp.org/en/jsr/detail?id=121 JSR 121] ''Application Isolation API''
*[http://www.jcp.org/en/jsr/detail?id=133 JSR 133] ''Java Memory Model and Thread Specification Revision'' (J2SE 5.0)
*[http://www.jcp.org/en/jsr/detail?id=166 JSR 166] ''Concurrency Utilities'' (J2SE 5.0)
738 ⟶ 730行目:
*[http://www.jcp.org/en/jsr/detail?id=176 JSR 176] ''J2SE 5.0 (Tiger) Release Contents'' (J2SE 5.0)
*[http://www.jcp.org/en/jsr/detail?id=201 JSR 201] ''Extending the Java Programming Language with [[列挙型|Enumerations]], [[オートボクシング|Autoboxing]], [[foreach文|Enhanced for loops]] and Static Import'' (J2SE 5.0)
*[http://www.jcp.org/en/jsr/detail?id=203 JSR 203] ''More New I/O APIs for the Java Platform ("NIO.2") '' (Java SE 7)
*[http://www.jcp.org/en/jsr/detail?id=204 JSR 204] ''Unicode Supplementary Character Support'' (J2SE 5.0) - [[Unicode]] 3.1 のサポート
*[http://www.jcp.org/en/jsr/detail?id=244 JSR 244] ''Java EE 5 Specification'' (Java EE 5)
*[http://www.jcp.org/en/jsr/detail?id=270 JSR 270] ''Java SE 6 ("Mustang") Release Contents'' (Java SE 6)
*[http://www.jcp.org/en/jsr/detail?id=275 JSR 275] ''Physical Units/Quantities Support (Java SE) - JScienceをもとにした[[リファレンス実装]]''
*[http://www.jcp.org/en/jsr/detail?id=901 JSR 901] ''Java Language Specification'' (J2SE 5.0)
 
772 ⟶ 760行目:
JSmoothなどは、Java実行環境が無い時はそれも自動インストールする機能を備えている。また、純粋なJava実行環境では不可能だったタスクアイコンを表示させる機能も備えている。
<!-- ただし、これらのツールには最新の[[JDK]]でコンパイルされた[[jar]]ファイルには対応していないなどの欠点もある上、{{いつ範囲|date=2019年2月|近年}}の [[Microsoft Windows|Windows]] にはほとんどにJavaがインストールされているため、あまり普及していない。 -->
 
== Javaへの批判 ==
{{出典の明記|section=1|date=2019年3月}}
<!-- WARN: 特定執筆者の無思慮かつ勝手な独断で内容が削除・改竄されすぎていて、まともな項目の体をなしていない。出典もまったくない。加えて、内容がまったく検証されておらず、間違った記述もかなり多い。また、古い内容だからといって削除するのはおかしい。たとえ古い内容であっても、歴史を振り返るうえでは重要なものもある。根拠となる出典を示せる場合、「以前は……という批判があったが、その後……となった」などの形で残すべき。 -->
{{main|Javaに対する批判}}
 
=== 言語設計 ===
{{see|[[C SharpとJavaの比較|C#とJavaの比較]]}}
 
=== 動作性能 ===
{{main|Javaの性能}}
<!-- WARN: 「それなり」「概ね」「それほど」といったあいまいな修飾語は避けるべき。 -->
{{要出典範囲|date=2019年3月|公開初期のJava仮想マシンは動作速度の遅さと必要メモリリソースの大きさを指摘される機会が多かったが、開発元の技術研鑽による[[ジャストインタイムコンパイラ|JITコンパイル]]の導入とその改善の積み重ねによって、ネイティブコード実行とさほど遜色の無い動作速度が得られるようになった。メモリ消費量にもそれなりの抑制が見られたが、こちらは仮想マシン機能の巧みな取捨選択で実現されているケースが多く、またある程度はハードウェア環境の進化にも依存していた}}。{{いつ範囲|date=2019年3月|現在}}のJava仮想マシンは{{要出典範囲|date=2019年3月|動作速度面で概ね好評を得ており、またメモリリソース面でもそれほど問題は指摘されていない}}。
 
=== ルックアンドフィール ===
<!-- これはJavaというよりはSwingに対する批判。 -->
[[ルック・アンド・フィール|ルックアンドフィール]] (look and feel) とは、アプリケーションにおけるグラフィカルユーザインタフェース (GUI) 部分の外観と振る舞いである。クロスプラットフォーム指向で開発されたJavaは、同時に特定のデザインに依存しない方針を貫いていたため、[[ウィジェットツールキット]]である[[Swing]]には独自のルックアンドフィール「Metal」が採用されていた。しかしこのルックアンドフィールは、各プラットフォームにおけるネイティブGUIアプリケーションのルックアンドフィールと大きく異なるため、馴染みにくさを指摘されることが多かった。Swingは[[プラグイン]]可能なルックアンドフィールの機構を備えており、サンはSwingの表示処理に適用できる[[Microsoft Windows|Windows]]、[[Classic Mac OS|Mac OS]]、[[Motif (GUI)|Motif]]といった各OSのルックアンドフィールを模倣したテーマを提供するようになった。これにより、アプリケーションはSwing既定のルックアンドフィールではなく、プラットフォームネイティブと同様のルックアンドフィールを利用できるようになった<ref group="注釈"><code>UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())</code>を呼び出すことで、システムネイティブのルックアンドフィールを適用できる。</ref>。
 
=== 移植性と互換性 ===
Javaは高い[[移植性]]と[[互換性]]を実現するべく開発されており、ある程度の水準まで達成しているが、課題が残っている。Javaのバージョン間の[[下位互換]]性・[[上位互換]]性が完全ではないことが問題として議論の対象になっている。Javaは高い移植性を保つため、一部のプラットフォームにしかない独自の機能はJavaからは使えない。[[Java Native Interface]] (JNI) を経由することで、C/C++言語などを利用して特定のプラットフォーム固有あるいはプロセッサ独自の機能にアクセスすることはできるが、その場合はJavaによる移植性や互換性の恩恵は得られなくなる。
 
== Java認定資格 ==
827 ⟶ 795行目:
 
== 脚注 ==
{{脚注ヘルプ}}'''注釈'''{{Reflist|group=注釈}}'''出典'''{{reflist|2}}
=== 注釈 ===
{{Reflist|group=注釈}}
=== 出典 ===
{{reflist|2}}
 
== 参考文献 ==
847 ⟶ 811行目:
{{Commonscat|Java (programming language)}}
*[[Javaの文法]]
*[[キーワード (Java)|Javaのキーワード (予約語)]]
*[[Javaの性能]]
*[[キーワード (Java)に対する批判]]
{{see|*[[C SharpとJavaの比較|C#C♯とJavaの比較]]}}
*[[Javaプラットフォーム]]
*[[Java仮想マシン]]
*[[Java Platform, Standard Edition]] (Java SE)
*[[Javaコンパイラ]]
*[[Java Platform, Enterprise Edition]] (Java EE)
*[[Java Platform, Micro Edition]] (Java ME)
*[[Java仮想マシン]] - Javaプログラムを実行する[[仮想機械|仮想マシン]]
*[[Javaコンパイラ]] - Javaプログラムを[[Javaバイトコード]]に変換する[[コンパイラ]]
*[[Java Development Kit]] - [[Javaアプリケーション]]を開発するために必要な開発キット。
*[[Java Runtime Environment]] - [[Javaアプリケーション]]を実行するために必要な環境。
*[[Java Servlet]] - [[サーバ]]側で動的に[[ウェブページ]]などを生成するJava技術
*[[Javaアプレット]] - [[ウェブブラウザ]]上で実行されるアプリケーション。
*[[Java Web Start]] - [[Javaアプリケーション]]配布の簡便化を目指した技術。
*[[BD-J]]
*[[Java Community Process]] - Java技術の標準化プロセス
*[[JavaOne]]
 
== 外部リンク ==