Java

読み:ジャバ
外語:Java 英語 , Ĝav/o エスペラント
品詞:名詞

Sun Microsystems(後のOracle)の開発したプログラミング言語およびその実行環境。言語は、C++に良く似たオブジェクト指向プログラミング言語である。

目次

設計者

言語の設計は、元祖Emacsの開発や、KISSの原則などで知られるカナダ出身のプログラマーJames Goslingである。

EmacsではRichard M. Stallmanに大敗したが、Javaはそこそこ成功をおさめ、出身国カナダからカナダ勲章が贈られた。これはカナダにおいては、民間人が得られる勲章として最高位のものとされる。

登場から普及まで

Javaは、1995(平成7)年5月23日に発表された。

言語仕様としての「Java言語」と、その実行環境である仮想計算機「JVM」などが仕様として定義されている。

JVMさえ用意すればどのようなオペレーティングシステムでも利用可能であり、登場した当初は、実行環境を問わないところが好まれWebサイトのアプレット作成用に使われたが、Java言語は汎用言語なので、用途はそれに限定されたものではない。

後にFlashが多機能化するとJavaアプレットから置き換わりJava需要は激減した。Flashのクライアントはほぼ全てのWebブラウザーにインストールされているのに比べ、JREはそうではないことも弱点となり、Javaは下火となった。

Javaは、銀行システム用としてCOBOLを置き換える形で細々と使われるようになっていたが、Javaが表舞台への復活を果たしたのはアプリケーションをJavaで記述するAndroidが登場してからである。ただしAndroidが利用するのはJava言語のみで、仮想計算機「JVM」は使用していない。

末期

当初標榜したWeb用需要としては、最初からAdobe Flashには勝ち目なく、後にHTML5が登場するに至り、Adobe Flashと共に現役を退くこととなった。結果として、Webの世界ではJavaは単なるセキュリティリスクでしかなく、「邪魔者」として以外の評価は殆どなかったものと思われる。

アプリケーション記述用言語としても奮わず、Windows用としてもUNIX用としても、主流になることはなかった。

かくして一度は実質的に滅んだJavaだったが、Androidが普及して以降は、JavaはAndroid用プログラミング言語として一定の需要を維持するに至った。現在は、Oracleがどう考えようとも、Androidの処理を記述するためのマクロ言語として以外の用途は殆どない。

名称の由来

Javaは開発コードネームを「Oak」と言うが、これは開発プロジェクト中に窓から樫の木(Oak)が見えたことからこの名が付けられたとされている。

後に商標の関係で名前をJavaに変更した。

エディション

実行環境

Javaという表現は、単なるプログラミング言語だけではなく、実行環境も含められている。このため、言語のみを特に示す場合は「Java言語」、実行環境は「JVM」や「JavaOS」のように表現され、逆に広義のJavaを「Javaプラットフォーム」という。

Java言語で書かれたプログラムをコンパイルすると、中間言語と呼ばれるバイナリが生成される。類似言語のCやC++は原則として特定CPU用のバイナリであるが、この点がJavaの最大の特徴である。

このバイナリは、Javaチップ(マイクロプロセッサー)用の機械語コードとして規定された架空の機械語である。他のプロセッサーでも、Javaチップの動作をJVM(Java仮想計算機)としてソフトウェアで実装し、エミュレートによって実行することが可能である。

このJVMは、一種のオペレーティングシステムとして機能する。

純正環境

純正のJava実行・開発環境をJDK、ここからJava実行環境のみを抜き出したサブセットをJREという。

これは単に純正というだけではなく、Javaの規格を規定するものでもある。

互換性

Javaは仮想CPUと共通ライブラリの互換性を保証しているので、一度書いたプログラムが全ての環境で動作することを実現する。これを「100% Pure Java」という。

現実には実装上の問題などもあり、必ずしも100%の互換性は無い。それでもJavaのもつ移植性の高さ(ポータビリティ)はメリットが大きく、さらにスケーラビリティもあるため、この分野では普及した。

100%ポータブルは今後の業界の努力で改善されるものと見られている。100% Pure Javaを妨害するMicrosoftのJava実装が無くなったため、この点については大幅に改善された。

特定環境

もちろんJavaも一つのプログラミング言語である以上、特定のOS専用の実行バイナリを作ることも、JVM以外の仮想計算機向けのバイナリを出力することも可能で、実際にWindows用の実行ファイルを出力するような製品や、独自の仮想計算機Dalvikを使うOSのAndroidも市販されている。

Sun Microsystemsがそのような製品をどう思っていたかは定かではないが、Oracleはそれを許さなかった。

