削除された内容 追加された内容
編集の要約なし
バージョン履歴
1行目:
{{Otheruses|コンピューターのプログラミング言語およびプラットフォーム|その他|ジャバ}}
{{混同|JavaScript}}{{出典の明記未検証|section=1| date = 2019年3月}}{{未検証|section=1出典の明記| date = 2019年3月}}
{{Infobox プログラミング言語
| fetchwikidata = ALL
73行目:
*スレッドがリソースアクセスなどの操作をする度に、セキュリティマネージャが現行のパーミッションを調べて対象外なら例外を発生させる。
*その際はスレッドの各通過メソッドのクラスのパーミッションが全チェックされ、原則的に最少パーミッションの方に合わせる。
*遠隔ロードされたappletクラスなどパーミッション皆無ないクラスを通ったスレッドは、完全なサンドボックス実行になりほとんどのリソースにアクセスできなくなる。
 
実際には上記に加えて、各クラスを同一操作&同一セキュリティレベルでまとめるドメイン機構、認証と承認によるユーザーパーミッション機構、バイトコード送受信時の署名付き証明書機構などが組み合わされて実装運用される。
102行目:
1994年秋までにグリーンチームは、Oakを'''Java'''に、WebRunnerを「[[HotJava]]」に改称した。その理由はOakがすでにビデオカードアダプタ製造会社の登録商標になっていたからだった。この命名は一部のチームメンバーがよく出入りしていた近くのコーヒーショップで決定されたという。Javaの由来は不明とされているが、ロゴが示している通りコーヒーに因んでいるのは明らかである。ジャワ島はコーヒー豆の名産地であり、豆(''Bean'')はJavaテクノロジ内でコンポーネントを指す用語にされている。
 
1994年10月、JavaランタイムとHotJavaブラウザがサン社幹部社員の前でデモンストレーションされ、α版が社内公開された。1995年5月23日のSunワールドカンファレンスで、JavaランタイムとHotJavaブラウザが社外初披露された。ここでは[[Javaアプレット]]の技術が大々セールスポイント的にアピールされた。同時に[[ネットスケープコミュニケーションズ|ネットスケープ社]]が「[[Netscape Navigator (ネットスケープコミュニケーションズ)|Netscape Navigator]]」ブラウザへもこのアプレット機能を配備するとアナウンスして業界の注目を集めた。1995年秋にβ版が社外公開された。1996年1月9日にサン社は正式にJavaソフトウェア部門を立ち上げた。その2週間後に最初の公開バージョンである「JDK 1.0」が市場リリースされた。
 
=== バージョン履歴 ===
210行目:
*Date and Time API(日付時刻)
*静的結合 [[Java Native Interface]] ライブラリ
*Java ME 8 に[[Connected Limited Device Configuration|CLDC]]と[[Connected Device Configuration|CDC]]が統合された<ref>{{Cite web|url=http://cloud.watch.impress.co.jp/docs/news/20120221_513391.html|title=7年ぶりのJavaOne Tokyoでは「Javaテクノロジーのすべてを見せる」 - クラウド Watch|language=ja-jp|accessdate=2012-02-22}}</ref>。
 
==== Java SE 9 (2017年9月21日) ====
ここからメジャーバージョンは一定の新機能蓄積を待たずに公開する毎年3月と9月の年2回定期リリース制に変更された<ref>{{Cite web|url=https://www.oracle.com/technetwork/jp/java/eol-135779-ja.html|title=Oracle Java SE サポート・ロードマップ|language=ja-jp|accessdate=2018-10-19}}</ref>。従来の長期サポート(LTS)が無くなり半年間限定になった
 
* 言語仕様に''package''を統合分類する「''module''」の導入(Project Jigsaw)
234 ⟶ 233行目:
 
==== Java SE 11 (2018年9月25日) ====
JSR 384にて仕様規定<ref>[http://jcp.org/en/jsr/detail?id=384 JSR 384: JavaTM SE 11 (18.9)]</ref>。Java開発環境として「Oracle JDK」と「[[OpenJDK]]」の二つが提供されるようになり、前者の商用利用は有償長期サポート(LTS)契約を結んだ顧客のみになった。Java EEのアップグレードがエクリプス財団による「Jakarta EE」に移譲されたので、JDKにEnterprise版連携モジュールが含まれなくなった。CORBAモジュールも外された。[[JavaFX|Java FX]]も取り除かれた。
 
* Dynamic class-file constants(invoke_dynamic拡張、動的ロードされたクラスへの定数ブートストラップ呼出)
259 ⟶ 258行目:
==== Java SE 14(2020年3月17日) ====
JSR 389にて仕様規定。
 
* Recordクラス(メンバ変数不変でコンストラクタと標準メソッドが自動定義されるイミュータブルオブジェクト)
* パターンマッチングinstanceof構文(if文のinstanceof判定で変数も同時定義できる糖衣構文)
* switch文のcase結果値を代入式に組み込める糖衣構文
* Text Blocks(文字列定義の複数行化)
* Foreign-Memory Access API (仮想マシンヒープの外部メモリにも安全にアクセスできる)
* Zガベージコレクタ
 
== Javaプログラミング例 ==
305 ⟶ 311行目:
== Javaプラットフォーム ==
{{Main|Javaプラットフォーム}}
Javaプラットフォーム(''Java Platform'')は、Javaプログラムを開発または実行する為のソフトウェア群の総称である。Javaプラットフォームは対象環境に合わせて、JREおよびJDKの構成内容と、追加されるJavaテクノロジの組み合わせを変えたエディションに編集されて公開されている。Javaテクノロジは権利元ベンダーだけでなくサードパーティ側からも提供されており、その標準化は[[Java Community Process|Javaコミュニティプロセス]](JCP)が管理している。Javaテクノロジの中核となるJREとJDKはオープンソース化されているので、各企業、任意団体及び開発者各自が営利または非営利で膨大な数のソフトウェアと関連技術を公開し、巨大なITエコシステムを構築している。
 
=== エディション ===
329 ⟶ 335行目:
Javaクラスライブラリは、普遍的に呼び出される特定の機能を実装したクラスの集合体である。Javaプログラムはライブラリ内のクラスを逐次呼び出しながら処理を実行する。なお、それぞれのJavaクラスライブラリ内部からプログラマの利用に向けて外部公開されている部分を「Java API」と呼ぶ。
 
# 基礎ライブラリ - Java言語仕様の基礎を扱う。
# 入出力ライブラリ - ファイル入出力など。
# データコレクションライブラリ - 動的配列の操作List、Set、Mapなどの動的連想配列。データ集合の操作
# 数学ライブラリ - 各種計算を扱う
# 国際化地域化ライブラリ - 暦、日付、時間、通貨、文字コードなどの[[国際化と地域化]]を扱う。
# ネットワークライブラリ - ソケットを置いてリモートポートを開きストリーム入出力通信を扱う。
# GUIライブラリ - グラフンドウとスイッチとイメージを表示し、カル・ユーザーからの操作インターフェース認識する扱う
# Javaアプレットライブラリ - アプレット生成用。
# Javaビーンズライブラリ - Java版ソフトウェアコンポーネント作成用。
# データベース接続ライブラリ - SQLを扱う。
# リモートメソッドライブラリ - 外部マシン上にあるプロセス・メソッド分散オブジェクト呼び出す扱う
#セキュリティライブラリ - 様々な通信セキュリティプロトコルを扱うポリシー、ユーザー認証と権限承認、公開鍵暗号方式など
# バッファストリームライブラリ - 連続バイトデータを扱う。
#リフレクションライブラリ - クラス定義を動的に操作する。
 
;Javaアプリケーションの形態
371 ⟶ 375行目:
APIは、アプリケーション・プログラミング・インタフェースの頭字語であり、Javaクラスライブラリ内部からプログラマに向けて外部公開されているクラス、インタフェース、メソッド、フィールド、定数の集合である。プログラマはこれを用いて各種ソフトウェアの開発を行う。APIは基本的にクラスライブラリの所属に沿って、パッケージ(''package'')と呼ばれる名前空間で分類されて提供されている。パッケージは各ワードをピリオトで連結して階層化されている。先頭ワードのjavaは開発元提供の純正基礎版を意味する。他に純正拡張版のjavax、任意団体提供のorg、企業提供のcomがある。
 
# 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 - クラス定義を動的に操作する。
 
;統合開発環境と開発支援ツール
416 ⟶ 418行目:
 
*[[Java Naming and Directory Interface|JNDI]] (Java Naming and Directory Interface) - ネーミングサービスと[[ディレクトリ・サービス|ディレクトリサービス]]を扱う
* JSML (Java Speech Markup Language) - [[音声合成]]システムにテキスト注釈を追加する
*[[JDBC]]<!-- (Java Database Connectivity)--> - [[データベース]]接続の API
*[[Java Data Objects|JDO]] (Java Data Objects) - Java[[オブジェクト (プログラミング)|オブジェクト]][[永続性 (計算機科学)|永続化]]のインタフェース仕様
*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)]]を指向した形式言語をソースコードに導入する
*JMI (Java Metadata Interface) - Javaのメタデータの作成・アクセス・検索・送受信に関する仕様
*[[Java Management Extensions|JMX]] (Java Management Extensions) - 主に分散オブジェクト環境システムで[[依存性の注入]]おけ管理と監視を行う技術Javaプログラムの動的再構成
*[[JavaServer Faces|JSF]] (JavaServer Faces) - WEBクライアントに一定のデユーインに基づいたUIターフェースを提供するサーバー用技術テクノロジ
*[[Java Native Interface|JNI]] (Java Native Interface) - 他の言語で実装されたネイティブコードを呼び出す技術
*[[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]] - ゲーム開発用のAPI。[[OpenGL]]、[[OpenAL]]、[[OpenCL]]を扱える。様々なゲーム用コントローラーも扱える。
*[[OSGi]] - サービスの動的な管理と遠隔保守<!--
454 ⟶ 456行目:
 
=== Javaオープンソースモデル ===
1996年のJava登場初期から、ベンダー開発元の[[サン・マイクロシステムズ|サン社]](後に[[オラクル (企業)|オラクル社]]が買収)はJava公開初期から、Java仮想マシンとJavaクラスライブラリの仕様を公開しており、サードパーティによるJavaプラットフォーム移植と関連ソフトウェアと拡張テクノロジの開発を促していた。しかし過度Java普及に一定技術流出コントロールける為の枠組みとして、ソースコードの改変までは認めていなかった。2004年になると[[IBM|IBM社]]と[[BEAシステムズ|BEAシステムズ社]](後にオラクル社が買収)が、この部分的オープンソース制度に便乗する形で、関連ソフトウェアと拡張テクノロジの開発を支援するプロジェクトを立ち上げた。その目的は彼ら独自のJavaオープンソース化を実現する事であり、った。IBM社らはJava仮想マシンと標準クラスライブラリの互換製品を登場させ、その他のれに基づく独自標準化も徐々に進めていた。そうした中でJavaコミュニティプロセスへの影響力低下を懸念したサン社は、このIBM主体によるオープンソース化プロジェクトへの協力に消極的な立場を取り続けていた。しかし2006年になると業界の変化を悟ったサン社は2006年から方針を変えて賛同し、2007年5月8日にはJava SE 6を「[[OpenJDK]]」として[[GNU General Public License|GNU一般公開ライセンス]]の下でリリースした<ref>{{Cite web|title=Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community|url=http://www.sun.com/aboutsun/pr/2007-05/sunflash.20070508.3.xml|author=Sun Microsystems, Inc|date=2007-5-8|accessdate=2009年9月16日}}</ref>。OpenJDKではソースコードの改変も認められた。「[[GNU Classpath]]」は、J2SE 1.4のクラスライブラリの99%以上を実装し[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html]、J2SE 5.0では95%以上を実装している[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk15-classpath.html]。またOpenJDKの開発にはIBM社も協力している。
;Javaテクノロジのオープンソース化
 
1996年のJava登場初期から、ベンダー元の[[サン・マイクロシステムズ|サン社]](後に[[オラクル (企業)|オラクル社]]が買収)は、Java仮想マシンとJavaクラスライブラリの仕様を公開しており、サードパーティによるJavaプラットフォーム移植と関連ソフトウェアと拡張テクノロジの開発を促していた。しかし過度の技術流出を避ける為の枠組みとして、ソースコードの改変までは認めていなかった。2004年になると[[IBM|IBM社]]と[[BEAシステムズ|BEAシステムズ社]](後にオラクル社が買収)が、この部分的オープンソース制度に便乗する形で、関連ソフトウェアと拡張テクノロジの開発を支援するプロジェクトを立ち上げた。その目的は彼ら独自のJavaオープンソース化を実現する事であり、Java仮想マシンと標準クラスライブラリの互換製品を登場させ、その他の標準化も徐々に進めていた。そうした中でJavaコミュニティプロセスへの影響力低下を懸念したサン社は、このIBM主体によるオープンソース化プロジェクトへの協力に消極的な立場を取り続けていた。しかし業界の変化を悟ったサン社は2006年から方針を変えて賛同し、2007年5月8日にはJava SE 6を「[[OpenJDK]]」として[[GNU General Public License|GNU一般公開ライセンス]]の下でリリースした<ref>{{Cite web|title=Sun Fulfills Promise of Open and Free Java Technology and Releases Java SE Platform to OpenJDK Community|url=http://www.sun.com/aboutsun/pr/2007-05/sunflash.20070508.3.xml|author=Sun Microsystems, Inc|date=2007-5-8|accessdate=2009年9月16日}}</ref>。OpenJDKではソースコードの改変も認められた。「[[GNU Classpath]]」は、J2SE 1.4のクラスライブラリの99%以上を実装し[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath.html]、J2SE 5.0では95%以上を実装している[http://www.kaffe.org/~stuart/japi/htmlout/h-jdk15-classpath.html]。またOpenJDKの開発にはIBM社も協力している。
 
;GNUプロジェクト