「Java」の版間の差分
削除された内容 追加された内容
タグ: 2017年版ソースエディター |
Goldensundown2 (会話 | 投稿記録) |
||
(同じ利用者による、間の1版が非表示) | |||
26行目:
Javaは、1995年に[[サン・マイクロシステムズ]]によって公開された。2010年にサンは[[オラクル (企業)|オラクル]]に吸収合併され、Javaの各種権利もオラクルに移行した。おおよそ数年おきに言語仕様の改訂が重ねられており、2019年4月現在の最新メジャーバージョンは、2019年3月19日に公開された第12版となっている。
== Javaの特徴 ==
129 ⟶ 92行目:
Javaのプラットフォーム非依存性は、[[サーバ]]側や[[組み込みシステム]]のアプリケーションに関しても成功を収めている。サーバ側 ([[Java Platform, Enterprise Edition|Java EE]]) では、Java の[[Java Servlet|サーブレット]]、[[Webサービス]]、[[Enterprise JavaBeans|EJB]] (Enterprise JavaBeans) などの技術が広く使われている。組み込みシステムの分野においても、組み込みシステム向けの Java環境 ([[Java Platform, Micro Edition|Java ME]]) を使った[[OSGi]]を基にした開発が広く行われている。
=== マルチスレッド ===
Javaではその前身であるGreenOS用言語およびOakと呼ばれていた頃にあたる、主に家電機器向け組込システムへの普及を目指していた初期の段階から、スレッド式(''threaded'')を基底要素にして設計されていた。組込システム開発では主に2~4タスクによる並行処理が要望される状況が頻出しており、大抵はシングルタスクでも実装可能なコルーチンによる交互切り替えフローで対応される事が多かった。家電機器の高機能化に伴うマルチタスク環境のニーズ増加を予測したサン社のプロジェクトチームは、その組み込み分野におけるシェア独占を目指してマルチスレッド機能の標準配備を、プログラミング言語と仮想マシン設計における重要課題としていた。初期バージョンにおけるJavaのスレッドは、仮想マシンソフトウェア上のユーザー空間で走行される純粋なユーザースレッドとして実装された。一台のJava仮想マシンの実行は一つのプロセスとなり、Javaのプロセスは始めから複数スレッド(糸)の寄り合わせとして設計されていた。この高度なネイティブスレッド・エミュレート技術は注目を集め、その開発チームの名に因んだグリーンスレッドという名称を確立し、ランタイムライブラリ及び仮想マシン上で走行されるマルチスレッドの代名詞となった。グリーンスレッドは公開初期においては、例えばLinuxのネイティブスレッドよりもやや軽量なパフォーマンスを発揮した。組み込みシステム向けのJava仮想マシンでは基本的にこのグリーンスレッドが標準仕様となり続けている。しかし、パソコンやサーバーマシン用の各OSの間で、マルチコアCPUの特性を活かして設計された更に軽量なネイティブスレッドが一般的になると、グリーンスレッドのパフォーマンスは明確に見劣りするようになった。やむなく開発チームはグリーンスレッドを順次廃止し、JavaのスレッドをOSが提供するネイティブスレッド上で走行させるように設計変更した。これはやや苦汁の決断だったようで、特に並行処理同期=排他制御を多用するJavaプログラムにおいては、この時点からプラットフォーム非依存性に対する問題が生じるようになったと言われる。
183 ⟶ 146行目:
=== 例外処理 ===
Javaは[[例外処理]]の構文を備えている。これは制御フローの一種であり、例外想定ブロック内の実行中に状態異常が発生すると例外オブジェクトが生成されて、その宛先となる例外捕捉ブロックに強制ジャンプするという仕組みを指す。これは「例外を投げる」と形容されている。例外捕捉ブロックでは、渡された例外オブジェクトの情報に基づいた任意の例外解決処理を行
例外処理は様々なコード局面での使用が推奨されたが、例外発生後のコードが全スキップされるというフロー上の性質から例外想定ブロック内のコード行数は比較的少ないものとなり、それら例外ブロックの断続的な羅列は却ってソースコードの可読性低下にも繋がった。例外処理による堅牢性と、コーディングレベルでの利便性および実用性は様々な部分でマッチしなかったとも言える。また、実行中の多方面に影響が及ぶような致命的な例外ほど、単純な例外ブロックの記述では対応しきれず、細部の例外ブロックから更に大枠の例外ブロックへ飛ぶというような大胆なジャンプを頻発させてプログラムの把握が難しくなるという欠点もあった。結果的に例外処理は、入出力機能の呼び出しなど決まりきった状態異常の発生部分では積極的に用いられるが、それ以外ではコーディングの頻雑さに勝るだけの有用性がそれほど認められていないのが実情となっている。
580 ⟶ 543行目:
APIは、アプリケーション・プログラミング・インタフェースの頭字語であり、Javaクラスライブラリ内部からプログラマに向けて外部公開されているクラス、インタフェース、メソッド、フィールド、定数の集合である。プログラマはこれを用いてアプリケーションソフトウェアの開発を行う。
# java.lang - Java言語仕様の基礎を扱う。
# java.io - ファイル入出力など。
# java.util - 配列の操作とList、Set、Mapなどのデータ集合。
# java.math - 各種計算。
# java.text - 暦、日付、時間、通貨、文字コードなどの国際化と地域化を扱う。
# java.net - ソケットを置いてリモートポートを開きストリーム入出力を扱う。
# java.awt - ウィンドウとスイッチとイメージを表示し、ユーザーからの操作を認識する。
# java.applet - アプレット生成用。
# java.beans - Java版ソフトウェアコンポーネント作成用。
# java.sql - SQLを扱う。
# java.rmi - 外部マシン上にあるプロセス・メソッドを呼び出す。
# java.security - 様々な通信セキュリティプロトコルを扱う。
# java.nio - 連続バイトデータを扱う。
# java.lang.reflect - クラス定義を動的に操作する。
;統合開発環境と開発支援ツール
653 ⟶ 631行目:
1996年のJava登場初期から、ベンダー元の[[サン・マイクロシステムズ|サン社]](後に[[オラクル (企業)|オラクル社]]が買収)は、Java仮想マシンとJavaクラスライブラリの仕様を公開しており、サードパーティによるJavaプラットフォーム移植と関連ソフトウェアと拡張テクノロジの開発を促していた。しかし過度の技術流出を避ける為の枠組みとして、ソースコードの改変までは認めていなかった。この部分的オープンソース制度に便乗する形で2004年から、[[IBM|IBM社]]と[[BEAシステムズ|BEAシステムズ社]](後にオラクル社が買収)が、独自のオープンソース化を目的にしたJava関連ソフトウェア&拡張テクノロジの開発を支援するプロジェクトを立ち上げていた。その中でJava仮想マシンと標準クラスライブラリの互換製品も登場していた。
それらの標準化が進む
;GNUプロジェクト
659 ⟶ 637行目:
;Windows / Linux用プラットフォーム
メジャーなオペレーティングシステム(OS)では、営利企業および任意団体による独自開発のJREとJDKが公開されている事が多い。[[Linux]]/[[IA-32]]プラットフォームでは、オラクル、Blackdown、IBM、Kaffe.org、GNUプロジェクトなどがJREやJDKを実装・提供していた。同様に[[Microsoft Windows|Windows]]/IA-32プラットフォームでもオラクル、IBMなどがJREやJDKを実装・提供していた。
;Excelsior JET
|