フリーの度合い

Javaは他の一般的な言語と違ってISOなどで標準化されていない。かつてはSun Microsystems、現在はOracleが独占的に仕様を策定するものである。したがって仕様策定については完全にクローズドである。

それでも、コンパイラーはGCJ(GNU Compiler for Java)などがGPLであり、またSun謹製のOpenJDKもGPLでライセンスされている。JVMを実装するメーカーはライセンス料が要求されるが、Javaプログラマーは費用無くプログラミングが出来、一般のユーザーも実行環境は無料で入手できるので、実質的にフリーに近いものであった。

このため、Javaはオープンな印象があり普及したが、Oracleに買収された後は一社独占的なイメージが強まり、今後の壁になる恐れが出てきた。

従来のSunのように、広く薄く金を徴収するようなビジネスモデルが存続できれば理想的だが、望みは薄いようである。かつてはMicrosoftのJ#がJavaのモビリティーを毀損するとして嫌われ、代わりにJavaとは違うものとして.NET FrameworkC#が登場するといったような事態もあったが、更なる問題として、Java言語を使いながら成果物(バイトコード)がJavaではないGoogleのDalvikのようなものも登場してきている。さらに、Javaに代わるプログラミング言語としてRed HatはCeylonを開発中である。世界は混乱する方向にしか向かっていないようである。

変数

変数型

Javaの変数は、次の二種類である。

  • 基本データ型
  • 参照型

プリミティブ型として用意される基本データ型の変数型は次の通り。

整数型は全て符号ありで、符号なし(C/C++でいうところのunsigned)の変数はない。

複合型変数またはクラス

プリミティブ型以外で、変数のようにして提供されるものは、Javaでは全てクラスである。

以下は一例

  • String
  • StringBuffer
  • StringBuilder

即値

Javaでは、イミディエイト(即値)で数値を記述する場合、整数はintとして、実数はdoubleとして扱われる。

intで扱えない大きな整数を記述する場合、または実数でfloat形を記述する場合、数値の型を明示的に表わすためにサフィックスを記述する必要がある。long型はLを、float型はFを記述する。

long l = 12345678901L;

float f = 3.14F;

配列型

Javaでも配列が扱えるが、Javaの配列型は、類似言語のC/C++とは趣が大きく異なる。

宣言は次のようにする。書き方は二通り。

配列型[] 配列名;

配列型 配列名[];

通常は前者が使われる。後者はC風であるが、Cのように[]内に要素数を書くことはできない。この[]記号は、C/C++の * や、C++の & などに相当するものである。

使用例は次の通りである。

int[] intArray;

String[] stringArray;

配列型変数は、そのままではメモリーが割り当てられていないため使用できない。使用するためには、newを使って配列を生成する必要がある。

配列名 = new 配列型[サイズ];

10個のint型配列を作るなら、次の通り。

intArray = new int[10];

宣言と生成を同時にすることも可能で、このようにすることが多い。

int[] intArray = new int[10];

引数として与えられるサイズは、定数の他、整数型の変数でもよい。その時々で必要となる大きさを確保して使用することができる。

int size = 10;

byte[] buf = new byte[size];

Javaでは、配列は初期値として、その変数型に応じた0相当(論理型ならfalse、参照型ならNULL)が設定される。

JDK 1.0

最初のバージョン。このバージョンは国際化対応していない。

  • JDK 1.0
  • JDK 1.0.1
  • JDK 1.0.2

JDK 1.1

国際化対応した最初のバージョン。

次のような機能に対応した。

次のようなバージョンがある。()で併記したものはコードネーム。

  • JDK 1.1 (1997(平成9)年2月18日
  • JDK 1.1.1
  • JDK 1.1.2
  • JDK 1.1.3
  • JDK 1.1.4 (Sparkler) (1997(平成9)年9月12日)
  • JDK 1.1.5 (Pumpkin) (1997(平成9)年12月3日)
  • JDK 1.1.6 (Abigail) (1998(平成10)年4月24日)
  • JDK 1.1.7 (Brutus) (1998(平成10)年9月28日)
  • JDK 1.1.8 (Chelsea) (1999(平成11)年4月8日)

J2SE 1.2

このバージョンから、JDKからJ2SE(Java2 Platform, Standard Edition)に名称が変更された。この版がStandard Editionで、関連して、J2EE(Enterprise Edition)やJ2ME(Micro Edition)が定義されるようになった。

次のような機能に対応した。

次のようなバージョンがある。()で併記したものはコードネーム。

  • J2SE 1.2 (Playground) (1998(平成10)年12月4日
  • J2SE 1.2.1 (1999(平成11)年3月30日
  • J2SE 1.2.2 (Cricket) (1999(平成11)年7月8日

J2SE 1.3

次のような機能に対応した。

  • Java仮想マシンにJava HotSpotを採用し、動的再コンパイル、世代別ガベージコレクションなどに対応した
  • Java RMIとCORBAの相互運用を可能とした
  • Java Sound API
  • JNDI(Java Naming and Directory Interface)
  • JPDA(Java Platform Debugger Architecture)

次のようなバージョンがある。()で併記したものはコードネーム。

  • J2SE 1.3 (Kestrel) (2000(平成12)年5月8日
    • J2SE 1.3.0
    • J2SE 1.3.0 Update 1 [1.3.0_01]
    • J2SE 1.3.0 Update 2 [1.3.0_02]
    • J2SE 1.3.0 Update 3 [1.3.0_03]
    • J2SE 1.3.0 Update 4 [1.3.0_04]
    • J2SE 1.3.0 Update 5 [1.3.0_05]
  • J2SE 1.3.1 (Ladybird) (2001(平成13)年5月17日
    • J2SE 1.3.1 [1.3.1]
    • J2SE 1.3.1 Update 1 [1.3.1_01]
    • J2SE 1.3.1 Update 1a [1.3.1_01a]
    • J2SE 1.3.1 Update 2 [1.3.1_02]
    • J2SE 1.3.1 Update 3 [1.3.1_03]
    • J2SE 1.3.1 Update 4 [1.3.1_04]
    • J2SE 1.3.1 Update 5 [1.3.1_05]
    • J2SE 1.3.1 Update 6 [1.3.1_06]
    • J2SE 1.3.1 Update 7 [1.3.1_07]
    • J2SE 1.3.1 Update 8 [1.3.1_08]
    • J2SE 1.3.1 Update 9 [1.3.1_09]
    • J2SE 1.3.1 Update 10 [1.3.1_10]
    • J2SE 1.3.1 Update 11 [1.3.1_11]
    • J2SE 1.3.1 Update 12 [1.3.1_12]
    • J2SE 1.3.1 Update 13 [1.3.1_13]
    • J2SE 1.3.1 Update 14 [1.3.1_14]
    • J2SE 1.3.1 Update 15 [1.3.1_15-b01]
    • J2SE 1.3.1 Update 16 [1.3.1_16-b05]
    • J2SE 1.3.1 Update 17 [1.3.1_17-b02]
    • J2SE 1.3.1 Update 18 [1.3.1_18-b01]
    • J2SE 1.3.1 Update 19 [1.3.1_19-b03]
    • J2SE 1.3.1 Update 20 [1.3.1_20-b03]
    • J2SE 1.3.1 Update 21 [1.3.1_21-b02]
    • J2SE 1.3.1 Update 22 [1.3.1_22-b03]
    • J2SE 1.3.1 Update 23 [1.3.1_23-b03]
    • J2SE 1.3.1 Update 24 [1.3.1_24-b04]
    • J2SE 1.3.1 Update 25 [1.3.1_25-b02]
    • J2SE 1.3.1 Update 26 [1.3.1_26-b02]
    • J2SE 1.3.1 Update 27 [1.3.1_27-b02]
    • J2SE 1.3.1 Update 28 [1.3.1_28-b04]
    • J2SE 1.3.1 Update 29 [1.3.1_29-b03]

サポート終了済

J2SE 1.4

次のような機能に対応した。

  • assert
  • New I/O API
  • Java Logging API
  • Java Image I/O API
  • JAXP(Java API for XML Processing)
  • 正規表現ライブラリ
  • 暗号化や認証機能(JCE、JSSE、JAAS)

次のようなバージョンがある。()で併記したものはコードネーム。[]で併記したものが内部バージョンで、bはビルドを表わす。

  • J2SE 1.4.0 (Merlin) (2002(平成14)年2月13日
    • J2SE 1.4.0
    • J2SE 1.4.0 Update 1 [1.4.0_01]
    • J2SE 1.4.0 Update 2 [1.4.0_02]
    • J2SE 1.4.0 Update 3 [1.4.0_03]
    • J2SE 1.4.0 Update 4 [1.4.0_04]
    • J2SE 1.4.0 Update 5 [1.4.0_05]
  • J2SE 1.4.1 (Hopper) (2002(平成14)年9月16日
    • J2SE 1.4.1
    • J2SE 1.4.1 Update 1 [1.4.1_01]
    • J2SE 1.4.1 Update 2 [1.4.1_02]
    • J2SE 1.4.1 Update 3 [1.4.1_03]
    • J2SE 1.4.1 Update 4 [1.4.1_04]
    • J2SE 1.4.1 Update 5 [1.4.1_05]
    • J2SE 1.4.1 Update 6 [1.4.1_06]
    • J2SE 1.4.1 Update 7 [1.4.1_07]
  • J2SE 1.4.2 (Mantis) (2003(平成15)年6月26日
    • J2SE 1.4.2
    • J2SE 1.4.2 Update 1 [1.4.2_01]
    • J2SE 1.4.2 Update 2 [1.4.2_02]
    • J2SE 1.4.2 Update 3 [1.4.2_03]
    • J2SE 1.4.2 Update 4 [1.4.2_04]
    • J2SE 1.4.2 Update 5 [1.4.2_05]
    • J2SE 1.4.2 Update 6 [1.4.2_06]
    • J2SE 1.4.2 Update 7 [1.4.2_07]
    • J2SE 1.4.2 Update 8 [1.4.2_08-b03]
    • J2SE 1.4.2 Update 9 [1.4.2_09-b05]
    • J2SE 1.4.2 Update 10 [1.4.2_10-b03]
    • J2SE 1.4.2 Update 11 [1.4.2_11-b06]
    • J2SE 1.4.2 Update 12 [1.4.2_12-b03]
    • J2SE 1.4.2 Update 13 [1.4.2_13-b03]
    • J2SE 1.4.2 Update 14 [1.4.2_14-b05]
    • J2SE 1.4.2 Update 15 [1.4.2_15-b02]
    • J2SE 1.4.2 Update 16 [1.4.2_16-b01]
    • J2SE 1.4.2 Update 17 [1.4.2_17-b06]
    • J2SE 1.4.2 Update 18 [1.4.2_18-b06]
    • J2SE 1.4.2 Update 19 [1.4.2_19-b04]
    • J2SE 1.4.2 Update 20 [1.4.2_20-b03]
    • J2SE 1.4.2 Update 21
    • J2SE 1.4.2 Update 22 [1.4.2_22-b02]
    • J2SE 1.4.2 Update 23 [1.4.2_23-b01]
    • J2SE 1.4.2 Update 24 [1.4.2_24-b04]
    • J2SE 1.4.2 Update 25 [1.4.2_25-b01]
    • J2SE 1.4.2 Update 26 [1.4.2_26-b03]
    • J2SE 1.4.2 Update 27 [1.4.2_27-b03]
    • J2SE 1.4.2 Update 28 [1.4.2_28-b03]
    • J2SE 1.4.2 Update 29 [1.4.2_29-b01]
    • J2SE 1.4.2 Update 30 [1.4.2_30-b04]
    • J2SE 1.4.2 Update 31 [1.4.2_31-b03]
    • J2SE 1.4.2 Update 32 [1.4.2_32-b03]
    • J2SE 1.4.2 Update 33 [1.4.2_33-b02]
    • J2SE 1.4.2 Update 34 [1.4.2_34-b05]
    • J2SE 1.4.2 Update 35 [1.4.2_35-b09]
    • J2SE 1.4.2 Update 36 [1.4.2_36-b03]
    • J2SE 1.4.2 Update 37 [1.4.2_37-b03]
    • J2SE 1.4.2 Update 38 [1.4.2_38-b03]
    • J2SE 1.4.2 Update 39 (欠番)
    • J2SE 1.4.2 Update 40 [1.4.2_40-b04]
    • J2SE 1.4.2 Update 41 [1.4.2_41-b03]
    • J2SE 1.4.2 Update 42 [1.4.2_42-b03]

サポート終了済

J2SE 5.0

言語としてのJavaに大幅な仕様変更や拡張が加えられたバージョン。コードネームは「Tiger」。

  • 総称型(Generics)
  • Autoboxing/Auto-unboxing
  • 拡張for文
  • staticメンバーのインポート(Static import)
  • タイプセーフ列挙型(Typesafe Enums)
  • 可変長引数のメソッド(Varargs)
  • 書式付き入出力機能(printf)
  • 並行プログラミング用ライブラリ(Excecutor)
  • 並行処理用コレクション(Map、List、Setコレクション)
  • 新たな同期機構
  • バイトコードの操作機構
  • Unicode 4.0.0のサポート

次のようなバージョンがある。[]で併記したものが内部バージョンで、bはビルドを表わす。

  • J2SE 5.0 [1.5.0] (2004(平成16)年9月29日)
  • J2SE 5.0 Update 1 [1.5.0_01]
  • J2SE 5.0 Update 2 [1.5.0_02-b09]
  • J2SE 5.0 Update 3 [1.5.0_03-b07]
  • J2SE 5.0 Update 4 [1.5.0_04-b05]
  • J2SE 5.0 Update 5 [1.5.0_05-b05]
  • J2SE 5.0 Update 6 [1.5.0_06-b05]
  • J2SE 5.0 Update 7 [1.5.0_07-b03]
  • J2SE 5.0 Update 8 [1.5.0_08-b03]
  • J2SE 5.0 Update 9 [1.5.0_09-b03]
  • J2SE 5.0 Update 10 [1.5.0_10-b02]
  • J2SE 5.0 Update 11 [1.5.0_11-b03]
  • J2SE 5.0 Update 12 [1.5.0_12-b04]
  • J2SE 5.0 Update 13 [1.5.0_13-b01]
  • J2SE 5.0 Update 14 [1.5.0_14-b03]
  • J2SE 5.0 Update 15 [1.5.0_15-b04]
  • J2SE 5.0 Update 16 [1.5.0_16-b02]
  • J2SE 5.0 Update 17 [1.5.0_17-b04]
  • J2SE 5.0 Update 18 [1.5.0_18-b02]
  • J2SE 5.0 Update 19 [1.5.0_19-b02]
  • J2SE 5.0 Update 20 [1.5.0_20-b02]
  • J2SE 5.0 Update 21 [1.5.0_21-b01]
  • J2SE 5.0 Update 22 [1.5.0_22-b03]
  • J2SE 5.0 Update 23 [1.5.0_23-b01]
  • J2SE 5.0 Update 24 [1.5.0_24-b02]
  • J2SE 5.0 Update 25 [1.5.0_25-b03]
  • J2SE 5.0 Update 26 [1.5.0_26-b03]
  • J2SE 5.0 Update 27 [1.5.0_27-b02]
  • J2SE 5.0 Update 28 [1.5.0_28-b04]
  • J2SE 5.0 Update 29 [1.5.0_29-b02]
  • J2SE 5.0 Update 30 [1.5.0_30-b03]
  • J2SE 5.0 Update 31 [1.5.0_31-b02]
  • J2SE 5.0 Update 32 [1.5.0_32-b05]
  • J2SE 5.0 Update 33 [1.5.0_33-b09]
  • J2SE 5.0 Update 34 [1.5.0_34-b03]
  • J2SE 5.0 Update 35 [1.5.0_35-b02]
  • J2SE 5.0 Update 36 [1.5.0_36-b03]
  • J2SE 5.0 Update 37 (欠番)
  • J2SE 5.0 Update 38 [1.5.0_38-b04]
  • J2SE 5.0 Update 39 [1.5.0_39-b03]
  • J2SE 5.0 Update 40 [1.5.0_40-b02]
  • J2SE 5.0 Update 41 [1.5.0_41-b01]

    (途中欠番)

  • J2SE 5.0 Update 45 [1.5.0_45-b05]

    (途中欠番)

  • J2SE 5.0 Update 51 [1.5.0_51-b10]

    (途中欠番)

  • J2SE 5.0 Update 55 [1.5.0_55-b10]

    (途中欠番)

  • J2SE 5.0 Update 61 [1.5.0_61-b11]

    (途中欠番)

  • J2SE 5.0 Update 65 [1.5.0_65-b10]

    (途中欠番)

  • J2SE 5.0 Update 71 [1.5.0_71-b08]

    (途中欠番)

  • J2SE 5.0 Update 75 [1.5.0_71-b07]

    (途中欠番)

  • J2SE 5.0 Update 81 [1.5.0_81-b12]

    (途中欠番)

  • J2SE 5.0 Update 85 [1.5.0_85-b11]

サポート終了済

J2SE 5.1

バージョン1.5.1、コードネームは「Dragonfly」であったが、リリースされなかった。

従ってこのバージョンは存在しない。

Java SE 6

このバージョンから、Java2とした命名方針を変更し、J2SEよりJava SEに名称が変更された。また小数点のバージョン番号を表に出さなくなった。コードネームは「Mustang」。

Java SE 6の仕様はJSR-270で定義されており、主な新機能は、次の通り。

  • JDBC 4.0
  • JAXB 2.0
  • JAX-WS 2.0
  • Windowsなど、OS標準のルック&フィールを使用するように変更
  • Unicodeの正規化API (java.text.Normalizer)
  • 和暦への対応 (java.util.JapaneseImperialCalendar)
  • 国際化ドメイン名に対応 (java.net.IDN)

次のようなバージョンがある。[]で併記したものが内部バージョンで、bはビルドを表わす。

  • Java SE 6 [1.6.0] (2006(平成18)年12月12日)
  • Java SE 6 Update 1 [1.6.0_01-b05]
  • Java SE 6 Update 2 [1.6.0_02-b05]
  • Java SE 6 Update 3 [1.6.0_03-b01]
  • Java SE 6 Update 4 [1.6.0_04-b010]
  • Java SE 6 Update 5 [1.6.0_05-b13]
  • Java SE 6 Update 6 [1.6.0_06-b02]
  • Java SE 6 Update 7 [1.6.0_07-b06]
  • Java SE 6 Update 8 (存在しない)
  • Java SE 6 Update 9 (存在しない)
  • Java SE 6 Update 10 [1.6.0_10-b33]
  • Java SE 6 Update 11 [1.6.0_11-b03]
  • Java SE 6 Update 12 [1.6.0_12-b04]
  • Java SE 6 Update 13 [1.6.0_13-b03]
  • Java SE 6 Update 14 [1.6.0_14-b08]
  • Java SE 6 Update 15 [1.6.0_15-b03]
  • Java SE 6 Update 16 [1.6.0_16-b01]
  • Java SE 6 Update 17 [1.6.0_17-b04]
  • Java SE 6 Update 18 [1.6.0_18-b07]
  • Java SE 6 Update 19 [1.6.0_19-b04]
  • Java SE 6 Update 20 [1.6.0_20-b02]
  • Java SE 6 Update 21 [1.6.0_21-b07] [1.6.0_21-b06]
  • Java SE 6 Update 22 [1.6.0_22-b04]
  • Java SE 6 Update 23 [1.6.0_23-b05]
  • Java SE 6 Update 24 [1.6.0_24-b07]
  • Java SE 6 Update 25 [1.6.0_25-b06]
  • Java SE 6 Update 26 [1.6.0_26-b03]
  • Java SE 6 Update 27 [1.6.0_27-b07]
  • Java SE 6 Update 28 (欠番)
  • Java SE 6 Update 29 [1.6.0_29-b11]
  • Java SE 6 Update 30 [1.6.0_30-b12]
  • Java SE 6 Update 31 [1.6.0_31-b05]
  • Java SE 6 Update 32 [1.6.0_32-b05]
  • Java SE 6 Update 33 [1.6.0_33-b03]
  • Java SE 6 Update 34 [1.6.0_34-b04]
  • Java SE 6 Update 35 [1.6.0_35-b10]
  • Java SE 6 Update 36 (欠番)
  • Java SE 6 Update 37 [1.6.0_37-b06]
  • Java SE 6 Update 38 [1.6.0_38-b05]
  • Java SE 6 Update 39 [1.6.0_39-b04]
  • Java SE 6 Update 40 (欠番)
  • Java SE 6 Update 41 [1.6.0_41-b02]
  • Java SE 6 Update 42 (欠番)
  • Java SE 6 Update 43 [1.6.0_43-b01]
  • Java SE 6 Update 44 (欠番)
  • Java SE 6 Update 45 [1.6.0_45-b06]

    (途中欠番)

  • Java SE 6 Update 51 [1.6.0_51-b32] [1.6.0_51-b31] [1.6.0_51-b11]

    (途中欠番)

  • Java SE 6 Update 65 [1.6.0_65-b34] [1.6.0_65-b33] [1.6.0_65-b14]

    (途中欠番)

  • Java SE 6 Update 71 [1.6.0_71-b33] [1.6.0_71-b32] [1.6.0_71-b12]

    (途中欠番)

  • Java SE 6 Update 75 [1.6.0_75-b13] [1.6.0_75-b31]

    (途中欠番)

  • Java SE 6 Update 81 [1.6.0_81-b08] [1.6.0_81-b31] [1.6.0_81-b32]

    (途中欠番)

  • Java SE 6 Update 85 [1.6.0_85-b13]

    (途中欠番)

  • Java SE 6 Update 91 [1.6.0_91-b13] [1.6.0_91-b31]

    (途中欠番)

  • Java SE 6 Update 95 [1.6.0_95-b12]

    (途中欠番)

  • Java SE 6 Update 101 [1.6.0_101-b14] [1.6.0_101-b31]

    (途中欠番)

  • Java SE 6 Update 105 [1.6.0_105-b15] [1.6.0_105-b31]

    (途中欠番)

  • Java SE 6 Update 111 [1.6.0_111-b12]

    (途中欠番)

  • Java SE 6 Update 113 [1.6.0_113-b02]

Java SE 7

内部バージョンは1.7.0で、開発コードネームは「Dolphin」。

延期が繰り返されたが、これ以上の延期を避けるため、言語仕様の改訂などはJava SE 8にまわされ、Java SE 7のリリースが急がれることになった。

次のような機能に対応した。

  • switch文の式が文字列に対応
  • catch句で再throwが可能となった
  • 2進リテラル 0b に対応
  • 数値直定数(数値リテラル)の途中にアンダースコア _ を入れられるようになった
  • ダイアモンド演算子<>で、クラスのインスタンス化の際、型引数の省略が可能となった
  • リソース付きtry文の構文が導入された
  • 例外のマルチキャッチが可能となった (例外を | で結んで一つのcatch句を書くことができる)
  • JavaFX2の導入 (Swingに代わるもの)
  • invokedynamicの追加
  • NIO.2
  • JDBC 4.1
  • JAXP、JAXB、JAX-WSのアップデート
  • ClassLoaderの改善

次のようなバージョンがある。[]で併記したものが内部バージョンで、bはビルドを表わす。

  • Java SE 7 [1.7.0] (2011(平成23)年7月28日)
  • Java SE 7 Update 1 [1.7.0_1-b08]
  • Java SE 7 Update 2 [1.7.0_02-b13]
  • Java SE 7 Update 3 [1.7.0_03-b04]
  • Java SE 7 Update 4 [1.7.0_04-b20]
  • Java SE 7 Update 5 [1.7.0_05-b06]
  • Java SE 7 Update 6 [1.7.0_06-b24]
  • Java SE 7 Update 7 [1.7.0_07-b10]
  • Java SE 7 Update 8 (欠番)
  • Java SE 7 Update 9 [1.7.0_09-b05]
  • Java SE 7 Update 10 [1.7.0_10-b18]
  • Java SE 7 Update 11 [1.7.0_11-b21]
  • Java SE 7 Update 12 (欠番)
  • Java SE 7 Update 13 [1.7.0_13-b20]
  • Java SE 7 Update 14 (欠番)
  • Java SE 7 Update 15 [1.7.0_15-b03]
  • Java SE 7 Update 16 (欠番)
  • Java SE 7 Update 17 [1.7.0_15-b02]
  • Java SE 7 Update 18 (欠番)
  • Java SE 7 Update 19 (欠番)
  • Java SE 7 Update 20 (欠番)
  • Java SE 7 Update 21 [1.7.0_21-b12]
  • Java SE 7 Update 22 (欠番)
  • Java SE 7 Update 23 (欠番)
  • Java SE 7 Update 24 (欠番)
  • Java SE 7 Update 25 [1.7.0_25-b15]

    (途中欠番)

  • Java SE 7 Update 40 [1.7.0_40-b43]

    (途中欠番)

  • Java SE 7 Update 45 [1.7.0_45-b18]

    (途中欠番)

  • Java SE 7 Update 51 [1.7.0_51-b13]

    (途中欠番)

  • Java SE 7 Update 55 [1.7.0_55-b13] [1.7.0_55-b14]

    (途中欠番)

  • Java SE 7 Update 60 [1.7.0_60-b19]

    (途中欠番)

  • Java SE 7 Update 65 [1.7.0_65-b17] [1.7.0_65-b20]

    (途中欠番)

  • Java SE 7 Update 67 [1.7.0_67-b01]

    (途中欠番)

  • Java SE 7 Update 71 [1.7.0_71-b14]
  • Java SE 7 Update 72 [1.7.0_72-b14]

    (途中欠番)

  • Java SE 7 Update 75 [1.7.0_75-b13]
  • Java SE 7 Update 76 [1.7.0_76-b13]

    (途中欠番)

  • Java SE 7 Update 79 [1.7.0_79-b15]

Java 7は2015(平成27)年4月30日にサポート(パブリック・アップデート)が終了となった。

Java SE 8

大幅な言語仕様変更がなされた。当初、仕様変更はJava SE 7から導入される予定だったが、なかなか仕様がまとまらなかったため、Java SE 8から導入された。2014(平成26)年3月18日(米国現地時間)にリリースされた。

  • ラムダ式
  • Stream API
  • 新しい日付と時刻のAPI

次のようなバージョンがある。

  • Java SE 8 [1.8.0] (2014(平成26)年3月18日)
  • Java SE 8 Update 5 [1.8.0_5-b13] [1.8.0_5-b31]
  • Java SE 8 Update 11 [1.8.0_11-b12] [1.8.0_11-b31]
  • Java SE 8 Update 20 [1.8.0_20-b26] [1.8.0_20-b31] [1.8.0_20-b32]
  • Java SE 8 Update 25 [1.8.0_25-b17] [1.8.0_25-b18] [1.8.0_25-b31]
  • Java SE 8 Update 31 [1.8.0_31-b13]
  • Java SE 8 Update 40 [1.8.0_40-b25]
  • Java SE 8 Update 45 [1.8.0_45-b14]
  • Java SE 8 Update 51 [1.8.0_51-b16]
  • Java SE 8 Update 60 [1.8.0_60-b27]
  • Java SE 8 Update 65 [1.8.0_65-b17]
  • Java SE 8 Update 66 [1.8.0_66-b18]
  • Java SE 8 Update 71 [1.8.0_71-b15]
  • Java SE 8 Update 72 [1.8.0_72-b15]
  • Java SE 8 Update 73 [1.8.0_73-b02]
  • Java SE 8 Update 74 [1.8.0_74-b02]

開発者の離脱

OracleはSun Microsystems買収でJava利権を得たが、これも安泰とは言い難いものがある。

SunがOracleに買収されて以降、元SunのプロジェクトはOracleへの嫌悪感を主たる理由として続々と離脱することになった。Javaも例外でなく、まずJava開発者のJames Goslingが離脱した。

追ってJava技術および仕様の標準化プロセスを決定する組織JCP(Java Community Process)執行委員会のメンバーDoug Leaも離脱、以降はOpenJDKに注力すると表明した。

Doug LeaはJDK5.0で追加されたjava.util.concurrentパッケージでの仕事が知られているが、氏の離脱理由は、JCPがOracleの提案仕様を承認するだけの組織になり、今後JCPを通じての革新的な取り組みに期待できないため、としている。

Android

裁判

GoogleAndroidオペレーティングシステムは、「Java言語」を使う。しかしJVMではない独自の仮想計算機Dalvik」が使われる。

これは、Googleは事前にSun Microsystems(後のOracle)とライセンス交渉をしたが決裂したことと、情報開示拒否や余計な口出しを嫌った結果である。

こうなるとSun MicrosystemsはGoogleからライセンス料と取ることが出来なくなる。いずれJavaの主要な実装がAndroidのDalvikになるだろうことは疑いようがなく、そうなると誰も使わなくなるだろうJava Micro Editionと共に流れから取り残されたSun Microsystemsには、もはや未来は無い。

その後、SunはOracleに買収された。そして2010(平成22)年8月12日(米国時間)、OracleはAndroidオペレーティングシステムをめぐってGoogleを提訴した。訴状によれば、7つの米国特許のうちの一つ以上を侵害しているとし、Androidの配布や広告の中止を要求した。

第一審

Googleは翌日、「Oracleが、根拠のない訴訟でGoogleとオープンソースのJavaコミュニティの両方への攻撃を選択したことは残念である」という趣旨の声明を発表した。また2010(平成22)年10月には、同様の趣旨で訴訟に対する応答と反訴が裁判所に提出されたと報じられており、この中に、この訴訟の完全な却下を求める裁定申請が含まれているとされた。

訴訟では和解案も出され、中には「GoogleがOracleに一定期間のAndroid売上高の0.5%を支払う」があったが、そもそもAndroidはAppleやMicrosoftなどライバルへの牽制を目的に無料で提供する戦略であるため、理論上はOracleに支払う額は0ドルということになる。この和解案は、当然だがOracleが拒否したらしい。

そして一審判決では、APIは著作権保護の対象ではない、としてOracleの訴えを退けた。

控訴裁

Oracleは不服として控訴。

米連邦巡回控訴裁判所は2014(平成26)年5月9日(現地時間)、一審の判断を覆し、APIは著作権保護の対象であるという判決を下した。GoogleとオープンソースのJavaコミュニティは逆転敗訴という結果となった。

最高裁

Googleは不服として上告。

2015(平成27)年6月29日(現地時間)、米連邦最高裁判所は著作権訴訟に関するGoogleの上告を棄却したとReutersが報じた。

これによって、GoogleはOracleに対してJavaプログラミング言語を使用するためのライセンス料を支払う義務が生じる可能性があるのみならず、当初の要求どおり、Androidの配布や広告の中止も要求されるおそれがある。ただ2016(平成28)年2月現在、とくに目立った動きはない。Googleが何らかのライセンス料の支払いに応じた可能性がある。

OS X

Appleは2010(平成22)年10月20日OS Xに組み込まれているJavaを更新する「Java for Mac OS X 10.6 Update 3」において、Mac OS XのJavaは近い将来サポートが終了する可能性を示唆した。

その後も、Java 6については細々とAppleからのセキュリティ差分が提供されているが、Java 7以降はOracleからの提供となっている。

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club