javaについて、調べてみた件

Java( ジ ャ バ ) は 、 狭 義 で は プ ロ グ ラ ミ ン グ 言 語 Javaを 指 す 。 広 義 で は 言 語 仕 様 以 外 に も 、 仕 様 が 与 え ら れ て い る Javaク ラ ス ラ イ ブ ラ リ や Java仮 想 マ シ ン 、 さ ら に は JDKや JREな ど の 公 式 の も の を は じ め と す る 、 場 合 に よ っ て は サ ー ド パ ー テ ィ の も の な ど を 含 め 曖 昧 に Javaプ ラ ッ ト フ ォ ー ム と 総 称 さ れ る よ う な も の な ど の エ コ シ ス テ ム な ど を 指 す こ と も あ る 。 構 文 に つ い て は Javaの 文 法 の 記 事 を 参 照 。 

概 説 

Javaは 当 初 、 そ れ 以 前 の さ ま ざ ま な 言 語 の 良 い 部 分 を 引 き 継 ぎ 、 ま た 言 語 仕 様 や 構 文 な ど の 複 雑 さ を 排 除 す る よ う 設 計 さ れ た 。 次 の よ う な 特 徴 を 持 つ 。 

  • 構 文 は Cお よ び C++か ら 多 く を 引 き 継 い で い る 。 
  • オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ を サ ポ ー ト し て い る 。 オ ブ ジ ェ ク ト モ デ ル は Smalltalkや Objective-Cと 同 様 の 簡 潔 な も の を 採 用 し て い る 。 
  • 機 械 語 に 直 接 コ ン パ イ ル さ れ る の で は な く 、 中 間 言 語  (Javaバ イ ト コ ー ド ) に コ ン パ イ ル さ れ 、 仮 想 マ シ ン  (Java仮 想 マ シ ン ) の 上 で 動 作 す る 。 こ れ に よ り 、 プ ラ ッ ト フ ォ ー ム に 依 存 し な い ア プ リ ケ ー シ ョ ン ソ フ ト ウ ェ ア を 開 発 で き る 。 
  • Javaは 組 み 込 み シ ス テ ム や 携 帯 機 器 ( 携 帯 電 話 ・ PHSや PDA・ ス マ ー ト フ ォ ン 等 ) の シ ス テ ム か ら 、 企 業 の 情 報 シ ス テ ム を 担 う 大 規 模 な デ ー タ ベ ー ス 、 サ ー バ 、 ス ー パ ー コ ン ピ ュ ー タ ま で 、 多 く の 分 野 で 使 用 さ れ て い る 。 

    概 要 

    プ ロ グ ラ ミ ン グ 言 語 Javaお よ び Javaプ ラ ッ ト フ ォ ー ム は 、 1990年 代 前 半 当 時 、 サ ン ・ マ イ ク ロ シ ス テ ム ズ に 居 た ジ ェ ー ム ズ ・ ゴ ス リ ン 、 ビ ル ・ ジ ョ イ な ど の 人 々 に よ っ て 設 計 ・ 開 発 さ れ た 。 2017年 現 在 は サ ン を 買 収 し た Oracleに よ る 管 理 の 他 、 追 加 提 案 な ど は サ ン 時 代 か ら 続 い て い る Java Community Process (JCP) と い う プ ロ セ ス に よ っ て 進 め ら れ る 。 

    Javaに 関 わ る 呼 称 と そ の 意 味 内 容 は 、 文 脈 に 応 じ て い く つ か 使 い 分 け ら れ て い る 。 サ ン ・ マ イ ク ロ シ ス テ ム ズ は 、 「 Javaテ ク ノ ロ ジ 」 ( Java技 術 、 Java technology) と い う 呼 称 を 使 い 、 一 方 で Javaの さ ま ざ ま な 技 術 の 形 容 詞 と し て 「 Java」 の 呼 称 を 使 っ て き た 。 多 く の プ ロ グ ラ マ は 、 プ ロ グ ラ ミ ン グ 言 語 の 意 味 で 「 Java」 の 呼 称 を 使 っ て い る 。 Javaの 実 行 環 境 は 、 Java実 行 環 境  (Java Runtime Environment; JRE) と 呼 ば れ る 。 Java の 基 本 的 な 開 発 環 境 は 、 Java開 発 キ ッ ト  (Java Development Kit; JDK) と 呼 ば れ る 。 

    Javaは ク ラ ス ベ ー ス の オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 で あ る ( #オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ ) 。 Java の プ ロ グ ラ ム は 複 数 の ク ラ ス か ら 構 成 さ れ 、 プ ロ グ ラ ム の 実 行 は 、 各 ク ラ ス が 実 体 化 し た オ ブ ジ ェ ク ト 群 が 相 互 に メ ッ セ ー ジ を や り と り し な が ら 行 わ れ る 。 Javaで は 、 継 承 に つ い て は 実 装 の 単 一 継 承 を 採 用 し て い る 。 た だ し 1つ の ク ラ ス ( オ ブ ジ ェ ク ト ) は 複 数 の イ ン タ フ ェ ー ス を 実 装 で き る 。 Java で 扱 う デ ー タ /オ ブ ジ ェ ク ト の 型 ( デ ー タ 型 ) は 、 強 い 静 的 型 付 け を 採 用 し て い る 。 Javaの コ ン パ イ ラ お よ び 実 行 環 境 が 、 型 同 士 の 整 合 性 を 検 査 す る こ と に よ っ て 、 プ ロ グ ラ ム が 正 し く 記 述 さ れ て い る こ と や 、 安 全 に 動 作 す る か 検 証 が 可 能 で あ る 。 

    Javaは 例 外 処 理 機 構 を 備 え て お り 、 プ ロ グ ラ ム 実 行 中 に 生 じ た 異 常 ( 例 外 ) の 扱 い を 、 比 較 的 安 全 な 方 法 で 行 い 、 プ ロ グ ラ ム を 読 み や す く 記 述 で き る 。 

    Javaで は 簡 潔 な メ モ リ モ デ ル を 採 用 し て お り 、 プ ロ グ ラ マ が メ モ リ  (主 記 憶 装 置 ) を 管 理 す る 負 担 を 軽 減 す る 。 あ ら ゆ る オ ブ ジ ェ ク ト は メ モ リ 内 の ヒ ー プ と い う 領 域 に 割 り 当 て ら れ る 。 メ モ リ 管 理 は 、 Java仮 想 マ シ ン に 統 合 さ れ た ガ ベ ー ジ コ レ ク シ ョ ン の 機 能 に よ っ て 行 わ れ る 。 従 来 の オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 で あ る C++で は 、 ヒ ー プ 領 域 に 生 成 し た オ ブ ジ ェ ク ト に つ い て 、 も は や 必 要 が 無 く な っ た 時 に 破 棄 す る 指 示 を 、 プ ロ グ ラ マ が 自 分 で 責 任 を も っ て 行 わ な け れ ば な ら な か っ た 。 こ れ は 、 C++プ ロ グ ラ マ に と っ て は 負 担 が 大 き く 複 雑 で 間 違 え や す い 作 業 で あ り 、 ソ フ ト ウ ェ ア の 安 全 性 ・ 開 発 効 率 ・ 保 守 性 を 損 な う 要 因 だ っ た 。 Javaで は ガ ベ ー ジ コ レ ク シ ョ ン の 機 能 が あ る た め 、 こ の よ う な こ と は 無 く 、 プ ロ グ ラ マ の 負 担 は 大 き く 軽 減 さ れ る 。 

    Javaで は 、 C/C++の よ う な 、 整 数 と ポ イ ン タ の 相 互 変 換 、 配 列 の 要 素 へ の ポ イ ン タ に よ る ア ク セ ス 、 ポ イ ン タ 演 算 と い っ た 機 能 は 、 基 本 機 能 と し て は 提 供 さ れ て い な い 。 た だ し 、 オ ブ ジ ェ ク ト へ の 参 照 は 内 部 的 に は ア ド レ ス で あ る 。 

    Javaで は プ ラ ッ ト フ ォ ー ム 非 依 存 を 目 標 の 一 つ と し 、 ま た バ ー ジ ョ ン 間 の 互 換 性 に 注 意 し て 開 発 が 進 め ら れ て い る 。 プ ラ ッ ト フ ォ ー ム に 依 存 し な い ( Javaプ ラ ッ ト フ ォ ー ム 自 体 を 除 く ) ア プ リ ケ ー シ ョ ン ソ フ ト ウ ェ ア の 開 発 と 配 備 を 行 う こ と が で き る と 主 張 さ れ る 。 従 来 の プ ロ グ ラ ミ ン グ 言 語 の 多 く は プ ラ ッ ト フ ォ ー ム  (CPU) に 依 存 し た ネ イ テ ィ ブ な コ ー ド に コ ン パ イ ル す る こ と を 前 提 と し て 設 計 さ れ て い た が 、 Javaは こ う し た 言 語 と 異 な り 、 中 間 言 語 ( バ イ ト コ ー ド ) に コ ン パ イ ル さ れ 、 Java仮 想 マ シ ン で 実 行 さ れ る よ う 設 計 さ れ た ( pコ ー ド マ シ ン な ど 、 過 去 に も あ っ た も の だ が 、 な ぜ か 新 し い も の で あ る か の よ う に 宣 伝 さ れ る ) 。 性 能 向 上 の た め 、 Java仮 想 マ シ ン の 成 熟 し た 実 装 で は 多 く の 場 合 、 ジ ャ ス ト イ ン タ イ ム コ ン パ イ ル 方 式 が 使 わ れ る 。 

    プ ラ ッ ト フ ォ ー ム 非 依 存 と バ ー ジ ョ ン 間 の 互 換 性 の 目 標 は 、 完 全 に 達 成 で き た わ け で は な く 課 題 が 残 っ て い る 。 

    Javaで は ス レ ッ ド を 言 語 仕 様 で 規 定 し て お り 、 マ ル チ ス レ ッ ド に よ る 並 行 計 算 を 、 従 来 の 言 語 と 比 べ て 簡 単 に 実 装 で き る 。 な お 並 行 計 算 は 、 複 数 の 処 理 を 同 時 に 実 行 す る 処 理 形 態 で あ る 。 ま た ス レ ッ ド は 、 プ ロ セ ス よ り 小 さ く 軽 量 な 処 理 の 単 位 で あ る 。 

    Javaで は 充 実 し た ラ イ ブ ラ リ に よ り 、 コ ン ピ ュ ー タ ネ ッ ト ワ ー ク を 活 用 す る ソ フ ト ウ ェ ア を 、 効 率 良 く 開 発 で き る 。 Javaは そ の 初 期 の バ ー ジ ョ ン か ら 、 TCP/IP の ラ イ ブ ラ リ を 備 え て い た 。 分 散 オ ブ ジ ェ ク ト 環 境  (Java RMI, CORBA) の ソ フ ト ウ ェ ア の 開 発 も 早 い 時 期 か ら で き る よ う に な っ て い た 。 近 年 で は 、 さ ま ざ ま な ネ ッ ト ワ ー ク プ ロ ト コ ル の 高 水 準 な ラ イ ブ ラ リ が 使 え る よ う に な っ て い る 。 W3Cに よ り 標 準 化 さ れ た 、 汎 用 マ ー ク ア ッ プ 言 語 の ひ と つ で あ る XMLで 記 述 さ れ た 文 書 を 扱 う ラ イ ブ ラ リ も 早 期 に 実 装 ・ 標 準 サ ポ ー ト さ れ た 。 近 年 で は 、 XMLプ ロ セ サ と XSLTプ ロ セ サ が Java標 準 ラ イ ブ ラ リ に 統 合 さ れ 提 供 さ れ て い る 。 充 実 し た ネ ッ ト ワ ー ク 機 能 と XML文 書 を 扱 う 機 能 を 有 効 に 組 み 合 わ せ る こ と に よ り 、 Javaは 標 準 機 能 だ け で も 高 度 な シ ス テ ム を 構 築 で き る 言 語 の 一 つ と な っ て い る 。 

    Javaは セ キ ュ リ テ ィ を 考 慮 し て 設 計 さ れ て お り 、 サ ン ド ボ ッ ク ス モ デ ル に 基 づ い た セ キ ュ リ テ ィ 機 構 を 備 え て い る 。 セ キ ュ リ テ ィ 機 構 を 正 し く 実 装 し た Java実 行 環 境 を 適 切 に 使 う こ と で 、 遠 隔 の コ ン ピ ュ ー タ 上 に あ る 実 行 コ ー ド を 安 全 に 実 行 で き る ( Javaア プ レ ッ ト ) 。 

    ま た 、 名 前 空 間 の 機 構 を も つ 言 語 で あ り 、 ラ イ ブ ラ リ お よ び ア プ リ ケ ー シ ョ ン に 含 ま れ る 多 数 の  Java の プ ロ グ ラ ム ( ク ラ ス と イ ン タ フ ェ ー ス ) は 、 パ ッ ケ ー ジ と い う 階 層 構 造 で 管 理 で き る 。 

    Javaに 対 す る 批 判 も 少 な く な い 。 い く つ か の 批 判 に 対 し て は 、 サ ン ( 後 に は オ ラ ク ル ) や JCPに 参 加 す る 人 々 の 努 力 に よ り 、 Javaの 改 良 が 行 わ れ て い る 。 一 方 で 現 在 、 多 く の ソ フ ト ウ ェ ア 開 発 者 は 、 Javaに つ い て 、 広 く 使 わ れ て い る 言 語 と し て は 優 れ た 言 語 の 一 つ と 評 価 し て い る 。 

    JavaScript (ECMAScript) は 、 Javaに ち な ん で 命 名 さ れ た ス ク リ プ ト 言 語 で あ る 。 と は い え 基 本 構 文 の 一 部 が C言 語 系 す な わ ち Javaに 似 て い る だ け で あ り 、 ま た ク ラ ス ベ ー ス で は な く プ ロ ト タ イ プ ベ ー ス の オ ブ ジ ェ ク ト 指 向 言 語 で あ る た め 、 言 語 仕 様 的 な 共 通 点 は 少 な い 。 

    表 記 は “J”の み が 大 文 字 の 「 Java」 が 正 し い 。 「 JAVA」 は 正 式 な 表 記 で は な い 。 

    歴 史 

    こ の 節 で は 次 の 構 成 で Javaの 歴 史 と 近 況 を 説 明 す る 。 

  • #草 創 と #イ ン タ ー ネ ッ ト の 世 界 へ で 、 Javaの 最 初 の 正 式 な バ ー ジ ョ ン が 公 開 さ れ る ま で の 歴 史 を 述 べ る 。 
  • #近 年 の 動 向 で 、 そ の 後 か ら 現 在 ま で の 動 向 を い く つ か の 側 面 か ら 述 べ る 。 
  • #バ ー ジ ョ ン 履 歴 で 、 最 初 の バ ー ジ ョ ン 以 降 の  Java (JDK, Java SE) の バ ー ジ ョ ン の 履 歴 を 述 べ る 。 
  • 草 創 

    Javaプ ラ ッ ト フ ォ ー ム お よ び プ ロ グ ラ ミ ン グ 言 語 Javaは 、 1990年 12月 に サ ン ・ マ イ ク ロ シ ス テ ム ズ が 1つ の 内 部 プ ロ ジ ェ ク ト を 立 ち 上 げ た こ と か ら 始 ま っ た 。 こ の 内 部 プ ロ ジ ェ ク ト で は 、 C++ / Cの 代 替 と な る プ ロ グ ラ ミ ン グ 言 語 を 開 発 し た 。 こ の 言 語 は 、 プ ロ ジ ェ ク ト で  Greenオ ペ レ ー テ ィ ン グ シ ス テ ム  (Green OS) と 共 に 、 同 OSの 標 準 言 語 と し て 開 発 さ れ た 。 こ の 言 語 は 、 1992年 頃 プ ロ ジ ェ ク ト 内 で は Oakと 呼 ば れ て い た が 、 後 に Javaの 呼 称 に 変 更 さ れ る こ と に な る 。 呼 称 変 更 の 理 由 は 、 Oakは す で に 別 の 会 社 が 商 標 と し て 使 っ て い た か ら で あ る 。 

    1990年 頃 、 サ ン の エ ン ジ ニ ア 、 パ ト リ ッ ク ・ ノ ー ト ン は 、 自 社 の プ ロ グ ラ ミ ン グ 言 語 C++と Cの  ア プ リ ケ ー シ ョ ン プ ロ グ ラ ミ ン グ イ ン タ フ ェ ー ス  (API) と 開 発 ツ ー ル に 不 満 を 募 ら せ て い た 。 そ の 頃 、 NeXTが 注 目 を 浴 び て い た こ と が き っ か け と な っ て 、 ノ ー ト ン は サ ン で プ ロ グ ラ ミ ン グ 環 境 の 開 発 の 仕 事 を す る こ と に な っ た 。 NeXTワ ー ク ス テ ー シ ョ ン と 、 そ の 環 境 で あ る NEXTSTEPで は 、 主 力 の 言 語 と し て Objective-Cが 開 発 さ れ て い た ( 余 談 に な る が 、 そ の 「 直 系 の 子 孫 」 に 当 た る の は 、 macOSお よ び iOSと 、 Swiftで あ る ) 。 こ う し た 経 緯 の な か で 「 ス テ ル ス プ ロ ジ ェ ク ト 」 が 始 ま っ た 。 

    ス テ ル ス プ ロ ジ ェ ク ト に は 、 始 ま っ て す ぐ に ジ ェ ー ム ズ ・ ゴ ス リ ン と マ イ ク ・ シ ェ ル ダ ン が 参 加 し 、 プ ロ ジ ェ ク ト の 名 称 は 「 グ リ ー ン プ ロ ジ ェ ク ト 」 に 変 更 さ れ た 。 プ ロ ジ ェ ク ト に は 他 の エ ン ジ ニ ア た ち も 参 加 し 、 彼 ら は ア メ リ カ 合 衆 国 カ リ フ ォ ル ニ ア 州 メ ン ロ ー パ ー ク 市 サ ン ド ヒ ル ロ ー ド の 道 沿 い に あ る 小 さ な オ フ ィ ス で 作 業 を 始 め た 。 プ ロ ジ ェ ク ト の 目 的 は 、 次 世 代 の 家 電 製 品 の た め の 新 し い プ ロ グ ラ ミ ン グ 言 語 を 設 計 し 、 そ の 処 理 系 を 開 発 す る こ と だ っ た 。 サ ン は こ の 分 野 が 重 要 な 市 場 に な る と 予 測 し て い た 。 

    プ ロ ジ ェ ク ト チ ー ム で は 当 初 は C++を 検 討 し て い た が 、 い く つ か の 理 由 か ら 却 下 さ れ た 。 理 由 は 、 当 時 の 彼 ら の 目 的 が 、 家 電 製 品 す な わ ち 組 み 込 み シ ス テ ム だ っ た か ら で あ る 。 組 み 込 み シ ス テ ム で は 、 利 用 で き る コ ン ピ ュ ー タ 資 源 が 少 な い と い う 制 約 が あ る 。 彼 ら は C++で は コ ン ピ ュ ー タ 資 源 を 食 い す ぎ る と 判 断 し た 。 ま た C++は 複 雑 な プ ロ グ ラ ミ ン グ 言 語 で あ り 、 C++を 使 う プ ロ グ ラ マ は 注 意 し て い て も 間 違 い を 犯 し が ち で あ る 。 

    C++に は ガ ベ ー ジ コ レ ク シ ョ ン の 機 能 が 無 い 。 ガ ベ ー ジ コ レ ク シ ョ ン が 無 い と い う こ と は 、 プ ロ グ ラ マ が 自 分 で オ ブ ジ ェ ク ト の 寿 命 ( 生 存 期 間 ) を 管 理 し な け れ ば な ら な い こ と を 意 味 す る 。 プ ロ グ ラ マ が 自 分 で オ ブ ジ ェ ク ト の 寿 命 を 管 理 す る こ と は 、 冒 険 的 で 間 違 い や す い 作 業 で あ る 。 

    プ ロ ジ ェ ク ト チ ー ム は 、 い く つ か の 重 要 な 機 能 に つ い て C++の 移 植 性 が 乏 し い こ と も 問 題 で あ る と 考 え た 。  こ の プ ロ ジ ェ ク ト で の 重 要 な 機 能 と は 、 セ キ ュ リ テ ィ お よ び 分 散 コ ン ピ ュ ー テ ィ ン グ 、 マ ル チ ス レ ッ ド で あ り 、 こ れ ら の 機 能 が 、 プ ラ ッ ト フ ォ ー ム に 依 存 せ ず に 使 え る 必 要 が あ っ た 。 こ の よ う な 事 情 で 、 彼 ら は あ ら ゆ る 機 器 に 容 易 に 移 植 で き る プ ラ ッ ト フ ォ ー ム が 必 要 で あ る と 認 識 す る よ う に な っ た 。 

    一 方 で 、 サ ン の 別 の エ ン ジ ニ ア 、 ビ ル ・ ジ ョ イ は 、 ゼ ロ ッ ク ス の パ ロ ア ル ト 研 究 所 で Altoと い う ワ ー ク ス テ ー シ ョ ン 試 作 機 の た め に 開 発 さ れ た プ ロ グ ラ ミ ン グ 言 語 ・ Mesaと Cの 良 い と こ ど り を し た 新 し い プ ロ グ ラ ミ ン グ 言 語 を 構 想 し て い た 。 ジ ョ イ は  Further と い う 名 前 で 呼 ば れ る 論 文 を 書 き 、 自 社 で C++に 基 づ い た オ ブ ジ ェ ク ト 指 向 環 境 を 開 発 す る べ き で あ る こ と を 進 言 し た 。 ま ず ジ ェ ー ム ズ ・ ゴ ス リ ン が  C++ を 改 変 し 拡 張 す る こ と を 試 み た 。 ゴ ス リ ン は こ の 拡 張 版 C++を 、 “C++ ++ –” と 名 付 け た 。 し か し ゴ ス リ ン は 、 す ぐ に こ の 拡 張 版 C++の 開 発 を 中 止 し て 、 全 く 新 し い プ ロ グ ラ ミ ン グ 言 語 を 開 発 す る 方 針 を 採 る こ と に し た 。 ゴ ス リ ン は こ の 新 し い 言 語 に Oakと い う 名 前 を つ け た 。 こ の 名 前 の 由 来 は 、 ゴ ス リ ン の オ フ ィ ス の す ぐ そ ば に オ ー ク の 木 が 立 っ て い た こ と に よ る 。 

    プ ロ ジ ェ ク ト チ ー ム は 残 業 ま で し て 作 業 を 続 け 、 1992年 の 夏 ま で に 新 し い プ ラ ッ ト フ ォ ー ム を 、 Green OS、 Oak言 語 、 ラ イ ブ ラ リ 、 ハ ー ド ウ ェ ア に よ っ て 部 分 的 な デ モ ン ス ト レ ー シ ョ ン が で き る よ う に な っ た 。 1992年 9月 3日 の 最 初 の デ モ ン ス ト レ ー シ ョ ン で は 、 チ ー ム は  Star7と い う 携 帯 情 報 端 末 機 器 を 開 発 す る こ と に 力 点 を お い て い た 。 こ の 機 器 の 名 称 の 由 来 は 、 電 話 機 能 が  *7 と ボ タ ン を 押 す こ と で 有 効 に な る こ と に よ る 。 

    こ の 機 器 は 、 グ ラ フ ィ カ ル な イ ン タ フ ェ ー ス を 備 え 、 “Duke” と い う 名 前 の 知 的 な 仮 想 代 理 人 が 利 用 者 を 支 援 し た 。 同 年 11月 、 サ ン は グ リ ー ン プ ロ ジ ェ ク ト を 分 離 し て 完 全 子 会 社 の FirstPerson, Incを 設 立 し た 。 そ れ に と も な い チ ー ム は パ ロ ア ル ト に 引 っ 越 し た 。 FirstPersonチ ー ム は 、 高 度 に イ ン タ ラ ク テ ィ ブ な 機 器 に 関 心 を 持 っ て い た 。 そ の お り タ イ ム ・ ワ ー ナ ー が ケ ー ブ ル テ レ ビ の セ ッ ト ト ッ プ ボ ッ ク ス の RFP (Request For Proposal) を 公 表 し て い た 。 そ こ で FirstPersonチ ー ム は 自 分 た ち の 目 標 を 変 更 し 、 タ イ ム ・ ワ ー ナ ー の  RFP に 応 じ て セ ッ ト ト ッ プ ボ ッ ク ス の 提 案 を 提 出 し た 。 し か し 、 FirstPersonは 入 札 で シ リ コ ン グ ラ フ ィ ッ ク ス  (SGI) に 負 け た 。 そ の 後 に 3DO社 の セ ッ ト ト ッ プ ボ ッ ク ス の 案 件 も あ っ た が 、 契 約 に は 至 ら な か っ た 。 FirstPersonは テ レ ビ 業 界 で は 利 益 を 出 す こ と が で き ず 、 サ ン は FirstPersonを 解 散 し て チ ー ム を 自 社 に 戻 し た 。 

    イ ン タ ー ネ ッ ト の 世 界 へ 

    1994年 の 6月 か ら 7月 に か け て 、 ジ ョ ン ・ ゲ ー ジ と 、 ジ ェ ー ム ズ ・ ゴ ス リ ン 、 ビ ル ・ ジ ョ イ 、 パ ト リ ッ ク ・ ノ ー ト ン 、 ウ ェ イ ン ・ ロ ジ ン 、 エ リ ッ ク ・ シ ュ ミ ッ ト の 間 で 、 3日 間 か け て ブ レ イ ン ス ト ー ミ ン グ を 行 い 、 プ ロ ジ ェ ク ト チ ー ム は ウ ェ ブ の 世 界 に 主 眼 を 置 く と い う 方 針 変 更 を 行 う 。 彼 ら は 、 革 新 的 な ウ ェ ブ ブ ラ ウ ザ で あ る NCSA Mosaicの 出 現 を 目 の 当 た り に し 、 ウ ェ ブ を 含 む イ ン タ ー ネ ッ ト の 世 界 は 、 ケ ー ブ ル テ レ ビ の 世 界 に 劣 ら ず 、 高 度 に イ ン タ ラ ク テ ィ ブ な 媒 体 に 発 展 し つ つ あ る と 認 識 す る よ う に な っ た 。 Oakを 使 っ た プ ロ ト タ イ プ と し て 、 ノ ー ト ン は WebRunnerと い う 小 さ な ウ ェ ブ ブ ラ ウ ザ を 開 発 。 こ の ウ ェ ブ ブ ラ ウ ザ の 名 称 は 後 に  HotJava と 変 更 さ れ る 。 ウ ェ ブ ペ ー ジ に Javaア プ レ ッ ト と い う 小 さ な Javaプ ロ グ ラ ム を 埋 め 込 ん で お い て 、 ウ ェ ブ ブ ラ ウ ザ HotJavaで そ の ペ ー ジ に ア ク セ ス す る と 、 HotJava上 で ア ニ メ ー シ ョ ン の 表 示 や マ ウ ス に よ る イ ン タ ラ ク テ ィ ブ な 操 作 が で き た 。 

    同 年 、 チ ー ム は Oakの 名 称 を Javaに 変 更 す る 。 変 更 の 理 由 は 、 商 標 を 調 べ て 、 “Oak” と い う 名 前 が す で に ビ デ オ カ ー ド ア ダ プ タ の 製 造 会 社  (Oak Technology) に よ っ て 使 わ れ て い た こ と が 判 明 し た か ら で あ る 。 Javaと い う 名 称 は 、 一 部 の チ ー ム メ ン バ ー が よ く 出 入 り し て い た 近 く の コ ー ヒ ー シ ョ ッ プ で 命 名 さ れ た と い う 。  こ の 名 称 が 、 何 か の 頭 字 語 で あ る か ど う か に つ い て は 、 よ く 分 か っ て い な い 。 

  • 頭 字 語 で は な い と の 説 が 一 般 的 に 受 け 入 れ ら れ て い る 。 
  • 近 く の コ ー ヒ ー シ ョ ッ プ で 供 さ れ て い た コ ー ヒ ー の ブ ラ ン ド に 由 来 す る と 考 え る 人 が 多 い 。 そ の 根 拠 は 、 Javaク ラ ス フ ァ イ ル ( 中 間 言 語 の バ イ ト コ ー ド ) の 最 初 の 4バ イ ト が 十 六 進 記 数 法 で 必 ず 0xCAFEBABEと な っ て い る こ と で あ る 。 
  • ま た 、 ア メ リ カ 英 語 に お い て は coffeeを 意 味 す る 一 般 名 詞 で あ る 。 
  • た だ し 一 部 で は 、 James Gosling, Arthur Van Hoff, and Andy Bechtolsheimの 頭 字 語 と の 説 が あ る 。 
  • ま た 、 Just Another Vague Acronymの 頭 字 語 と の 説 も あ る 。 
  • 1994年 10月 に 、 HotJavaと Javaプ ラ ッ ト フ ォ ー ム が 、 サ ン ・ マ イ ク ロ シ ス テ ム ズ の 幹 部 社 員 の 前 で デ モ ン ス ト レ ー シ ョ ン さ れ た 。 そ し て 1994年 内 に  Java 1.0a( ア ル フ ァ 版 ) が ダ ウ ン ロ ー ド で き る よ う に な る 。 

    Javaと HotJavaが 最 初 に 公 的 な 場 で 公 表 さ れ た の は 、 1995年 5月 23日 の SunWorldカ ン フ ァ レ ン ス だ っ た 。 サ ン は 、 ウ ェ ブ ブ ラ ウ ザ HotJava中 で 、 Javaア プ レ ッ ト に よ り 、 ウ ェ ブ ペ ー ジ 内 で ア ニ メ ー シ ョ ン の 表 示 や マ ウ ス に よ る イ ン タ ラ ク テ ィ ブ な 操 作 が 可 能 で あ る こ と を ア ピ ー ル し た 。 カ ン フ ァ レ ン ス で ア ナ ウ ン ス を 行 っ た の は 、 サ ン の 技 術 部 長 ジ ョ ン ・ ゲ ー ジ で あ る 。 こ の カ ン フ ァ レ ン ス で は ま た 、 ゲ ー ジ の ア ナ ウ ン ス に 関 連 す る 、 当 時 の ネ ッ ト ス ケ ー プ コ ミ ュ ニ ケ ー シ ョ ン ズ の 上 級 副 社 長 マ ー ク ・ ア ン ド リ ー セ ン に よ る ア ナ ウ ン ス が 人 々 を 驚 か せ た 。 そ れ は 、 ネ ッ ト ス ケ ー プ が 自 社 の ウ ェ ブ ブ ラ ウ ザ で あ る Netscape Navigatorに Javaの 実 行 機 能 を 追 加 す る 予 定 だ と い う も の だ っ た 。 こ の ア ナ ウ ン ス に よ り 業 界 の 耳 目 を 集 め る 話 題 と な っ た 。 

    1995年 秋 に は Java 1.0の ベ ー タ 版 が 公 開 さ れ た 。 1996年 1月 9日 に サ ン は 、 JavaSoft部 門 を 立 ち 上 げ た 。 そ の 2週 間 後 に 、 最 初 の 正 式 バ ー ジ ョ ン で あ る Java 1.0が リ リ ー ス さ れ た 。 

    近 年 の 動 向 

    Javaの 最 初 の バ ー ジ ョ ン が 公 開 さ れ て か ら 現 在 ま で の 動 向 を 、 い く つ か の 側 面 か ら 述 べ る 。 な お 、 Javaの 開 発 元 で あ る サ ン ・ マ イ ク ロ シ ス テ ム ズ は こ の 間 の 2010年 1月 に オ ラ ク ル に よ り 買 収 さ れ て お り 、 Javaに 関 す る 権 利 も 同 社 に 移 転 し て い る 。 

    Javaア プ レ ッ ト は 、 WWWブ ラ ウ ザ で 動 作 す る Javaプ ロ グ ラ ム で あ り 、 ク ラ イ ア ン ト サ イ ド の ウ ェ ブ ア プ リ ケ ー シ ョ ン の 実 装 方 法 の ひ と つ と し て 広 く 使 わ れ て い る 。 い く つ か の 有 力 な 競 合 が 存 在 す る 。 競 合 技 術 の 代 表 と し て Microsoft ActiveXお よ び Adobe Flashが 挙 げ ら れ る が 、 こ れ ら は い ず れ も 衰 退 し て い る 。 

    な お 、 Javaの 最 初 の 普 及 期 で あ っ た 20世 紀 末 の 頃 に は 圧 倒 的 な シ ェ ア を 持 っ て い た 、 Microsoft Windows 95上 で の Internet Explorerが 、 Javaア プ レ ッ ト を 使 用 し た ペ ー ジ を 表 示 し よ う と す る 際 に 、 VMの 起 動 の た め に 、 数 十 秒 ?数 分 間 操 作 を 受 け 付 け な く な っ た こ と が ( な お 、 起 動 し て し ま え ば 実 際 に は 高 性 能 だ っ た の だ が ) 、 「 Javaは 重 い 」 と い う 風 評 の 根 源 で あ る 。 そ の 後 は 、 携 帯 端 末 等 を 含 め れ ば 、 Windowsの シ ェ ア が 圧 倒 的 と い う 状 況 が 順 調 に 消 滅 し た た め 、 IEの シ ェ ア が 圧 倒 的 と い う こ と も 無 く な り 、 一 方 で そ の よ う な 風 評 の せ い で 、 Javaの 利 用 先 と し て サ ー バ サ イ ド が 注 力 さ れ た こ と も あ り 、 遅 い な ど と 言 わ れ る こ と も ほ と ん ど な く な っ た 。 

    簡 単 で イ ン タ ラ ク テ ィ ブ な ア ニ メ ー シ ョ ン 用 に は 、 Javaア プ レ ッ ト よ り も GIF89aや Adobe Flashを 採 用 す る 事 例 が 多 い 。 こ の 分 野 に お い て は 、 最 近 で は Ajaxも 普 及 し つ つ あ る 。 Ajaxア プ リ ケ ー シ ョ ン の 作 成 に 欠 か せ な い JavaScriptの 開 発 で は 、 Java開 発 で 一 般 的 に 用 い ら れ て い る ほ ど ド キ ュ メ ン ト や 技 術 が 成 熟 し た 標 準 ラ イ ブ ラ リ 、 サ ー ド パ ー テ ィ ー ラ イ ブ ラ リ 、 IDE、 単 体 テ ス ト ツ ー ル な ど の 開 発 環 境 が な い が 、 Java開 発 環 境 を 利 用 し て JavaScriptに よ る Ajaxウ ェ ブ ア プ リ ケ ー シ ョ ン を 開 発 す る ツ ー ル と し て Google Web Toolkitを 用 い る こ と が で き る 。 GWTコ ン パ イ ラ は Javaソ ー ス コ ー ド を バ イ ト コ ー ド の 代 わ り に JavaScriptに コ ン パ イ ル し 、 ブ ラ ウ ザ の JavaScript解 釈 エ ン ジ ン を あ た か も JVMの よ う に 活 用 す る こ と を 可 能 に す る 。 こ れ に よ り Javaを 用 い て ブ ラ ウ ザ 上 で 動 作 す る デ ス ク ト ッ プ ア プ リ ケ ー シ ョ ン と 遜 色 な い ウ ェ ブ ア プ リ ケ ー シ ョ ン を 作 成 す る こ と が 可 能 と な っ て い る 。 HTML5に よ っ て 導 入 さ れ る デ ー タ ベ ー ス の Web Storage、 フ ァ イ ル API、 ク ラ イ ア ン ト ハ ー ド ウ ェ ア の 位 置 情 報 を 得 る ジ オ ロ ケ ー シ ョ ン 、 JavaScriptを マ ル チ ス レ ッ ド で 起 動 す る Web workerな ど の ク ラ イ ア ン ト 側 技 術 は JavaScriptに よ る 呼 び 出 し を 前 提 と し て い る 。 GWTや サ ー ド パ ー テ ィ の GWTラ イ ブ ラ リ は HTML5APIの Javaラ ッ パ ー を 提 供 し て お り 、 開 発 者 は 複 雑 な ク ラ イ ア ン ト 側 プ ロ グ ラ ム を Javaの IDEで デ バ ッ グ 、 テ ス ト し な が ら 開 発 し 、 最 適 化 さ れ た JavaScriptに コ ン パ イ ル し て 実 行 さ せ る こ と が で き る 。 2011年 Adobe社 は 携 帯 向 け の Flash開 発 を 断 念 し 、 HTML5に ク ラ イ ア ン ト 側 技 術 の 焦 点 を 変 更 し た 。 携 帯 機 器 を 含 め る と 2012年 現 在 で は Flashよ り も JavaScriptが 普 及 し て は い る が 、 Flashほ ど 充 実 し た 開 発 環 境 や ラ イ ブ ラ リ は な い 。 ア プ レ ッ ト は Flashよ り も 普 及 し て い な い 。 GWTは JavaScriptの 普 及 度 と Javaの 充 実 し た 開 発 環 境 の 両 方 を 用 い る こ と が で き る た め 、 Java経 験 者 の リ ッ チ ク ラ イ ア ン ト 作 成 ツ ー ル と し て ア プ レ ッ ト に 取 っ て 代 わ る 存 在 と な り う る 。 

    以 上 の よ う に 、 ネ ッ ト ワ ー ク 越 し に ダ ウ ン ロ ー ド し た ア プ リ ケ ー シ ョ ン を そ の 場 で 実 行 す る 、 と い う よ う な 場 合 に 不 可 欠 な の は 、 サ ン ド ボ ッ ク ス と 呼 ば れ る 一 種 の 仮 想 化 環 境 で あ る 、 と い う 事 実 は Javaが 設 計 さ れ た 当 初 か ら ( あ る い は 、 そ れ 以 前 の 先 駆 的 な 事 例 か ら ) 基 本 的 に 何 ら 変 わ る も の で は な い 。 そ の た め の Java以 外 の も の と し て は 、 イ ン タ プ リ タ ベ ー ス の JavaScriptの 他 、 バ イ ト コ ー ド ( あ る い は ネ イ テ ィ ブ コ ー ド の 安 全 な 実 行 ) を 指 向 し た も の と し て は NaCl (PNaCl) や 、 WebAssemblyが あ る 。 

    現 在 、 ウ ェ ブ の サ ー バ 側 に お い て 、 Java技 術  (Java EE) は 広 く 使 わ れ て い る 。 多 く の ウ ェ ブ サ イ ト が 、 Javaサ ー ブ レ ッ ト  (Java Servlet) や JavaServer Pages (JSP) な ど の Java EE技 術 を 使 っ て 動 的 に ペ ー ジ を 生 成 す る ウ ェ ブ を 構 築 し て い る 。 Javaサ ー ブ レ ッ ト は 2000年 前 後 か ら 急 速 に 広 く 使 わ れ る よ う に な り 、 現 在 で は 多 く の ウ ェ ブ ア プ リ ケ ー シ ョ ン ( 動 的 な ウ ェ ブ ペ ー ジ ) が サ ー ブ レ ッ ト と し て 稼 動 す る よ う に な っ て い る 。 

    サ ン ・ マ イ ク ロ シ ス テ ム ズ が 開 発 し た Javaサ ー ブ レ ッ ト 技 術 を 簡 単 に 説 明 す る 。 必 ず し も 厳 密 な 説 明 で は な い 。 

  • Javaの 実 行 環 境 の プ ロ セ ス ( サ ー ブ レ ッ ト コ ン テ ナ ) を 起 動 し て ウ ェ ブ サ ー バ の マ シ ン に 常 駐 さ せ る 。 
  • ウ ェ ブ サ ー バ が 、 ウ ェ ブ ブ ラ ウ ザ か ら ア ク セ ス さ れ る ( リ ク エ ス ト を 受 け る ) 。 
  • ウ ェ ブ サ ー バ は 、 そ の リ ク エ ス ト を サ ー ブ レ ッ ト コ ン テ ナ に 渡 す 。 
  • サ ー ブ レ ッ ト コ ン テ ナ で 動 く Javaプ ロ グ ラ ム ( Javaサ ー ブ レ ッ ト ) は 、 受 け 取 っ た リ ク エ ス ト に 基 づ き 、 ウ ェ ブ ペ ー ジ を 動 的 に 生 成 す る 。 
  • サ ー ブ レ ッ ト コ ン テ ナ は 、 サ ー ブ レ ッ ト が 生 成 し た ウ ェ ブ ペ ー ジ を ウ ェ ブ サ ー バ に 渡 す 。 
  • ウ ェ ブ サ ー バ は 、 サ ー ブ レ ッ ト コ ン テ ナ か ら 受 け 取 っ た ウ ェ ブ ペ ー ジ を 、 ウ ェ ブ ブ ラ ウ ザ に 返 す 。 
  • サ ン が Javaサ ー ブ レ ッ ト 技 術 を 開 発 し た 1990年 代 末 当 時 、 ウ ェ ブ ア プ リ ケ ー シ ョ ン の 開 発 に は 、 次 に 述 べ る よ う な い く つ か の 問 題 が あ っ た 。 

  • ウ ェ ブ ア プ リ ケ ー シ ョ ン ( 動 的 な ウ ェ ブ ペ ー ジ ) を 記 述 す る に は CGIを 用 い る か 、 マ イ ク ロ ソ フ ト の IISに よ る Active Server Pages (ASP) を 用 い る の が 大 半 だ っ た 。 
  • CGIは そ の 特 性 か ら 実 行 時 の オ ー バ ー ヘ ッ ド が 高 く 、 性 能 を 向 上 す る こ と が 難 し か っ た 。 
  • ASPは サ ー バ が 高 価 な  Microsoft Windows NT Server で あ る 必 要 が あ っ た 。 
  • Javaサ ー ブ レ ッ ト は こ れ ら の 問 題 を あ る 程 度 解 決 す る こ と が で き る 技 術 だ っ た 。 

    デ ス ク ト ッ プ 環 境 に お い て は 、 ス タ ン ド ア ロ ン の Java (Java SE) の ア プ リ ケ ー シ ョ ン ソ フ ト ウ ェ ア ( Javaア プ リ ケ ー シ ョ ン ) は 、 こ れ ま で は あ ま り 多 く 使 わ れ て い な か っ た が 、 近 年 は い く つ か の ソ フ ト ウ ェ ア が 広 く 使 わ れ る よ う に な っ て い る 。 近 年 に な っ て 使 わ れ る よ う に な っ て き た 理 由 と し て は 、 次 の こ と が 挙 げ ら れ る 。 

  • コ ン ピ ュ ー タ の 処 理 性 能 が 急 速 に 向 上 し て き た 。 
  • Javaの 仮 想 マ シ ン ( Java仮 想 マ シ ン 、 Java VM) と Javaコ ン パ イ ラ が 大 き く 改 良 さ れ て き た 。 
  • 使 い 勝 手 の 良 い Javaの デ ス ク ト ッ プ ア プ リ ケ ー シ ョ ン を 簡 単 に 開 発 で き る 強 力 な 開 発 環 境 が 、 オ ー プ ン ソ ー ス 界 と 商 用 開 発 企 業 の 双 方 か ら さ ま ざ ま に 提 供 さ れ る よ う に な っ て き た 。 
  • 広 く 使 わ れ て い る Javaの ソ フ ト ウ ェ ア と し て は 、 NetBeansお よ び Eclipse SDKの 統 合 開 発 環 境 や 、 LimeWireや Azureusの よ う な フ ァ イ ル 共 有 ク ラ イ ア ン ト の ソ フ ト ウ ェ ア な ど が あ る 。 ま た 数 学 ソ フ ト ウ ェ ア MATLABに お い て も 、 ユ ー ザ イ ン タ フ ェ ー ス の レ ン ダ リ ン グ と 計 算 機 能 の 一 部 を 実 現 す る た め に 使 わ れ て い る 。 多 く の  Java の Swingや SWTの ウ ィ ジ ェ ッ ト ・ ツ ー ル キ ッ ト を 使 っ た ア プ リ ケ ー シ ョ ン が 、 現 在 も 開 発 さ れ て い る 。 

    こ の よ う に 、 近 年 は デ ス ク ト ッ プ 上 で Javaア プ リ ケ ー シ ョ ン を 使 う 事 例 が 増 え つ つ あ る も の の 、 従 来 は 次 に 述 べ る い く つ か の 理 由 の た め に あ ま り 使 わ れ て こ な か っ た 。 

  • Javaア プ リ ケ ー シ ョ ン は 、 Java実 行 環 境 の オ ー バ ー ヘ ッ ド の た め 、 ネ イ テ ィ ブ ア プ リ ケ ー シ ョ ン と 比 べ て 、 大 量 の メ モ リ を 使 う こ と が 多 い 。 
  • グ ラ フ ィ カ ル ユ ー ザ イ ン タ フ ェ ー ス  (GUI) は 実 行 対 象 と な る プ ラ ッ ト フ ォ ー ム 特 有 の ヒ ュ ー マ ン イ ン タ フ ェ ー ス ガ イ ド ラ イ ン  (HIG) を 考 慮 し な い 傾 向 が あ っ た 。 HIG を 考 慮 し た ア プ リ ケ ー シ ョ ン を 開 発 す る こ と に よ っ て 、 ユ ー ザ は ア プ リ ケ ー シ ョ ン を す ぐ に 使 い 慣 れ る こ と が で き る 。 ま た 、 デ フ ォ ル ト で は フ ォ ン ト ス ム ー シ ン グ が 使 え な い 。 そ の た め ユ ー ザ イ ン タ フ ェ ー ス の 文 字 列 ( テ キ ス ト ) の 表 示 の 品 質 が 低 く な っ て し ま う 。 
  • Java開 発 キ ッ ト  (JDK) と し て 無 償 で 提 供 さ れ る 基 本 的 な 開 発 環 境 は 、 使 い 勝 手 の 良 い デ ス ク ト ッ プ ア プ リ ケ ー シ ョ ン を 簡 単 に 開 発 す る に は 、 力 不 足 だ っ た 。 
  • Java実 行 環 境  (JRE) は こ れ ま で 数 度 の メ ジ ャ ー バ ー ジ ョ ン ア ッ プ を 経 て お り 、 複 数 の バ ー ジ ョ ン が 存 在 す る 。 ユ ー ザ は Javaア プ リ ケ ー シ ョ ン を 使 い 始 め る 際 に は 、 必 要 に 応 じ て 、 そ の ア プ リ ケ ー シ ョ ン が 動 く バ ー ジ ョ ン 、 も し く は そ の バ ー ジ ョ ン よ り 新 し い バ ー ジ ョ ン の Java実 行 環 境 を イ ン ス ト ー ル す る 必 要 が あ っ た 。 Java実 行 環 境 は 、 7MB 以 上 の サ イ ズ で あ り 、 そ の ダ ウ ン ロ ー ド と イ ン ス ト ー ル も や や 不 便 な 手 順 を ふ む 必 要 が あ っ た 。 

    一 部 の ソ フ ト ウ ェ ア 開 発 者 は 、 情 報 技 術 は ウ ェ ブ を 基 盤 と し た モ デ ル が 主 流 と な っ て お り 、 ス タ ン ド ア ロ ン ア プ リ ケ ー シ ョ ン は 流 行 遅 れ で あ り 、 新 し い プ ロ グ ラ ミ ン グ 技 術 は 優 れ た ウ ェ ブ ア プ リ ケ ー シ ョ ン を 開 発 す る こ と に 充 て ら れ て い る 、 と 思 っ て い た 。 こ の 見 解 に つ い て は 、 ソ フ ト ウ ェ ア 技 術 者 の 間 で 賛 否 が 分 か れ て い る 。 

    現 在 で は 、 リ ッ チ ク ラ イ ア ン ト や Web 2.0の 登 場 に よ り 新 た な パ ラ ダ イ ム が 生 ま れ よ う と し て い る 。 す な わ ち ウ ェ ブ を 基 盤 と し た ウ ェ ブ ア プ リ ケ ー シ ョ ン と ス タ ン ド ア ロ ン ア プ リ ケ ー シ ョ ン の 融 合 で あ る 。 ウ ェ ブ ア プ リ ケ ー シ ョ ン を Ajaxや  Java Web Start、 Adobe Flash な ど と 組 み 合 わ せ る こ と に よ り 、 Web2.0時 代 に 見 合 っ た よ り 洗 練 さ れ た ア プ リ ケ ー シ ョ ン を 開 発 す る こ と が で き る 。 

    一 昔 前 、 ほ と ん ど の  パ ー ソ ナ ル コ ン ピ ュ ー タ  (PC) の ユ ー ザ は 、 何 ら 問 題 な く ウ ェ ブ お よ び デ ス ク ト ッ プ 環 境 上 で Javaア プ リ ケ ー シ ョ ン を 実 行 で き て い た 。 か つ て 多 く の PCメ ー カ ー は 、 自 分 た ち が 製 造 ・ 販 売 す る Windows PCに Java実 行 環 境  (JRE) を 同 梱 し て い た 。 ア ッ プ ル の macOSや 、 多 く の Linuxデ ィ ス ト リ ビ ュ ー シ ョ ン で も 、 Java実 行 環 境 を 同 梱 し て い た 。 今 で は 追 加 イ ン ス ト ー ル が 必 要 で あ る 。 し か し な が ら パ ー ソ ナ ル コ ン ピ ュ ー タ に お い て Javaア プ リ ケ ー シ ョ ン は 殆 ど 使 わ れ な く な っ て し ま っ て い る の で 、 マ イ ク ロ ソ フ ト が 2001年 頃 以 降 に Java実 行 環 境 を Windowsに 同 梱 し て い な い こ と の 影 響 は 小 さ い 。 

    2001年 頃 に マ イ ク ロ ソ フ ト に よ る Java実 行 環 境 を Windowsに 同 梱 す る こ と を 止 め た と い う 行 動 は 、 サ ン ・ マ イ ク ロ シ ス テ ム ズ が 同 社 を 「 品 質 の 低 い 」 Java実 行 環 境 を 同 梱 し て き た と し て 告 訴 し た こ と が 契 機 と な っ た 。 マ イ ク ロ ソ フ ト が そ れ ま で Windowsに 同 梱 し て き た Java実 行 環 境 向 け に 開 発 さ れ た Javaプ ロ グ ラ ム は 、 他 の プ ラ ッ ト フ ォ ー ム の Java実 行 環 境 で 動 か な い 可 能 性 が あ っ た 。 

    し か し 近 年 で は 、 Javaア プ リ ケ ー シ ョ ン パ ッ ケ ー ジ 自 体 に Java実 行 環 境 を 同 梱 す る 事 例 が 少 な く な い 。 そ の 背 景 に は Javaア プ リ ケ ー シ ョ ン 開 発 者 の 判 断 が あ る 。 Javaア プ リ ケ ー シ ョ ン が 想 定 ど お り に 機 能 す る よ う 、 Java実 行 環 境 の バ ー ジ ョ ン の 違 い に よ る 非 互 換 性 に 基 づ く 不 具 合 を 避 け る た め に 、 PCに 同 梱 さ れ て い る Java実 行 環 境 を 使 わ な い と い う 判 断 で あ る 。 

    現 在 で は 、 Javaア プ レ ッ ト は 動 作 対 象 の Java実 行 環 境 の バ ー ジ ョ ン を 認 識 す る こ と が で き る 。 ま た 、 バ ー ジ ョ ン 間 の 互 換 性 も  プ ロ グ ラ ミ ン グ 言 語 の 中 で は 高 い 水 準 に あ り 、 上 位 互 換 性 に つ い て は Java SE 1.3以 降 は 大 き な 問 題 は ほ ぼ お き に く く な っ て い る 。 さ ら に Java Web Startで は デ ス ク ト ッ プ に イ ン ス ト ー ル さ れ て い る Javaの バ ー ジ ョ ン を 確 認 し て ア ッ プ デ ー ト で き る な ら ア ッ プ デ ー ト し 、 そ れ だ け で な く Java Web Start対 応 ア プ リ ケ ー シ ョ ン を も ア ッ プ デ ー ト し よ う と す る 。 そ の た め 古 い バ ー ジ ョ ン の Java実 行 環 境 を 使 っ て い る マ シ ン が あ っ た と し て も 、 自 動 ア ッ プ デ ー ト さ れ る た め に そ う 難 し い 問 題 は 起 き な い 。 

    組 み 込 み シ ス テ ム 向 け の  Java (Java ME) も 広 く 使 わ れ て い る 。 

    携 帯 機 器 ( 携 帯 電 話 ・ PHSや PDA・ ス マ ー ト フ ォ ン 等 ) に Javaの 実 行 環 境 が 実 装 さ れ る ケ ー ス が 多 い 。 Java環 境 は こ れ ら 携 帯 機 器 全 般 に 広 く 普 及 し て い る 。 一 方 、 Symbianお よ び BREWは 携 帯 電 話 や ( 日 本 的 定 義 で の ) ス マ ー ト フ ォ ン を 主 な タ ー ゲ ッ ト と し 、 Javaと 競 合 し て い る 。 

    Java MEで は 、 BREWと は 異 な り 、 開 発 者 が ラ イ セ ン ス 料 を 支 払 わ ず に 、 プ ロ グ ラ ム を 開 発 す る こ と が で き る 。 Java MEは Symbianよ り 広 く 普 及 し て い る 。 そ の 理 由 は 、 Java MEが Symbianよ り 広 範 な 携 帯 機 器 、 特 に 廉 価 な モ デ ル で 動 作 す る か ら で あ る 。 こ う し た 事 情 か ら サ ー ド パ ー テ ィ に よ り Opera miniの よ う な フ リ ー の Javaソ フ ト ウ ェ ア を 開 発 す る こ と が で き る よ う に な っ た 。 

    携 帯 機 器 の Java MEプ ロ グ ラ ム は 、 サ ン ド ボ ッ ク ス の も と で 動 く た め 、 多 く の 開 発 者 が 特 別 な 配 慮 を せ ず に プ ロ グ ラ ム を 開 発 し て も 、 安 全 に 実 行 で き る 。 携 帯 機 器 の Java技 術 が 多 様 化 す る に 伴 い 、 異 な る メ ー カ ー の 携 帯 機 器 で も Javaプ ロ グ ラ ム が 動 く よ う 、 携 帯 機 器 の た め の Java技 術 の 標 準 が 必 要 と な っ た 。 携 帯 機 器 の た め の Java MEの 標 準 が Mobile Information Device Profile (MIDP) で あ る 。 最 初 の 標 準 は MIDP 1で 、 小 さ い 画 面 を 想 定 し た も の で あ り 、 音 声 機 能 は 無 く 、 プ ロ グ ラ ム サ イ ズ は 32kBま で と い う 制 限 が あ っ た 。 後 の MIDP 2の 標 準 で は 、 音 声 機 能 を 備 え 、 プ ロ グ ラ ム サ イ ズ の 制 限 は 64kBま で と 緩 和 さ れ た 。 携 帯 機 器 の 設 計 の 進 歩 は 標 準 化 よ り も 急 速 で あ る た め 、 一 部 の メ ー カ ー は 、 MIDP 2標 準 の 最 大 プ ロ グ ラ ム サ イ ズ な ど い く つ か の 制 限 を 、 意 図 的 に 緩 和 し て 携 帯 機 器 を 開 発 し て い る 。 

    携 帯 機 器 に お け る Java MEの 競 合 技 術 に つ い て 簡 単 に 述 べ る 。 

  • Symbianの 技 術 は 、 シ ン ビ ア ン が 開 発 し た 携 帯 電 話 向 け の ユ ー ザ イ ン タ フ ェ ー ス フ レ ー ム ワ ー ク を 備 え た プ ラ ッ ト フ ォ ー ム で あ り 、 マ ル チ ス レ ッ ド 機 能 や メ モ リ 保 護 機 能 を も つ 。 開 発 用 言 語 は C++や Java MEな ど で あ る 。 Java と 同 様 に 、 開 発 者 が ラ イ セ ン ス 料 を 支 払 わ ず に 、 プ ロ グ ラ ム を 開 発 す る こ と が で き る 。 
  • BREWの 技 術 は 、 ク ア ル コ ム が 開 発 し 推 進 し て い る 、 携 帯 電 話 向 け の プ ラ ッ ト フ ォ ー ム で あ る 。 開 発 用 言 語 は  C/C++ で あ る 。 Javaと 異 な り 、 プ ロ グ ラ ム を 開 発 す る た め に 、 開 発 者 が ラ イ セ ン ス 料 を 支 払 う 必 要 が あ る 。 BREWプ ロ グ ラ ム は 、 携 帯 電 話 利 用 者 に 課 金 す る 機 能 に ア ク セ ス す る こ と が で き る 。 こ の 課 金 機 能 は 、 ク ア ル コ ム が 管 理 す る 厳 重 な 承 認 機 能 を 、 必 要 と す る 。 こ の 承 認 機 能 に よ り 、 ラ イ セ ン ス 料 を 徴 収 す る こ と が で き 、 ま た 携 帯 電 話 ご と に ど の  BREW プ ロ グ ラ ム が 使 え る か を 制 御 す る こ と が で き る 。 BREWを 採 用 す る 携 帯 電 話 事 業 社 は 、 排 他 的 な コ ン テ ン ツ 配 布 の 技 術 を 使 う こ と が で き る 。 一 部 の 携 帯 電 話 事 業 社 は こ の コ ン テ ン ツ 配 布 技 術 か ら 利 益 を 得 る こ と が で き る と 考 え て い る 。 
  • 世 界 的 な 動 向 と し て は 、 

  • GSMの 方 式 を 採 用 す る ほ と ん ど の 携 帯 電 話 事 業 社 は 、 Javaを 採 用 す る 傾 向 が あ る 。 
  • CDMAの 方 式 を 採 用 す る 携 帯 電 話 事 業 社 の 多 く は 、 BREWを 採 用 す る 傾 向 が あ る 。 た だ し 例 外 的 に 、 CDMA式 を 採 用 す る ア メ リ カ 合 衆 国 の 携 帯 電 話 事 業 者  Sprint Nextel Corporation は 、 Javaを 採 用 し て い る 。 
  • Symbian の ス マ ー ト フ ォ ン は 、 ス マ ー ト フ ォ ン 市 場 で 85%を 占 有 し て い る 。 
  • Javaの 実 装 は 携 帯 機 器 ( 携 帯 電 話 ・ PHSや PDA・ ス マ ー ト フ ォ ン 等 ) に 広 く 普 及 し て い る 。 
  • ま た 、 2001年 に は ソ ニ ー の コ ン シ ュ ー マ ゲ ー ム 機  PlayStation 2 に Java 仮 想 マ シ ン が 搭 載 さ れ る 予 定 と 発 表 さ れ 話 題 に な っ た 。 

    バ ー ジ ョ ン 履 歴 

    Java は 、 JDK( Java Development Kit; Java開 発 キ ッ ト ) 1.0 以 来 、 数 度 の メ ジ ャ ー バ ー ジ ョ ン ア ッ プ を 経 て い る 。 バ ー ジ ョ ン ア ッ プ に 伴 い 、 多 く の ク ラ ス と パ ッ ケ ー ジ が 標 準 ラ イ ブ ラ リ に 追 加 さ れ て き た 。 プ ロ グ ラ ミ ン グ 言 語 Javaお よ び Javaプ ラ ッ ト フ ォ ー ム は 、 高 い 水 準 で バ ー ジ ョ ン 間 の 互 換 性 を 保 ち つ つ 発 展 し て き て い る 。 

    J2SE 1.4か ら 、 Javaの 開 発 は JCP (Java Community Process) と い う 標 準 化 プ ロ セ ス で 行 う よ う に な っ て い る 。 JCPで は 、 JSRs (Java Specification Requests) と い う 文 書 群 に よ り 、 Javaに 対 す る 追 加 機 能 や Javaプ ラ ッ ト フ ォ ー ム に 対 す る 変 更 の 提 案 と 規 定 を 行 う 。 

    ま た 、 J2SE 1.3以 降 で は 開 発 コ ー ド ネ ー ム と し て 、 メ ジ ャ ー バ ー ジ ョ ン に は 動 物 の 名 前 が 、 マ イ ナ ー バ ー ジ ョ ン に は 昆 虫 の 名 前 が 付 け ら れ る 傾 向 が あ る 。 

    言 語 仕 様 は  JLS( Java Language Specification; Java言 語 仕 様 ) に よ り 規 定 す る 。 JLSは JSR 901の 管 理 下 に あ る 。 

    バ ー ジ ョ ン ア ッ プ の 過 程 で 、 言 語 仕 様 の 変 更 だ け で な く 、 標 準 ク ラ ス ラ イ ブ ラ リ に お い て も 大 き な 変 更 が 加 え ら れ て い る 。 JDK 1.0で は 標 準 ラ イ ブ ラ リ は 約 200ク ラ ス  / イ ン タ フ ェ ー ス だ っ た が 、 Java SE 6で は 4000以 上 の ク ラ ス  / イ ン タ フ ェ ー ス と な っ て い る 。 Swingや Java 2Dの よ う な 全 く 新 し い APIが 追 加 さ れ た 。 そ の 一 方 で 、 も と も と JDK 1.0か ら 存 在 し て い た ク ラ ス の メ ソ ッ ド の 多 く が 、 J2SE 5.0で の 使 用 は 推 奨 さ れ な い よ う に な っ て い る 。 

    最 初 の バ ー ジ ョ ン 。 プ レ ス リ リ ー ス  (英 語 )

  • こ の バ ー ジ ョ ン で は 日 本 語 な ど の 国 際 化 対 応 は な さ れ て い な か っ た 。 
  • い く つ か の 重 要 な 機 能 が 追 加 さ れ た 。 プ レ ス リ リ ー ス  (英 語 )

  • 国 際 化 対 応 ( 日 本 語 も 含 む ) 
  • AWT イ ベ ン ト モ デ ル に お け る 大 規 模 な 再 構 成 
  • 言 語 仕 様 に 「 内 部 ク ラ ス 」 が 追 加 さ れ た 
  • JavaBeans ソ フ ト ウ ェ ア コ ン ポ ー ネ ン ト 技 術 
  • JDBC デ ー タ ベ ー ス 接 続 API
  • Java RMI 分 散 オ ブ ジ ェ ク ト 技 術 
  • リ フ レ ク シ ョ ン  : ク ラ ス 名 や 、 ク ラ ス に 定 義 さ れ て い る 操 作 で あ る メ ソ ッ ド 名 を 動 的 に 指 定 し て 呼 び 出 す 。 
  • コ ー ド ネ ー ム Playground。 こ の バ ー ジ ョ ン か ら 呼 称 が Java 2に 変 更 さ れ 、 J2SE 5.0ま で こ の 呼 称 が 使 わ れ る 。 ま た エ デ ィ シ ョ ン 名 が JDKか ら  “J2SE” (Java 2 Platform, Standard Edition) に 変 更 さ れ た 。 こ の  J2SE の 名 称 に よ り 、 J2EE (Java 2 Platform, Enterprise Edition) お よ び  J2ME (Java 2 Platform, Micro Edition) の 基 と な る エ デ ィ シ ョ ン で あ る こ と が 明 確 化 さ れ た 。 プ レ ス リ リ ー ス  (英 語 )

  • strictfpキ ー ワ ー ド  : IEEE 754に 基 づ い た 厳 密 な 浮 動 小 数 点 数 の 演 算 を 行 う 
  • Swing グ ラ フ ィ カ ル ユ ー ザ イ ン タ フ ェ ー ス ツ ー ル キ ッ ト が 標 準 ラ イ ブ ラ リ に 統 合 さ れ た 。 
  • サ ン の Java仮 想 マ シ ン に ジ ャ ス ト イ ン タ イ ム コ ン パ イ ラ が 備 わ る 。 
  • Java Plug-in : さ ま ざ ま な ウ ェ ブ ブ ラ ウ ザ に Java実 行 環 境 を 組 み 込 む こ と が で き る よ う に な り 、 Javaア プ レ ッ ト を 実 行 で き る よ う に な っ た 。 
  • Java IDLと い う  IDL( イ ン タ フ ェ ー ス 記 述 言 語 ) の 実 装 が 導 入 さ れ 、 CORBA分 散 オ ブ ジ ェ ク ト 環 境 と の 相 互 運 用 が で き る よ う に な っ た 
  • コ レ ク シ ョ ン フ レ ー ム ワ ー ク の 導 入 
  • コ ー ド ネ ー ム Kestrel。 プ レ ス リ リ ー ス  (英 語 ) 新 機 能 の 概 要 ( 日 本 語 ) 

  • HotSpot Java仮 想 マ シ ン が 導 入 さ れ 、 ジ ャ ス ト イ ン タ イ ム コ ン パ イ ラ に 加 え て 動 的 再 コ ン パ イ ル 技 術 、 世 代 別 ガ ベ ー ジ コ レ ク シ ョ ン を 備 え た 高 速 な Java仮 想 マ シ ン を 使 え る よ う に な っ た 。 実 際 に は 1999年 4月 か ら  J2SE 1.2 向 け の  HotSpot Java仮 想 マ シ ン が リ リ ー ス さ れ て い た 。 
  • Java RMI が  CORBA ベ ー ス に 変 更 さ れ る 
  • JavaSound : 音 声 デ ー タ を 扱 う API
  • Java Naming and Directory Interface (JNDI) が 標 準 ラ イ ブ ラ リ に 統 合 さ れ る 。 ネ ー ミ ン グ サ ー ビ ス と デ ィ レ ク ト リ サ ー ビ ス へ の ア ク セ ス 。 従 来 は 拡 張 機 能 と し て 提 供 さ れ て い た 。 
  • Javaプ ロ グ ラ ム の デ バ ッ グ を 支 援 す る 機 能 群 、 Java Platform Debugger Architecture (JPDA) の 導 入 。 
  • コ ー ド ネ ー ム Merlin。 こ の バ ー ジ ョ ン は 、 JCP (Java Community Process) の 下 で 開 発 さ れ た 最 初 の Javaプ ラ ッ ト フ ォ ー ム で あ る 。 プ レ ス リ リ ー ス ( 英 語 )  新 機 能 の 概 要 ( 日 本 語 ) 

  • assert キ ー ワ ー ド  : あ る 程 度 、 「 契 約 に よ る 設 計 」 に 基 づ い た プ ロ グ ラ ミ ン グ が 可 能 と な る 。 JSR 41 で 規 定 さ れ た 。 
  • Perlの よ う な 正 規 表 現 の ラ イ ブ ラ リ の 導 入 に よ り 、 文 字 列 デ ー タ ( テ キ ス ト ) の 高 度 な 処 理 機 能 が 提 供 さ れ る 。 
  • 連 鎖 例 外 機 能 に よ り 、 あ る 例 外 の 原 因 と な っ た 例 外 を 連 鎖 的 に 記 録 で き る よ う に な る 。 
  • NIO (New I/O) : 新 し い 入 出 力 機 能 。 JSR 51で 規 定 。 
  • ロ ギ ン グ  APIが 標 準 ラ イ ブ ラ リ に 追 加 さ れ る 。 JSR 47で 規 定 。 
  • イ メ ー ジ  I/O API : JPEGや PNGの よ う な フ ォ ー マ ッ ト の 画 像 イ メ ー ジ を 読 み 書 き す る API
  • JAXP (Java API for XML Processing) に よ る 統 合 さ れ た XMLプ ロ セ サ と XSLTプ ロ セ サ に よ る XML文 書 処 理 機 能 の ラ イ ブ ラ リ が 、 標 準 で 提 供 さ れ る よ う に な っ た 。 JSR 5お よ び JSR 63で 規 定 。 
  • セ キ ュ リ テ ィ と 暗 号 化 の 拡 張 機 能 を 標 準 ラ イ ブ ラ リ に 統 合 
  • JCE (Java Cryptography Extension) : Java暗 号 化 拡 張 機 能 
  • JSSE (Java Secure Socket Extension) : Javaで セ キ ュ ア な イ ン タ ー ネ ッ ト 通 信  (TLS/SSL) を 実 現 す る 機 能 
  • JAAS (Java Authentication and Authorization Service) : Javaの 認 証 と 権 限 の サ ー ビ ス 
  • Java Web Startの 導 入  : Javaア プ リ ケ ー シ ョ ン の 配 備 と 実 行 を 簡 素 化 す る 技 術 。 JSR 56で 規 定 。 Java Web Start自 体 は 2001年 3月 に  J2SE 1.3 向 け の バ ー ジ ョ ン が リ リ ー ス さ れ て い た 。 
  • コ ー ド ネ ー ム Tiger。 JSR 176 の も と で 開 発 さ れ た 。 J2SE 5.0 で は 、 言 語 仕 様 に 大 き く 拡 張 が 加 え ら れ 、 多 く の 新 し い 言 語 機 能 が 追 加 さ れ た 。 プ レ ス リ リ ー ス ( 英 語 )  新 機 能 の 概 要 ( 日 本 語 ) 。 も と も と は  J2SE 1.5 と い う 名 称 だ っ た が 、 こ の 名 称 は す で に 内 部 的 な バ ー ジ ョ ン 番 号 と し て 使 わ れ て い た 。 ま た マ ー ケ テ ィ ン グ 上 の 理 由 も あ っ た 。 

  • 総 称 型  ( ジ ェ ネ リ ッ ク ス ) : コ ン パ イ ル 時 に 静 的 に コ レ ク シ ョ ン オ ブ ジ ェ ク ト で そ の 要 素 と な る オ ブ ジ ェ ク ト の 型 を 安 全 に 取 り 扱 う こ と が で き る よ う に な っ た 。 ほ と ん ど の 場 合 に お い て 型 変 換 ( キ ャ ス ト ) を 行 う 必 要 は 無 く な っ た 。 JSR 14で 規 定 さ れ た 。 
  • オ ー ト ボ ク シ ン グ /ア ン ボ ク シ ン グ  : int型 の よ う な 基 本 型 ( primitive type) と Integerク ラ ス の よ う な ラ ッ パ ク ラ ス の 間 の 変 換 が 自 動 的 に 行 わ れ る よ う に な っ た 。 JSR 201で 規 定 。 
  • 列 挙 型  : enumキ ー ワ ー ド に よ り 、 Javaで 安 全 な 列 挙 型 を 実 現 す る デ ザ イ ン パ タ ー ン で あ る タ イ プ セ ー フ enumパ タ ー ン が 言 語 レ ベ ル で サ ポ ー ト さ れ 、 列 挙 型 ( 順 序 つ き リ ス ト の 値 、 多 く の 場 合 は 定 数 ) を 安 全 に 定 義 す る こ と が で き る 。 こ の タ イ プ セ ー フ enumパ タ ー ン の 詳 細 は 、 ジ ョ シ ュ ア ・ ブ ロ ッ ク ほ か  (2001) pp.97-106 「 第 5章  項 目 21 enum構 文 を ク ラ ス で 置 き 換 え る 」 を 参 照 。 以 前 の バ ー ジ ョ ン ま で は こ の よ う な 場 合 、 タ イ プ セ ー フ で は な い 整 数 の 定 数 値 で 定 義 す る か 、 プ ロ グ ラ マ が 自 分 で タ イ プ セ ー フ enumパ タ ー ン で 実 装 す る か の 、 ど ち ら か の 方 法 し か 無 か っ た 。 JSR 201で 規 定 。 
  • 可 変 引 数  : メ ソ ッ ド の 最 後 の 引 数 を 、 型 名 に 続 け て 3個 の ド ッ ト を 記 述 す る こ と で 可 変 個 数 の 引 数 渡 し の 記 述 が で き る よ う に な っ た ( 例  : void drawText(String... lines)) 。 メ ソ ッ ド 呼 び 出 し に お い て 、 最 後 の 引 数 に 関 し て は そ の 型 の 任 意 の 個 数 の パ ラ メ タ を 渡 す こ と が で き る 。 そ の 際 、 実 際 に は 内 部 的 に 最 後 の 引 数 は 配 列 と し て メ ソ ッ ド に 渡 さ れ る 。 
  • メ タ デ ー タ  : 注 釈 ( ア ノ テ ー シ ョ ン ) と も 言 い 、 ク ラ ス や メ ソ ッ ド に 、 “@” で タ グ 付 け さ れ た 付 加 的 な 情 報 を 記 述 す る こ と が で き る よ う に な る 。 メ タ デ ー タ を 扱 う ツ ー ル で 処 理 す る こ と に よ り 、 決 ま っ た 型 の コ ー ド を 生 成 す る こ と が で き る よ う に な り 、 Javaに よ る 開 発 で 機 械 的 な 作 業 を 減 ら し て 開 発 効 率 を 上 げ る こ と が で き る 。 JSR 175で 規 定 。 
  • 拡 張 forル ー プ ( for-each文 ) : for文 に よ る ル ー プ の 構 文 が 拡 張 さ れ た 。 配 列 や コ レ ク シ ョ ン オ ブ ジ ェ ク ト ( Listや Setな ど ) の 各 要 素 オ ブ ジ ェ ク ト に 対 し て 、 反 復 ( 繰 り 返 し ) 処 理 を す る 専 用 の 構 文 を 使 う こ と で 、 コ ー デ ィ ン グ を 簡 略 化 し ミ ス を 減 ら す こ と が で き る よ う に な っ た 。 こ の 構 文 を 使 う 場 合 コ レ ク シ ョ ン は 、 配 列 か 、 Iterableイ ン タ フ ェ ー ス を 実 装 し た コ レ ク シ ョ ン オ ブ ジ ェ ク ト で あ る 必 要 が あ る 。 こ の 構 文 を 使 っ た コ ー デ ィ ン グ 例 を 示 す 。 
  • こ の 例 で は 、 widgetsと い う 変 数 名 の コ レ ク シ ョ ン オ ブ ジ ェ ク ト 内 の 、 各 Widgetオ ブ ジ ェ ク ト を 反 復 し て 繰 り 返 し 処 理 す る 。 各 Widgetオ ブ ジ ェ ク ト に は ル ー プ サ イ ク ル ご と に wと い う 変 数 名 を つ け る 。 各 ル ー プ サ イ ク ル で 、 wに 対 し て Widget型 で 定 義 さ れ て い る display()メ ソ ッ ド を 呼 び 出 す 。 拡 張 forル ー プ は JSR 201で 規 定 さ れ た 。 

    コ ー ド ネ ー ム Mustang。 JSR 270の も と で 開 発 さ れ た 。 Java SE 6に お い て は 、 サ ン は 命 名 方 針 を 変 更 し て 、 “J2SE” か ら Java SEに 変 更 し 、 バ ー ジ ョ ン 番 号 か ら  “.0” の 部 分 を 廃 止 し て い る 。 

  • Scripting for the Java Platform
  • AWT、 Swingの 高 速 化 。 
  • Windowsシ ス テ ム ト レ イ の サ ポ ー ト 
  • Windows Aero (Windows Vista) の ル ッ ク ・ ア ン ド ・ フ ィ ー ル 
  • テ キ ス ト の Unicode正 規 化  (java.text.Normalizer)
  • JDBC 4.0
  • JAXP (Java API for XML Processing) 1.4
  • Webサ ー ビ ス 
  • Java SE 6 Update 10が 2008年 10月 22日 に リ リ ー ス さ れ た 。 Update 8と 9が 省 略 さ れ 、 7の 次 が 10と な っ た 。 Javaの 動 作 速 度 が 改 善 さ れ 、 ア プ リ ケ ー シ ョ ン や ア プ レ ッ ト の 起 動 を 高 速 化 す る Java Quick Starterが 搭 載 さ れ 、 Javaの イ ン ス ト ー ル を 高 速 化 す る 、 Java Kernelが 搭 載 さ れ た 。 Javaア プ レ ッ ト や Java Web Startの 起 動 を 容 易 に す る た め の 、 配 備 ツ ー ル キ ッ ト が 公 開 さ れ た 。 

    コ ー ド ネ ー ム は Dolphinで あ る 。 2006年 に 開 発 が 始 ま っ た 。 元 々 は 2008年 春 に リ リ ー ス さ れ る 見 通 し で あ っ た が 、 何 度 か リ リ ー ス 予 定 が 変 更 さ れ た 。 2007年 8月 の 時 点 で は 2009年 1月 を リ リ ー ス 目 標 と し て い た が 、 2008年 12月 、 ジ ェ ー ム ズ ・ ゴ ス リ ン は 、 「 私 の 勝 手 な 憶 測 だ が 」 と い う 注 意 書 き 付 き で 、 2010年 6月 以 降 の リ リ ー ス を 予 測 し 、 2009年 11月 に は 2010年 9月 以 降 の リ リ ー ス 予 定 に 変 更 さ れ た 。 2010年 9月 に 、 こ れ 以 上 の 延 期 を 避 け る た め 、 大 き な 言 語 仕 様 の 改 訂 な ど の 部 分 は  Java SE 8 に 先 送 り し 、 Java SE 7 を 2011年 中 頃 に 、 Java SE 8を 2012年 終 わ り 頃 に 提 供 す る と い う 目 標 を 立 て 、 結 局 2011年 7月 28日 に リ リ ー ス し た 。 Java SE 7は 、 オ ラ ク ル に よ る サ ン 買 収 後 、 初 の メ ジ ャ ー リ リ ー ス で あ る 。 

    Java SE 7に 追 加 さ れ た 項 目 は 以 下 の と お り で あ る 。 

  • 主 と し て 動 的 言 語 を 想 定 し た 、 invokedynamic の 追 加  (JSR 292)
  • NIO.2 (JSR 203), Stream Control Transmission Protocol, Sockets Direct Protocol
  • JDBC 4.1
  • コ レ ク シ ョ ン や 並 列 性 の ラ イ ブ ラ リ の 機 能 追 加  (JSR 166y)
  • JAXP, JAXB, JAX-WSの 更 新 
  • ClassLoaderの 改 善 
  • Project Coinの 一 部 
  • JavaFX 2.0( Update 2よ り ) 
  • 以 下 の 項 目 を  Java SE 8 に 追 加 。 2014年 3月 4日 に  JSR 337 に て 仕 様 が 規 定 さ れ た 。 JDK 8 は 2013年 9月 9日 に リ リ ー ス 予 定 だ っ た が 、 2013年 4月 18日 に リ リ ー ス の 延 期 が 発 表 に な り 2014年 3月 18日 に リ リ ー ス さ れ た 。 CLDC, CDC を 統 合 し た  Java ME 8 は 2014年 4月 30日 に リ リ ー ス さ れ た 。 

  • ラ ム ダ 式 の 導 入  (Project Lambda, JSR 335)
  • 型 ア ノ テ ー シ ョ ン  (JSR 308)
  • Date and Time API (JSR 310)
  • 高 速 JavaScriptエ ン ジ ン  Nashorn
  • JavaFX 8
  • マ ル チ タ ッ チ デ バ イ ス 対 応 
  • Hotspotと JRockitの 統 合 
  • 当 初 搭 載 予 定 だ っ た 、 以 下 の 機 能 は Java SE 9に 延 期 と な っ た 。 

  • 言 語 レ ベ ル で の モ ジ ュ ー ル 化 の サ ポ ー ト  (Project Jigsaw, JSR 294)
  • ま た 、 搭 載 予 定 だ っ た 以 下 の 機 能 は 廃 止  (withdrawn) に な っ た 。 

  • Swing ア プ リ ケ ー シ ョ ン フ レ ー ム ワ ー ク  (JSR 296)
  • Java SE 9 は  Java SE 8 リ リ ー ス 3年 後 の 2017年 9月 21日 に リ リ ー ス し た 。 。 言 語 レ ベ ル で の モ ジ ュ ー ル 化 の サ ポ ー ト  (Project Jigsaw, JSR 294) な ど を 追 加 し た 。 

    Java SE 10 か ら  Java SE 11 に か け て は 以 下 の 機 能 が 追 加 予 定 。 

    Project Valhalla

  • Value Types に よ る 構 造 体 。 
  • Specialization Generics に よ る ジ ェ ネ リ ク ス の 特 殊 化 。 
  • Project Panama

  • Array 2.0 に よ る 二 次 元 配 列 お よ び Read-Onlyな 配 列 。 
  • Data Layout Control に よ る フ ィ ー ル ド の 位 置 の 指 定 。 
  • 特 徴 

    Javaの 主 な 特 徴 を 述 べ る 。 

    思 想 

    Javaを 開 発 す る 上 で は 、 5つ の 目 標 が あ っ た 。 

  • オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ の 方 法 論 を 採 用 す る 
  • 異 な る OS上 で 同 一 の プ ロ グ ラ ム が 動 く よ う に す る 
  • コ ン ピ ュ ー タ ネ ッ ト ワ ー ク を 扱 う 機 能 を 標 準 で 備 え る 
  • 遠 隔 の コ ン ピ ュ ー タ 上 に あ る 実 行 コ ー ド を 安 全 に 実 行 で き る よ う 設 計 す る 
  • 開 発 を し や す く す る た め に 、 従 来 の Smalltalk、 C++な ど の オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 か ら 良 い 部 分 を 引 き 継 ぐ 
  • ネ ッ ト ワ ー ク 機 能 お よ び 遠 隔 コ ン ピ ュ ー タ の 実 行 コ ー ド の 実 行 を 実 現 す る た め に 、 場 合 に よ っ て は 、 Javaプ ロ グ ラ マ は 、 CORBAや Internet Communications Engine、 OSGiの よ う な 拡 張 機 能 を 使 う 。 

    オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 

    Javaは ク ラ ス ベ ー ス の オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 で あ る 。 Javaの プ ロ グ ラ ム は 複 数 の ク ラ ス か ら 構 成 さ れ 、 プ ロ グ ラ ム の 実 行 は 、 各 ク ラ ス が 実 体 化 し た オ ブ ジ ェ ク ト 群 が 相 互 に メ ッ セ ー ジ を や り と り し な が ら 行 わ れ る 。 Javaで は 、 実 装 の 単 一 継 承 を 採 用 し 、 一 つ の ク ラ ス が 複 数 の イ ン タ フ ェ ー ス を も つ こ と が で き る 。 ク ラ ス と は 、 オ ブ ジ ェ ク ト 指 向 に お い て オ ブ ジ ェ ク ト の 設 計 図 に あ た る も の で あ る 。 オ ブ ジ ェ ク ト に つ い て は 後 述 す る 。 継 承 と は 、 既 存 の ク ラ ス を 基 に し て 、 そ の ク ラ ス の 機 能 を 引 き 継 い だ 新 し い ク ラ ス を 定 義 で き る こ と を い う 。 Javaで は 実 装 の 多 重 継 承 は 採 用 し て い な い 。 Javaで は 一 つ の ク ラ ス が 複 数 の イ ン タ フ ェ ー ス を も て る た め 、 一 つ の ク ラ ス に 複 数 の 役 割 を も た せ る こ と が で き る 。 

    Javaで 扱 う デ ー タ  / オ ブ ジ ェ ク ト の 型 ( デ ー タ 型 ) は 、 強 い 静 的 型 付 け を 採 用 し て い る 。 静 的 型 付 け に よ り 、 Javaの コ ン パ イ ラ お よ び 実 行 環 境 が 、 型 同 士 の 整 合 性 を 検 査 す る こ と に よ っ て 、 プ ロ グ ラ ム が 正 し く 記 述 さ れ て い る こ と や 、 安 全 に 動 作 す る こ と の 検 証 が 可 能 で あ る 。 

    Javaの デ ー タ 型 に は 、 参 照 型  (reference type) と 基 本 型 ( プ リ ミ テ ィ ブ 型 、 primitive type) の 2種 類 が あ る 。 Javaの オ ブ ジ ェ ク ト は す べ て 参 照 型 で あ る 。 Javaの 基 本 型 は 、 単 純 な 構 造 の デ ー タ ( 数 値 、 論 理 値 、 文 字  な ど ) の た め の 型 で あ る 。 Javaの 標 準 ラ イ ブ ラ リ は 、 基 本 型 の 値 を オ ブ ジ ェ ク ト と し て 扱 え る よ う に す る た め の ラ ッ パ ク ラ ス を 提 供 し て い る 。 近 年 の Java (J2SE 5.0) か ら は 型 の 扱 い に 改 良 が 加 え ら れ て い る 。 

  • Javaの コ ン パ イ ラ が 自 動 的 に 基 本 型 の デ ー タ と そ れ に 対 応 す る 参 照 型 の ラ ッ パ オ ブ ジ ェ ク ト と の 間 の 変 換 を 行 う ( オ ー ト ボ ク シ ン グ /ア ン ボ ク シ ン グ ) 。 こ れ に よ り 、 Javaで 参 照 型 と 基 本 型 の 2種 類 の デ ー タ が 存 在 す る こ と に よ る 複 雑 さ は 、 軽 減 さ れ て い る 。 
  • 総 称 型 を 使 え る よ う に な っ た 。 プ ロ グ ラ ム に お け る 型 変 換 を 減 ら す こ と が で き 、 安 全 性 が 向 上 し た 。 総 称 型 は 従 来 の C++な ど の 言 語 で 実 現 さ れ て い た 技 術 で あ る 。 
  • Javaの 特 徴 の 一 つ で あ る オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ は 、 プ ロ グ ラ ミ ン グ お よ び プ ロ グ ラ ミ ン グ 言 語 設 計 の 手 法 を い う 。 Javaは オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 で あ る 。 オ ブ ジ ェ ク ト 指 向 の 概 念 に 対 し て は 、 多 く の 解 釈 が な さ れ て き た 。 一 般 に は 、 オ ブ ジ ェ ク ト 指 向 を 特 徴 づ け る 重 要 な 考 え 方 は 、 ソ フ ト ウ ェ ア で 扱 う さ ま ざ ま な 種 類 の デ ー タ に つ い て 、 デ ー タ と そ の デ ー タ に 関 連 す る 手 続 き を 一 体 化 す る よ う に 、 ソ フ ト ウ ェ ア を 設 計 す る こ と で あ る 。 こ う し て 、 デ ー タ と コ ー ド は 、 オ ブ ジ ェ ク ト と 呼 ば れ る 実 体 に 一 体 化 さ れ る 。 オ ブ ジ ェ ク ト と は 、 状 態 ( デ ー タ ) と 振 る 舞 い ( コ ー ド ) が ひ と か た ま り と な っ た も の と 考 え る こ と が で き る 。 

    Javaで は 、 オ ブ ジ ェ ク ト の 設 計 図 で あ る ク ラ ス に 定 義 す る 振 る 舞 い を 「 メ ソ ッ ド 」 と 、 状 態 を 「 フ ィ ー ル ド 」 ( イ ン ス タ ン ス 変 数 ) と 呼 ぶ 。 

    オ ブ ジ ェ ク ト 指 向 以 前 の 技 術 で の 本 質 的 な 問 題 点 は 、 プ ロ グ ラ ム に お い て 、 状 態 と 振 る 舞 い が 分 離 さ れ て い た こ と で あ る 。 

  • あ る デ ー タ 構 造 を 変 更 す る 場 合 、 関 連 し て そ の デ ー タ を 処 理 す る コ ー ド を 変 更 を 行 う 必 要 が あ る と い う 、 面 倒 な こ と に な る 。 
  • 逆 に コ ー ド を 変 更 す る 場 合 に 、 関 連 し て そ の コ ー ド で 扱 う デ ー タ 構 造 を 変 更 し な け れ ば な ら な い 場 合 も あ っ た 。 
  • オ ブ ジ ェ ク ト 指 向 に 基 づ い て 、 こ れ ま で 分 離 さ れ て い た 状 態 と 振 る 舞 い を 、 オ ブ ジ ェ ク ト に 一 体 化 す る こ と は 、 ソ フ ト ウ ェ ア シ ス テ ム の 設 計 に お い て 堅 牢 な 基 盤 と な る 。 オ ブ ジ ェ ク ト 指 向 を 有 効 に 活 用 す る こ と に よ り 、 大 規 模 な ソ フ ト ウ ェ ア 開 発 プ ロ ジ ェ ク ト を 管 理 す る こ と の 困 難 さ が 軽 減 さ れ 、 ソ フ ト ウ ェ ア の 品 質 が 向 上 し 、 失 敗 す る プ ロ ジ ェ ク ト の 数 を 減 ら す こ と が で き る 。 

    オ ブ ジ ェ ク ト 指 向 の も う 一 つ の 目 標 は 、 汎 用 的 な オ ブ ジ ェ ク ト を 開 発 す る こ と で 、 プ ロ ジ ェ ク ト を ま た が っ て ソ フ ト ウ ェ ア を よ り 再 利 用 可 能 に し て い く と い う も の で あ る 。 た と え ば 、 汎 用 的 な 「 顧 客 」 オ ブ ジ ェ ク ト は 、 別 の プ ロ ジ ェ ク ト に お い て も 、 理 論 的 に は ほ ぼ 同 一 の 手 続 き 群 を 備 え る で あ ろ う 。 大 き な 組 織 に お い て 、 そ の 組 織 の 複 数 の プ ロ ジ ェ ク ト が 機 能 的 に 共 通 す る 基 盤 層 を も つ 場 合 は 、 な お さ ら ソ フ ト ウ ェ ア の 再 利 用 が 重 要 と な る 。 こ う し た こ と か ら 、 ソ フ ト ウ ェ ア オ ブ ジ ェ ク ト は 、 さ ま ざ ま な シ ス テ ム に 組 み 込 み 可 能 で あ る よ う に 、 汎 用 性 を 備 え て い る こ と が 望 ま し い 。 こ う す る こ と で 、 ソ フ ト ウ ェ ア 業 界 は 、 既 存 の し っ か り テ ス ト さ れ た オ ブ ジ ェ ク ト コ ン ポ ー ネ ン ト を 活 用 し て プ ロ ジ ェ ク ト を 進 め る こ と が で き 、 開 発 期 間 を 大 幅 に 短 縮 す る こ と が で き る 。 

    一 方 で 、 ソ フ ト ウ ェ ア の 再 利 用 性 を 高 め る と い う こ と に は 、 実 践 に お い て は 、 2つ の 大 き な 困 難 を 伴 う 。 

  • 真 に 汎 用 的 な オ ブ ジ ェ ク ト を 設 計 す る 技 法 は 簡 単 な こ と で は な い た め 、 開 発 者 に は あ ま り 理 解 さ れ て い な い 
  • プ ロ ジ ェ ク ト で ど の よ う な 再 利 用 可 能 な オ ブ ジ ェ ク ト が 使 え る よ う に な っ て い る か に つ い て 、 多 く の 開 発 者 に 伝 え る こ と が で き る 環 境 を 整 え る 必 要 が あ る 
  • い く つ か の オ ー プ ン ソ ー ス コ ミ ュ ニ テ ィ で は 、 再 利 用 に 伴 う 問 題 を 軽 減 す る た め に 、 オ ブ ジ ェ ク ト や ク ラ ス ラ イ ブ ラ リ の 開 発 者 に 、 自 分 た ち が 開 発 し た 汎 用 的 で 再 利 用 可 能 な 開 発 物 に つ い て の 情 報 を 広 報 す る 手 段 を 提 供 し て い る 。 

    プ ラ ッ ト フ ォ ー ム 非 依 存 

    Javaの も う 一 つ の 特 徴 は プ ラ ッ ト フ ォ ー ム に 依 存 し て い な い こ と で あ り 、 こ れ は 、 Javaの プ ロ グ ラ ム が さ ま ざ ま な ハ ー ド ウ ェ ア や オ ペ レ ー テ ィ ン グ シ ス テ ム 上 で 必 ず 同 じ よ う に 動 く 、 と い う こ と を 意 味 す る 。 一 度 Javaの プ ロ グ ラ ム を 作 成 す れ ば 、 そ の プ ロ グ ラ ム は ど の プ ラ ッ ト フ ォ ー ム 上 で も 動 く の で あ る 。 近 年 で は 、 Java実 行 環 境 を 構 成 す る Java仮 想 マ シ ン に 高 速 化 の 技 術 が 導 入 さ れ 、 プ ラ ッ ト フ ォ ー ム に 依 存 し た プ ロ グ ラ ム と 同 水 準 の 実 行 性 能 を 実 現 し て い る 。 

    Javaの プ ラ ッ ト フ ォ ー ム 非 依 存 は 、 次 の よ う に し て 実 現 さ れ て い る 。 

  • ほ と ん ど の Javaの コ ン パ イ ラ ( Javaコ ン パ イ ラ ) は 、 Javaの ソ ー ス コ ー ド を 中 間 言 語 に コ ン パ イ ル す る 。 こ の Javaの 中 間 言 語 の コ ー ド を バ イ ト コ ー ド と い う 。 バ イ ト コ ー ド は Java仮 想 マ シ ン ( Java VM、 仮 想 マ シ ン の 一 種 ) で 実 行 可 能 な 簡 潔 な 機 械 語 命 令 か ら な る 。 
  • Javaプ ロ グ ラ ム を 実 行 す る 際 に は 、 こ の バ イ ト コ ー ド を Java仮 想 マ シ ン 上 で 実 行 す る 。 Java仮 想 マ シ ン は 、 実 行 す る ハ ー ド ウ ェ ア に ネ イ テ ィ ブ な ソ フ ト ウ ェ ア で あ り 、 中 間 言 語 で あ る バ イ ト コ ー ド を 解 釈 し て 実 行 す る 。 
  • Java実 行 環 境 は 、 Java仮 想 マ シ ン の 他 に 、 標 準 ラ イ ブ ラ リ を 備 え て い る 。 こ の 標 準 ラ イ ブ ラ リ を 利 用 す る こ と に よ り 、 Javaプ ロ グ ラ ム は 、 グ ラ フ ィ ク ス 、 ス レ ッ ド 、 ネ ッ ト ワ ー ク  な ど 実 行 す る マ シ ン の さ ま ざ ま な 機 能 を 、 プ ラ ッ ト フ ォ ー ム に 依 存 し な い 単 一 の 方 法 で 使 う こ と が で き る よ う に な る 。 プ ラ ッ ト フ ォ ー ム ご と に 異 な る 方 法 を 使 い 分 け る 必 要 は 無 い 。 
  • Javaの バ イ ト コ ー ド の 実 行 時 に は 、 Java仮 想 マ シ ン に よ り 、 最 終 的 に は ハ ー ド ウ ェ ア に ネ イ テ ィ ブ な 機 械 語 コ ー ド に 変 換 さ れ て 実 行 さ れ る 。 こ の バ イ ト コ ー ド か ら 機 械 語 コ ー ド へ の 変 換 は 、 Java仮 想 マ シ ン が イ ン タ プ リ タ と し て 行 う 場 合 と 、 Java仮 想 マ シ ン が ジ ャ ス ト イ ン タ イ ム コ ン パ イ ラ を 使 っ て 行 う 場 合 と が あ る 。 
  • ま た 、 実 際 に は Javaコ ン パ イ ラ の 実 装 と し て 、 ソ ー ス コ ー ド か ら 直 接 に プ ラ ッ ト フ ォ ー ム の ハ ー ド ウ ェ ア に ネ イ テ ィ ブ な オ ブ ジ ェ ク ト コ ー ド ( 機 械 語 コ ー ド ) を 生 成 す る も の が あ る 。 こ の よ う な Javaコ ン パ イ ラ の 実 装 と し て は GNUプ ロ ジ ェ ク ト の GNU Compiler for Java (GCJ)な ど が あ る 。 こ の 場 合 、 中 間 言 語 の バ イ ト コ ー ド を 生 成 す る と い う 段 階 は 省 か れ る 。 し か し こ の 方 法 で 生 成 さ れ る Javaの 実 行 コ ー ド は 、 コ ン パ イ ル 時 に 指 定 し た プ ラ ッ ト フ ォ ー ム で し か 動 か な い 。 

    Javaの 実 行 コ ー ド ( バ イ ト コ ー ド ) を 生 成 す る 手 段 と し て は 、 プ ロ グ ラ ミ ン グ 言 語 Javaで プ ロ グ ラ ム を 書 く こ と が 標 準 的 な や り 方 で あ る 。 Javaの バ イ ト コ ー ド の 実 行 は 、 Java仮 想 マ シ ン と い う 仮 想 マ シ ン の 環 境 上 で 行 わ れ る 。 Java仮 想 マ シ ン は 実 行 時 に バ イ ト コ ー ド を ネ イ テ ィ ブ コ ー ド に 変 換 す る 。 な お 、 Javaの バ イ ト コ ー ド を 生 成 す る 他 の 方 法 と し て は 、 現 在 で は Ruby( JRuby) や  Groovy 、 Kotlin 、 Jabaco 、 Python( Jython) な ど の プ ロ グ ラ ミ ン グ 言 語 で プ ロ グ ラ ム を 書 く こ と も で き る 。 

    サ ン ・ マ イ ク ロ シ ス テ ム ズ の Javaの ラ イ セ ン ス は 、 す べ て の Java実 行 環 境 の 実 装 は 「 互 換 性 」 を 備 え る べ き で あ る こ と を 要 求 し て い た 。 こ の こ と に 関 連 し て 、 サ ン ・ マ イ ク ロ シ ス テ ム ズ と マ イ ク ロ ソ フ ト と の 間 で 法 的 な 争 い が 起 こ っ た こ と が あ っ た 。 こ の 法 的 な 争 い は 、 サ ン が 、 マ イ ク ロ ソ フ ト の Java実 行 環 境 の 実 装 に つ い て 次 の よ う に 主 張 し た こ と に よ る 。 

  • RMIと JNIの 機 能 が 無 い 。 
  • マ イ ク ロ ソ フ ト の プ ラ ッ ト フ ォ ー ム  (Windows) に 特 有 の 機 能 を 備 え て い る 。 
  • サ ン は 訴 訟 を 起 こ し て 勝 訴 し 、 約 2000万 ド ル の 違 約 金 の 支 払 い を 受 け た 。 ま た 裁 判 所 は 、 マ イ ク ロ ソ フ ト に 対 し て サ ン の ラ イ セ ン ス 条 件 に 従 う こ と を 命 じ た 。 こ の 決 定 を 受 け て 、 マ イ ク ロ ソ フ ト は 自 社 の OSで あ る Windowsに Java実 行 環 境 を 同 梱 し な い 方 針 を 採 っ た 。 ま た 近 年 の バ ー ジ ョ ン の Windowsで は 自 社 の ウ ェ ブ ブ ラ ウ ザ で あ る Internet Explorerで Javaを サ ポ ー ト し な い よ う に し た 。 そ の 結 果 、 Internet Explorerで Javaア プ レ ッ ト を 動 か す た め に は 、 別 途 に プ ラ グ イ ン が 必 要 と な っ た 。 し か し 、 サ ン な ど の 企 業 は 、 近 年 の バ ー ジ ョ ン の Windowsの ユ ー ザ が 、 無 償 で Java実 行 環 境 を 利 用 で き る よ う に し た 。 そ の た め 、 ほ と ん ど の Windows PCの ユ ー ザ は 、 何 ら 問 題 な く ウ ェ ブ お よ び デ ス ク ト ッ プ 上 で Javaア プ リ ケ ー シ ョ ン を 実 行 で き る 。 

    最 初 期 の Java実 行 環 境 の 実 装 で は 、 Javaプ ロ グ ラ ム の 実 行 速 度 が 遅 か っ た が 、 近 年 で は 大 き く 改 善 さ れ て 、 高 速 に 実 行 で き る よ う に な っ た 。 最 初 期 の Java実 行 環 境 の Java仮 想 マ シ ン の 実 装 は 、 移 植 性 を 実 現 す る た め に イ ン タ プ リ タ と し て 動 作 す る 仮 想 マ シ ン を 採 用 し た 。 こ う し た 初 期 の Java実 行 環 境 の 実 装 で は 、 Javaプ ロ グ ラ ム の 実 行 速 度 が Cや C++の プ ロ グ ラ ム と 比 べ て 遅 か っ た 。 そ の た め 、 Javaプ ロ グ ラ ム の 実 行 速 度 は 遅 い と い う 評 判 が 広 ま っ た 。 近 年 の Java実 行 環 境 の 実 装 で は 、 い く つ か の 技 術 を 導 入 す る こ と に よ り 、 以 前 と 比 べ て 、 Javaプ ロ グ ラ ム を か な り 高 速 に 実 行 で き る よ う に な っ た 。 

    Javaプ ロ グ ラ ム を 高 速 に 実 行 す る た め に 使 わ れ る 技 術 を 説 明 す る 。 

  • Java仮 想 マ シ ン に 高 速 化 の 技 術 を 導 入 す る 。 
  • Java仮 想 マ シ ン に ジ ャ ス ト イ ン タ イ ム コ ン パ イ ル 方 式 ( JITコ ン パ イ ル 方 式 ) を 導 入 す る 。 ジ ャ ス ト イ ン タ イ ム コ ン パ イ ラ は 、 Javaプ ロ グ ラ ム ( バ イ ト コ ー ド ) の 実 行 時 に 、 バ イ ト コ ー ド を ネ イ テ ィ ブ コ ー ド に 変 換 す る 。 
  • さ ら に 洗 練 さ れ た Java仮 想 マ シ ン で は 「 動 的 再 コ ン パ イ ル 」 (dynamic recompilation) を 行 う 。 こ う し た Java仮 想 マ シ ン で は 、 実 行 中 の プ ロ グ ラ ム を 分 析 し て 、 プ ロ グ ラ ム の 重 要 な 部 分 を 特 定 し て 再 コ ン パ イ ル を 行 い 最 適 化 す る 。 動 的 再 コ ン パ イ ル は 、 静 的 コ ン パ イ ル よ り も 優 れ た 最 適 化 を 行 う こ と が で き る 。 そ の 理 由 は 、 動 的 再 コ ン パ イ ル は 、 実 行 環 境 と 実 行 中 に ロ ー ド さ れ て い る ク ラ ス に 関 す る 情 報 に 基 づ い て 最 適 化 し て い る か ら で あ る 。 
  • Java仮 想 マ シ ン に 世 代 別 ガ ベ ー ジ コ レ ク シ ョ ン の 技 術 を 導 入 し て ガ ベ ー ジ コ レ ク シ ョ ン を 効 率 化 す る 。 
  • あ る い は 、 先 に 述 べ た よ う に 、 Javaの ソ ー ス コ ー ド を 、 従 来 の 言 語 の コ ン パ イ ラ と 同 様 に 、 単 純 に ネ イ テ ィ ブ な 機 械 語 コ ー ド に コ ン パ イ ル す る 。 こ の 場 合 、 バ イ ト コ ー ド を 生 成 す る 過 程 は 全 く 省 か れ る 。 こ の 技 術 を 使 う と 、 良 好 な 実 行 速 度 を 得 る こ と が で き る 。 た だ し 移 植 性 ( プ ラ ッ ト フ ォ ー ム 非 依 存 ) は 損 な わ れ る 。 Java仮 想 マ シ ン に ジ ャ ス ト イ ン タ イ ム コ ン パ イ ル と 動 的 再 コ ン パ イ ル 、 世 代 別 ガ ベ ー ジ コ レ ク シ ョ ン の 技 術 を 導 入 す る こ と に よ り 、 Javaプ ロ グ ラ ム は 、 移 植 性 を 保 ち つ つ 、 ネ イ テ ィ ブ コ ー ド と 同 水 準 で 高 速 に 実 行 す る こ と が で き る よ う に な っ た 。 
  • Java の 移 植 性 ( プ ラ ッ ト フ ォ ー ム 非 依 存 ) が ど の 程 度 実 現 で き て い る か に つ い て は 、 議 論 の 対 象 と な っ て い る 。 技 術 的 に は 移 植 性 と は 実 現 が 難 し い 目 標 で あ る 。 多 く の プ ラ ッ ト フ ォ ー ム に お い て 同 一 に 動 作 す る Javaプ ロ グ ラ ム を 作 成 す る こ と は 、 可 能 で あ る 。 し か し 実 際 に は 、 Javaを 利 用 で き る プ ラ ッ ト フ ォ ー ム に よ っ て は ち ょ っ と し た エ ラ ー が 発 生 し た り 、 微 妙 に 異 な る 動 作 を す る 事 例 が 多 い 。 こ う し た こ と か ら 一 部 の 人 々 は 、 サ ン ・ マ イ ク ロ シ ス テ ム ズ の Javaの 売 り 文 句 で あ っ た  “Write once, run anywhere”( 一 度 コ ー ド を 書 け ば 、 ど の 環 境 で も 動 く ) を も じ っ て  “Write once, debug everywhere”( 一 度 コ ー ド を 書 け ば 、 ど の 環 境 で も デ バ ッ グ が 必 要 ) と 皮 肉 を い わ れ る こ と が あ る 。 

    し か し 、 Javaの プ ラ ッ ト フ ォ ー ム 非 依 存 は 、 サ ー バ 側 や 組 み 込 み シ ス テ ム の ア プ リ ケ ー シ ョ ン に 関 し て は 、 非 常 に 成 功 し て い る 。 サ ー バ 側  (Java EE) で は 、 Java の サ ー ブ レ ッ ト 、 Webサ ー ビ ス 、 EJB (Enterprise JavaBeans) な ど の 技 術 が 広 く 使 わ れ て い る 。 組 み 込 み シ ス テ ム の 分 野 に お い て も 、 組 み 込 み シ ス テ ム 向 け の  Java環 境  (Java ME) を 使 っ た OSGiを 基 に し た 開 発 が 広 く 行 わ れ て い る 。 

    ガ ベ ー ジ コ レ ク シ ョ ン 

    Javaは ガ ベ ー ジ コ レ ク シ ョ ン 機 能 を 備 え て お り 、 こ れ を 備 え て い な い 従 来 の 多 く の 言 語 と 比 較 し て 、 プ ロ グ ラ ム の 開 発 生 産 性 と 安 定 性 が 高 く 、 プ ロ グ ラ マ の 負 担 が 完 全 に 解 消 さ れ る わ け で は な い も の の 、 大 き く 軽 減 さ れ る 。 近 年 の Javaで は 世 代 別 ガ ベ ー ジ コ レ ク シ ョ ン と い う よ り 効 率 的 な 技 術 を 導 入 し て い る 。 

    ガ ベ ー ジ コ レ ク シ ョ ン を 備 え て い な い C++や そ の 他 の 言 語 の 場 合 、 プ ロ グ ラ マ が 適 切 に メ モ リ の 管 理 を し な け れ ば な ら な い 。 オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ を す る プ ロ グ ラ マ は 一 般 に 、 Javaと 同 様 メ モ リ 内 の ヒ ー プ に オ ブ ジ ェ ク ト を 格 納 す る 領 域 を 割 り 当 て る 。 そ し て オ ブ ジ ェ ク ト が も は や 必 要 な く な っ た 場 合 に 、 必 ず 明 示 的 に オ ブ ジ ェ ク ト を 削 除 す る 指 示 を 記 述 し て 、 そ の オ ブ ジ ェ ク ト が 使 っ て い た メ モ リ 領 域 を 解 放 し な け れ ば な ら な い 。 メ モ リ 管 理 が 不 十 分 な プ ロ グ ラ ム で は 、 メ モ リ リ ー ク が 発 生 す る 可 能 性 が あ る 。 メ モ リ リ ー ク と は 、 不 適 切 な 指 示 な ど で 、 解 放 さ れ な か っ た メ モ リ 領 域 が 累 積 し て い き 、 利 用 で き る メ モ リ の 量 が 減 っ て い く こ と で 、 気 付 か な い う ち に 大 量 の メ モ リ を 消 費 し て し ま う 問 題 が 起 こ り 得 る 。 他 に も 、 メ モ リ 領 域 を 解 放 す る 際 に 、 解 放 の 指 示 を 重 複 し て 行 っ て し ま い 、 プ ロ グ ラ ム の 実 行 を 不 安 定 に す る な ど の ケ ー ス が あ り 、 悪 く す る と 異 常 終 了 し て し ま う こ と も あ る 。 

    ガ ベ ー ジ コ レ ク シ ョ ン 機 能 は 、 こ の よ う な 潜 在 的 な 問 題 の 多 く を 未 然 に 防 ぐ こ と が で き る 。 プ ロ グ ラ マ は 任 意 の 時 点 で オ ブ ジ ェ ク ト を 生 成 す る こ と が で き 、 Java実 行 環 境 は 生 成 さ れ た オ ブ ジ ェ ク ト の ラ イ フ サ イ ク ル を 管 理 す る 責 任 を 持 つ 。 

    プ ロ グ ラ ム ( オ ブ ジ ェ ク ト ) は 、 他 の オ ブ ジ ェ ク ト へ の 参 照 を 持 ち 、 そ の オ ブ ジ ェ ク ト の メ ソ ッ ド を 呼 び 出 す こ と が で き る 。 他 の オ ブ ジ ェ ク ト へ の 参 照 と は 、 低 水 準 の 視 点 で 述 べ る と 、 メ モ リ 内 の ヒ ー プ と い う 領 域 上 に 確 保 さ れ た そ の オ ブ ジ ェ ク ト を 指 す ア ド レ ス の こ と で あ る 。 

    オ ブ ジ ェ ク ト が ど こ か ら も 参 照 さ れ な く な っ た 場 合 、 Javaの ガ ベ ー ジ コ レ ク シ ョ ン 機 能 が 自 動 的 に そ の 「 到 達 不 可 能 な オ ブ ジ ェ ク ト 」 を 削 除 し 、 そ の メ モ リ 領 域 を 解 放 す る こ と で 、 解 放 し 忘 れ た 未 解 放 メ モ リ が 累 積 し て い き 利 用 で き る メ モ リ 量 が 減 っ て い く メ モ リ リ ー ク を 防 ぐ 。 

    た だ し Javaの ガ ベ ー ジ コ レ ク シ ョ ン 機 能 は 、 メ モ リ リ ー ク の 問 題 を 完 全 に 解 消 す る わ け で は な い 。 プ ロ グ ラ マ が 、 自 分 の プ ロ グ ラ ム で も は や 必 要 の な い オ ブ ジ ェ ク ト へ の 参 照 を 保 持 し 続 け た 場 合 は 、 や は り メ モ リ リ ー ク が 発 生 す る 可 能 性 が あ る 。 

    別 の 表 現 で 述 べ る と 、 Javaで は 、 メ モ リ リ ー ク は 概 念 的 に 高 い 水 準 に お い て は 、 発 生 す る 可 能 性 が 残 っ て い る と い う こ と で あ る 。 概 念 的 に 低 い 水 準 に お い て は 、 ガ ベ ー ジ コ レ ク シ ョ ン が 正 し く 実 装 さ れ た Java仮 想 マ シ ン を 使 え ば 、 メ モ リ リ ー ク が 発 生 す る 可 能 性 は 無 く な っ た 。 全 体 と し て 、 Javaの ガ ベ ー ジ コ レ ク シ ョ ン 機 能 に よ り 、 C++の 場 合 と 比 べ る と 、 オ ブ ジ ェ ク ト の 生 成 と 削 除 は 、 よ り 簡 潔 に な り 、 潜 在 的 に 安 全 に な り 、 ま た 多 く の 場 合 は 高 速 に な っ て い る 。 

    C++に お い て も 、 Javaと 同 等 の メ モ リ 管 理 の 高 速 性 と 効 率 性 を 実 現 す る こ と は 可 能 で は あ る が 、 先 に 述 べ た 通 り 、 複 雑 な 作 業 で 間 違 い や す く 、 完 璧 に 行 お う と す れ ば 開 発 期 間 が 非 常 に 長 く な り 、 開 発 し た ソ フ ト ウ ェ ア は か な り 複 雑 で 難 解 に な る 。 た と え ば 、 C++で 特 定 の ク ラ ス を 対 象 と し て 、 高 速 実 行 お よ び メ モ リ 利 用 の 断 片 化 の 最 小 化 を 、 高 水 準 で 達 成 で き る メ モ リ 管 理 モ デ ル で 設 計 開 発 す る 技 法 が あ る が 、 こ う し た 技 法 は 複 雑 で あ る 。 

    ガ ベ ー ジ コ レ ク シ ョ ン の 機 構 は 、 Java仮 想 マ シ ン に 組 み 込 ま れ て お り 、 開 発 者 か ら は 、 事 実 上 隠 蔽 さ れ て い る 。 開 発 者 は 、 場 合 に も よ る が 、 ガ ベ ー ジ コ レ ク シ ョ ン が い つ 起 こ る か 意 識 し な く て 良 い 。 と い う の も 多 く の 場 合 、 ガ ベ ー ジ コ レ ク シ ョ ン の 実 行 は 、 プ ロ グ ラ マ が 自 分 で 書 い た コ ー ド に よ っ て 明 示 的 に 起 こ る 何 ら か の 挙 動 と 、 必 ず し も 関 連 し て い る わ け で は な い か ら で あ る 。 

    ネ ッ ト ワ ー ク 機 能 

    Javaで は 充 実 し た ラ イ ブ ラ リ に よ り 、 コ ン ピ ュ ー タ ネ ッ ト ワ ー ク を 使 う ソ フ ト ウ ェ ア を 、 効 率 良 く 開 発 で き る 。 Javaの 初 期 の バ ー ジ ョ ン か ら 、 TCP/IP (IPv4) の ラ イ ブ ラ リ を 備 え て お り 、 ネ ッ ト ワ ー ク で ソ ケ ッ ト 通 信 を 行 う ソ フ ト ウ ェ ア を 簡 単 に 実 装 で き た 。 分 散 オ ブ ジ ェ ク ト 環 境 の ソ フ ト ウ ェ ア の 開 発 も 早 い 時 期 か ら で き る よ う に な っ た 。 Java RMIも し く は CORBAの 分 散 オ ブ ジ ェ ク ト 技 術 を 標 準 で 使 う こ と が で き る 。 近 年 で は 、 標 準 、 拡 張 そ の 他 の ラ イ ブ ラ リ に よ り 、 さ ま ざ ま な ネ ッ ト ワ ー ク プ ロ ト コ ル を 高 水 準 で 扱 え る よ う に な っ て い る 。 

  • FTP( フ ァ イ ル 送 受 信 ) 
  • HTTP( ウ ェ ブ に よ る デ ー タ 送 受 信 ) 
  • SMTP/POP/IMAP、 NNTP( 電 子 メ ー ル 送 受 信 、 ネ ッ ト ニ ュ ー ス ) 
  • SSH、 TLS/SSL( セ キ ュ ア な 通 信 に よ り 盗 聴 や な り す ま し を 防 ぐ ) 
  • SMB( フ ァ イ ル サ ー バ へ の ア ク セ ス ) 
  • ほ か 
  • 現 在 で は IPv6も 扱 え る よ う に な り つ つ あ る 。 

    XML文 書 を 扱 う 技 術 と ネ ッ ト ワ ー ク 機 能 を 有 効 に 組 み 合 わ せ る こ と に よ り 、 高 度 な シ ス テ ム や サ ー ビ ス を 構 築 で き る よ う に な っ て い る 。 

    セ キ ュ リ テ ィ 

    Javaで は 初 期 の バ ー ジ ョ ン か ら 遠 隔 の コ ン ピ ュ ー タ 上 に あ る 実 行 コ ー ド ( Javaア プ レ ッ ト ) を 安 全 に 実 行 で き る よ う 設 計 さ れ て い た 。 

  • Java仮 想 マ シ ン の バ イ ト コ ー ド 検 証 機 能 に よ り 、 Javaの 実 行 コ ー ド で あ る バ イ ト コ ー ド が 正 し い か ど う か を 検 査 す る 。 
  • Java実 行 環 境 の ク ラ ス ロ ー ダ 機 能 に よ り 、 ク ラ ス ( バ イ ト コ ー ド ) を ロ ー ド す る 際 に そ の ク ラ ス の 情 報 を 調 べ て 、 安 全 性 を 検 査 す る 。 
  • Java実 行 環 境 の セ キ ュ リ テ ィ マ ネ ー ジ ャ 機 能 ( サ ン ド ボ ッ ク ス ) に よ り 、 Javaア プ レ ッ ト が 、 ユ ー ザ に よ っ て 許 可 さ れ た 資 源 以 外 の 資 源 に 不 正 に ア ク セ ス す る こ と を 防 ぐ 。 
  • Java実 行 環 境 の 既 定 の 設 定 で は 、 遠 隔 の コ ン ピ ュ ー タ 上 に あ る 実 行 コ ー ド ( Javaア プ レ ッ ト ) に 対 し て 、 ロ ー カ ル に あ る フ ァ イ ル 等 へ の ア ク セ ス や 、 ア プ レ ッ ト の ダ ウ ン ロ ー ド 元 以 外 の 遠 隔 コ ン ピ ュ ー タ と の 通 信 を 禁 止 し て い る 。 
  • 名 前 空 間 

    Javaは 、 パ ッ ケ ー ジ と い う 名 前 空 間 の 機 構 を 持 つ 言 語 で あ り 、 ラ イ ブ ラ リ お よ び ア プ リ ケ ー シ ョ ン ソ フ ト ウ ェ ア に 含 ま れ る 多 数 の  Java の プ ロ グ ラ ム ( ク ラ ス と イ ン タ フ ェ ー ス ) を 、 パ ッ ケ ー ジ の 階 層 構 造 に 分 類 ・ 整 理 す る こ と が で き る 。 名 前 空 間 の 機 構 を 持 た な い 言 語 と 比 べ て 、 多 数 の ク ラ ス と イ ン タ フ ェ ー ス の 管 理 が 容 易 と な り 、 ク ラ ス と イ ン タ フ ェ ー ス の 命 名 に つ い て も 、 既 存 の ク ラ ス /イ ン タ フ ェ ー ス と の 名 前 の 衝 突 回 避 を 考 慮 す る 労 力 が 、 大 き く 軽 減 さ れ る 。 

    実 行 形 態 

    Java の バ イ ト コ ー ド に は 複 数 の 実 行 形 態 が あ る と 考 え る こ と が で き る 。 た だ し い ず れ の バ イ ト コ ー ド も 、 Java実 行 環 境  (JRE) の 下 で 実 行 さ れ る と い う 点 で は 、 同 じ と 考 え る こ と も で き る 。 

    構 文 

    構 文 は 、 Cお よ び C++か ら 多 く を 引 き 継 い で い る 。 こ の た め 、 設 計 当 時 に は 割 合 と し て 多 か っ た 、 Cや C++し か 書 け な い プ ロ グ ラ マ に も 習 得 し や す い と 、 メ ー カ ー や 信 者 は 宣 伝 し た 。 Javaが 設 計 さ れ た 1990年 代 中 旬 以 前 は 、 Cの プ ロ グ ラ マ が 多 く 、 ま た オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 の 中 で は 、 C++は 広 く 使 わ れ て き た 言 語 の 一 つ だ っ た 。 

    な お 、 Javaで は C++と 違 っ て 名 前 空 間 レ ベ ル の 関 数 ( メ ソ ッ ド ) お よ び 変 数 ( フ ィ ー ル ド ) の 宣 言 お よ び 定 義 を 許 可 し て お ら ず 、 必 ず 何 ら か の ク ラ ス 定 義 の 中 に 記 述 す る こ と が 特 徴 で あ る 。 こ の 特 徴 は 後 発 の C#も 踏 襲 し て い る 。 

    Hello world

    次 の 節 以 降 で は 、 Hello worldプ ロ グ ラ ム で 、 Javaプ ロ グ ラ ム の 例 を 示 し て 説 明 す る 。 

    Hello worldプ ロ グ ラ ム と は 、 “Hello, world” と い う 文 字 列 を デ ィ ス プ レ イ な ど の 出 力 装 置 に 出 力 す る 簡 単 な ソ フ ト ウ ェ ア プ ロ グ ラ ム で あ る 。 プ ロ グ ラ ミ ン グ 言 語 の 初 学 者 向 け の プ ロ グ ラ ム 例 と し て よ く 使 わ れ る 。 

    な お 先 に 述 べ た 通 り 、 Javaに は 複 数 の 実 行 形 態 が あ る と 考 え る こ と が で き る の で 、 以 降 で は 、 そ れ ぞ れ の 実 行 形 態 に お け る Hello worldプ ロ グ ラ ム を 例 示 す る 。 

    例 : ス タ ン ド ア ロ ン ( コ マ ン ド ラ イ ン ) 

    コ マ ン ド ラ イ ン 環 境 で 動 く ス タ ン ド ア ロ ン の Javaア プ リ ケ ー シ ョ ン の 例 を 示 す 。 Javaで は 、 他 の プ ロ グ ラ ミ ン グ 言 語 と 同 様 に 、 コ マ ン ド ラ イ ン 環 境 で 動 く プ ロ グ ラ ム を 簡 単 に 開 発 で き る 。 

    こ の プ ロ グ ラ ム に つ い て 説 明 す る 。 

  • Javaの プ ロ グ ラ ム で は す べ て を class内 に 記 述 す る 。 コ マ ン ド ラ イ ン の ス タ ン ド ア ロ ン ア プ リ ケ ー シ ョ ン の 場 合 も 同 じ で あ る 。 
  • ソ ー ス コ ー ド の フ ァ イ ル 名 は 、 そ の フ ァ イ ル で 記 述 し て い る ク ラ ス の 名 前 に  “.java” と い う サ フ ィ ク ス ( 接 尾 辞 、 拡 張 子 ) を 付 け る と い う 規 則 で 命 名 す る 。 
  • コ ン パ イ ラ は 、 ソ ー ス フ ァ イ ル で 定 義 さ れ て い る 各 ク ラ ス の ク ラ ス フ ァ イ ル ( バ イ ト コ ー ド ) を 生 成 す る 。 ク ラ ス フ ァ イ ル の 名 称 は 、 そ の ク ラ ス の 名 前 に  “.class” の サ フ ィ ク ス を つ け た 名 前 に な る 。 
  • ク ラ ス フ ァ イ ル の 生 成 に お い て 、 内 部 ク ラ ス の 一 種 で あ る 無 名 ク ラ ス  (anonymous class) の 場 合 は 、 ク ラ ス フ ァ イ ル の 名 称 は 、 そ の 無 名 ク ラ ス を 含 む ク ラ ス の 名 称 と 整 数 ( 0か ら 始 ま り 、 無 名 ク ラ ス が 複 数 あ る 場 合 は 、 さ ら に 1、 2…と 順 に 付 番 さ れ る ) を  “$” で 連 結 し た 文 字 列 に 、 通 常 の ク ラ ス と 同 じ く  “.class” の サ フ ィ ク ス を 付 け た 名 前 に な る 。 
  • こ の 例 の よ う に 、 ス タ ン ド ア ロ ン で 実 行 す る プ ロ グ ラ ム ( ク ラ ス ) で は main()メ ソ ッ ド を 定 義 す る 必 要 が あ る 。 メ ソ ッ ド 定 義 に は 振 る 舞 い を 記 述 す る 。 こ の mainメ ソ ッ ド の シ グ ニ チ ャ ( 戻 り 値 、 引 数 ) は 次 の よ う に し な け れ ば な ら な い 。 
  • 戻 り 値 の 指 定 に は voidキ ー ワ ー ド を 使 う 。 voidは 、 そ の メ ソ ッ ド が 何 も 戻 り 値 を 返 さ な い こ と を 示 す 。 
  • mainメ ソ ッ ド は 、 パ ラ メ タ ( 引 数 ) と し て 1つ の Stringの 配 列 を 受 け 取 ら な く て は な ら な い 。 こ の String配 列 の 引 数 の 名 称 は argsと す る こ と が 慣 習 と な っ て い る 。 た だ し 引 数 と し て 可 能 な 名 称 で あ れ ば 他 の 名 称 で も 構 わ な い 。 
  • mainメ ソ ッ ド に は staticキ ー ワ ー ド を つ け な け れ ば な ら な い 。 staticは 、 そ の メ ソ ッ ド が ク ラ ス メ ソ ッ ド で あ る こ と を 示 す 。 ク ラ ス メ ソ ッ ド は 、 ク ラ ス と 関 連 す る メ ソ ッ ド で あ り 、 オ ブ ジ ェ ク ト イ ン ス タ ン ス に 関 連 す る メ ソ ッ ド ( イ ン ス タ ン ス メ ソ ッ ド ) で は な い 。 
  • mainメ ソ ッ ド は publicキ ー ワ ー ド を つ け て 宣 言 す る 。 publicは 、 そ の メ ソ ッ ド が 他 の ク ラ ス の コ ー ド か ら 呼 び 出 せ る こ と 、 お よ び そ の ク ラ ス が 他 の ク ラ ス か ら 呼 び 出 さ れ る 可 能 性 が あ る こ と を 、 示 す 。 こ こ で の 「 他 の ク ラ ス 」 と は 、 そ の ク ラ ス の 継 承 階 層 に 関 係 な く 、 他 の す べ て の ク ラ ス を 意 味 す る 。 
  • 印 字 出 力 機 能 は 、 Javaの 標 準 ラ イ ブ ラ リ に 含 ま れ て い る 。 System ク ラ ス は  public static の フ ィ ー ル ド  out を も つ 。 out オ ブ ジ ェ ク ト は 、 PrintStream ク ラ ス の イ ン ス タ ン ス で あ り 、 標 準 出 力 ス ト リ ー ム を 表 す 。 PrintStreamク ラ ス の イ ン ス タ ン ス で あ る  out オ ブ ジ ェ ク ト は 、 println(String) メ ソ ッ ド を 持 つ 。 こ の メ ソ ッ ド は デ ー タ を ス ト リ ー ム に 出 力 す る 。 ス ト リ ー ム と は 入 出 力 を 抽 象 化 し た 概 念 で あ る 。 こ の 場 合 は 、 デ ー タ を 画 面 ( out 、 標 準 出 力 ) に 出 力 す る 。 
  • ス タ ン ド ア ロ ン プ ロ グ ラ ム を 実 行 す る に は 、 Java実 行 環 境 に 呼 び 出 す 対 象 と な る  main メ ソ ッ ド を 持 つ ク ラ ス の 名 前 を 渡 す こ と に よ っ て 、 Java実 行 環 境 に 実 行 を 指 示 す る 。  UNIXや Windowsの 環 境 の 場 合 は 、 カ レ ン ト デ ィ レ ク ト リ か ら java -cp . Helloを コ マ ン ド ラ イ ン で 入 力 す る こ と で 、 こ の 例 の プ ロ グ ラ ム ( Hello.classに コ ン パ イ ル さ れ た ク ラ ス ) を 実 行 す る こ と が で き る 。 
  • 実 行 す る mainメ ソ ッ ド を も つ ク ラ ス 名 の 指 定 に つ い て は 、 Javaア ー カ イ ブ  (Jar) フ ァ イ ル の MANIFESTに 記 述 す る 方 法 も あ る 。 
  • 例 : ス タ ン ド ア ロ ン  (Swing)

    グ ラ フ ィ カ ル ユ ー ザ イ ン タ フ ェ ー ス  (GUI) 環 境 で 動 く  Swingを 使 っ た ス タ ン ド ア ロ ン の Javaア プ リ ケ ー シ ョ ン の 例 を 示 す 。 Swingは 、 Java SEの 高 度 な GUIの ウ ィ ジ ェ ッ ト ・ ツ ー ル キ ッ ト の ラ イ ブ ラ リ で あ る 。 

  • import文 は 、 コ ン パ イ ル 時 に Javaコ ン パ イ ラ に 対 し 、 こ の ソ ー ス コ ー ド 内 で は javax.swingパ ッ ケ ー ジ 内 の す べ て の publicな ク ラ ス と イ ン タ フ ェ ー ス を 、 パ ッ ケ ー ジ 名 を つ け な い で ク ラ ス 名  / イ ン タ フ ェ ー ス 名 だ け で 使 う こ と を 、 伝 え る 。 
  • Hello class extends JFrame の 部 分 で は 、 JFrameク ラ ス を 継 承 し て Helloク ラ ス を 定 義 す る こ と ( JFrameの サ ブ ク ラ ス と す る こ と ) を 記 述 し て い る 。 JFrameク ラ ス は 、 ウ ィ ン ド ウ 終 了 ボ タ ン を も つ タ イ ト ル バ ー の 付 い た ウ ィ ン ド ウ ( フ レ ー ム ) を 実 装 し て い る 。 
  • Hello()コ ン ス ト ラ ク タ で は 、 フ レ ー ム を 初 期 化 し て い る 。 
  • コ ン ス ト ラ ク タ と は 、 特 殊 な メ ソ ッ ド で あ り 、 オ ブ ジ ェ ク ト の 状 態 を 初 期 化 す る 処 理 を 記 述 す る 。 オ ブ ジ ェ ク ト が 生 成 さ れ る 際 に 自 動 的 に 呼 び 出 さ れ る 。 こ の 例 で は 、 mainメ ソ ッ ド で Helloオ ブ ジ ェ ク ト ( フ レ ー ム ) を 生 成 す る 時 に 呼 び 出 さ れ 、 Helloオ ブ ジ ェ ク ト ( フ レ ー ム ) の 状 態 を 初 期 化 す る 役 割 を 担 っ て い る 。 な お Javaの コ ン ス ト ラ ク タ に は 、 ク ラ ス 名 と 同 じ 名 称 を 付 け る 。 
  • オ ブ ジ ェ ク ト の 初 期 化 処 理 が 必 要 無 い 場 合 な ど に は 、 コ ン ス ト ラ ク タ の 明 示 的 な 定 義 を 省 略 し て 良 い 。 
  • こ の コ ン ス ト ラ ク タ で は ま ず 、 JFrameか ら 継 承 さ れ た  setDefaultCloseOperation(int) メ ソ ッ ド を 呼 び 出 し 、 タ イ ト ル バ ー の ウ ィ ン ド ウ 終 了 ボ タ ン が 押 さ れ た 際 の 既 定 の 挙 動 を  WindowConstants.DISPOSE_ON_CLOSE に 設 定 す る 。 こ れ に よ り 、 ウ ィ ン ド ウ 終 了 ボ タ ン が 押 さ れ た 際 に 、 フ レ ー ム が 単 に 不 可 視 に な る だ け で な く 破 棄 さ れ る こ と に な り 、 Java仮 想 マ シ ン が 終 了 し プ ロ グ ラ ム が 終 了 す る よ う に な る 。 
  • 次 に 、 new JLabelで “Hello, world!”の 文 字 列 表 示 の た め に ラ ベ ル オ ブ ジ ェ ク ト を 生 成 し て 、 フ レ ー ム ( JFrame) の 継 承 元 ク ラ ス Containerか ら 継 承 さ れ た add(Component)メ ソ ッ ド を 、 こ の ラ ベ ル を 引 数 と し て 呼 び 出 し て 、 ラ ベ ル を フ レ ー ム 上 に 追 加 配 置 す る 。 
  • 継 承 元 ク ラ ス Windowか ら 継 承 さ れ た pack()メ ソ ッ ド を 呼 び 出 し て 、 フ レ ー ム の 大 き さ を 調 整 し 、 フ レ ー ム 内 の コ ン ポ ー ネ ン ト ( ラ ベ ル ) の 配 置 を 調 整 す る 。 
  • こ の プ ロ グ ラ ム が 起 動 さ れ る 時 に 、 Java仮 想 マ シ ン は  main()メ ソ ッ ド を 呼 び 出 す 。 
  • mainメ ソ ッ ド は new Hello()の 部 分 で フ レ ー ム の オ ブ ジ ェ ク ト を 生 成 す る 。 こ の オ ブ ジ ェ ク ト 生 成 の 際 に 、 先 に 述 べ た Hello()コ ン ス ト ラ ク タ の 一 連 の 処 理 が 実 行 さ れ る 。 
  • 次 に 生 成 し た オ ブ ジ ェ ク ト に 対 し て 、 そ の 継 承 元 ク ラ ス Componentか ら 継 承 さ れ た setVisible(boolean)メ ソ ッ ド を 、 boolean型 の パ ラ メ タ trueを 引 数 と し て 呼 び 出 し て 、 フ レ ー ム を 可 視 化 す る 。 
  • 注 意 : フ レ ー ム が 一 度 表 示 さ れ た ら 、 mainメ ソ ッ ド が 終 了 し て も プ ロ グ ラ ム は 終 了 し な い 。 そ の 理 由 は 、 AWTの イ ベ ン ト デ ィ ス パ ッ チ ン グ ス レ ッ ド が 終 了 す る の は 、 す べ て の ト ッ プ レ ベ ル の Swingウ ィ ン ド ウ が 破 棄 さ れ た 後 で あ る た め で あ る 。 
  • 例 : ア プ レ ッ ト 

    Javaア プ レ ッ ト は 、 他 の ア プ リ ケ ー シ ョ ン に 埋 め 込 ま れ る プ ロ グ ラ ム で あ る 。 多 く の 場 合 は 、 ウ ェ ブ ブ ラ ウ ザ に 表 示 さ れ る ウ ェ ブ ペ ー ジ に 埋 め 込 ま れ る 。 

  • import 文 は 、 コ ン パ イ ル 時 に Javaコ ン パ イ ラ に 対 し 、 こ の ソ ー ス コ ー ド 内 で は  java.applet.Applet ク ラ ス と  java.awt.Graphics ク ラ ス を 、 パ ッ ケ ー ジ 名 を 付 け な い で ク ラ ス 名 だ け で 使 う こ と を 、 伝 え る 。 
  • Hello class extends Applet の 部 分 は 、 Helloク ラ ス が Appletク ラ ス を 継 承 す る こ と ( Helloク ラ ス が Appletク ラ ス の サ ブ ク ラ ス で あ る こ と ) を 記 述 し て い る 。 
  • Appletク ラ ス は 、 ホ ス ト ア プ リ ケ ー シ ョ ン ( ア プ レ ッ ト を 実 行 す る ア プ リ ケ ー シ ョ ン ) 上 で 、 ア プ レ ッ ト に よ る グ ラ フ ィ ク ス の 表 示 や ア プ レ ッ ト の ラ イ フ サ イ ク ル 制 御 を 支 援 す る フ レ ー ム ワ ー ク を 提 供 す る 。 
  • Appletは 抽 象 ウ ィ ン ド ウ ツ ー ル キ ッ ト  (AWT; Abstract Window Toolkit) の Componentで あ る 。 Componentを 継 承 し た ク ラ ス で あ る た め 、 Appletは 、 グ ラ フ ィ カ ル ユ ー ザ イ ン タ フ ェ ー ス  (GUI) を 備 え て お り 、 開 発 者 は イ ベ ン ト 駆 動 プ ロ グ ラ ミ ン グ の 作 法 で ア プ レ ッ ト を 開 発 す る こ と が で き る 。 
  • Helloク ラ ス は Containerス ー パ ー ク ラ ス か ら 継 承 さ れ た paint(Graphics)メ ソ ッ ド を オ ー バ ー ラ イ ド し て い る 。 
  • オ ー バ ー ラ イ ド と は 、 ス ー パ ー ク ラ ス で 定 義 さ れ た 、 既 定 の 振 る 舞 い を 実 装 し た メ ソ ッ ド や 抽 象 メ ソ ッ ド を 、 サ ブ ク ラ ス 側 で 実 装 し 直 す こ と を い う 。 
  • こ の paint(Graphics)メ ソ ッ ド の オ ー バ ー ラ イ ド に よ り 、 Helloア プ レ ッ ト を 表 示 す る 処 理 を 実 装 す る こ と が で き る 。 paint(Graphics)メ ソ ッ ド は 、 ア プ レ ッ ト に Graphicsオ ブ ジ ェ ク ト を 渡 す 。 ア プ レ ッ ト は Graphicsオ ブ ジ ェ ク ト を 受 け 取 る 。 Graphicsオ ブ ジ ェ ク ト は 、 ア プ レ ッ ト を 表 示 す る た め に 使 わ れ る グ ラ フ ィ ク ス コ ン テ ク ス ト を 表 し て い る 。 
  • こ の 例 で は 、 Graphicsオ ブ ジ ェ ク ト ( グ ラ フ ィ ク ス コ ン テ ク ス ト ) の drawString(String, int, int)メ ソ ッ ド を 呼 び 出 し て 、 ア プ レ ッ ト 表 示 域 の  (65, 95) ピ ク セ ル 座 標 ( オ フ セ ッ ト ) で  “Hello, world!” 文 字 列 を 表 示 す る 。 
  • こ の 例 で は 、 ア プ レ ッ ト は  XHTML (HTML) 文 書 内 の 、 applet要 素 ( <applet> タ グ ) が 使 わ れ て い る 位 置 に 表 示 さ れ る 。 applet 要 素 は 、 3つ の 属 性 を も つ 。 
  • code="Hello" は 、 Applet ク ラ ス の 名 前 を 示 す 。 
  • width="200" height="200" は 、 ア プ レ ッ ト 領 域 の 幅 と 高 さ を 設 定 す る 。 
  • ア プ レ ッ ト は 、 applet 要 素 の 代 わ り に 、 object 要 素 あ る い は  embed 要 素 を 使 っ て も  XHTML 文 書 に 埋 め 込 む こ と が で き る 。 た だ し 現 時 点 で は 、 ウ ェ ブ ブ ラ ウ ザ に よ る こ の 2つ の 要 素 の 扱 い は 、 ブ ラ ウ ザ ご と に 異 な る こ と が あ る 。  XHTML 1.1 仕 様 に お い て は  applet 要 素 は 廃 止 さ れ 、 ア プ レ ッ ト を 使 う 場 合 は  object 要 素 を 使 う こ と に な る 。 
  • 例 : サ ー ブ レ ッ ト 

    Javaサ ー ブ レ ッ ト は 、 サ ー バ 側 の Java EEの 構 成 要 素 で あ り 、 ク ラ イ ア ン ト か ら 受 け た 要 求  (request) に 対 す る 応 答  (response) を 生 成 す る 。 現 在 、 多 く の 場 合 は ウ ェ ブ ブ ラ ウ ザ か ら 要 求 を 受 け 、 応 答 と し て XHTML / HTMLの ウ ェ ブ ペ ー ジ を 動 的 に 生 成 す る 。 

  • import文 は 、 コ ン パ イ ル 時 に Javaコ ン パ イ ラ に 対 し 、 こ の ソ ー ス コ ー ド 内 で は java.ioパ ッ ケ ー ジ お よ び javax.servletパ ッ ケ ー ジ 内 の す べ て の publicな ク ラ ス と イ ン タ フ ェ ー ス を 、 パ ッ ケ ー ジ 名 を つ け な い で ク ラ ス 名  / イ ン タ フ ェ ー ス 名 だ け で 使 う こ と を 、 伝 え る 。 
  • Hello class extends GenericServlet の 部 分 は 、 Helloク ラ ス が  GenericServletク ラ ス を 継 承 す る こ と ( GenericServletの サ ブ ク ラ ス で あ る こ と ) を 記 述 し て い る 。 
  • GenericServletク ラ ス は 、 サ ー ブ レ ッ ト の 一 般 的 な フ レ ー ム ワ ー ク を 提 供 す る 。 サ ー バ 上 で 、 ク ラ イ ア ン ト か ら 送 ら れ て き た 要 求 を サ ー ブ レ ッ ト に 渡 し 、 サ ー ブ レ ッ ト の ラ イ フ サ イ ク ル を 制 御 す る 。 
  • Helloク ラ ス は Servletで 宣 言 さ れ た service(ServletRequest, ServletResponse)メ ソ ッ ド を オ ー バ ー ラ イ ド し て い る 。 こ の メ ソ ッ ド は 、 ク ラ イ ア ン ト か ら の 要 求 を 扱 う コ ー ド を 開 発 者 が 記 述 す る 場 所 と し て 、 サ ー ブ レ ッ ト フ レ ー ム ワ ー ク が 開 発 者 に 提 供 し て い る メ ソ ッ ド で あ る 。 service(ServletRequest, ServletResponse)メ ソ ッ ド は 、 ServletRequestオ ブ ジ ェ ク ト と ServletResponseオ ブ ジ ェ ク ト を Helloに 渡 す 。 Helloは ServletRequestと ServletResponseを 受 け 取 る 。 
  • ServletRequestオ ブ ジ ェ ク ト は 、 ク ラ イ ア ン ト か ら 送 ら れ て き た 要 求 を 表 す オ ブ ジ ェ ク ト で あ る 。 
  • ServletResponseオ ブ ジ ェ ク ト は 、 ク ラ イ ア ン ト に 送 り 返 す 応 答 を 表 す オ ブ ジ ェ ク ト で あ る 。 
  • service(ServletRequest, ServletResponse)メ ソ ッ ド の throws ServletException, IOExceptionの 部 分 で は 、 こ の メ ソ ッ ド が ServletExceptionも し く は IOExceptionの 例 外 を 投 げ る 可 能 性 が あ る こ と を 宣 言 し て い る 。 こ れ ら の 例 外 は 、 Hello サ ー ブ レ ッ ト の 実 行 中 に 何 ら か の 問 題 が 起 こ り 、 ク ラ イ ア ン ト か ら の 要 求 に 正 常 な 応 答 を 返 す こ と が で き な く な っ た 場 合 に 投 げ ら れ る 。 
  • setContentType(String)メ ソ ッ ド を 呼 び 出 し て 、 ク ラ イ ア ン ト に 返 す デ ー タ の MIME Content-Typeを  “text/html” に 設 定 す る 。 
  • getWriter()メ ソ ッ ド を 呼 び 出 し て PrintWriterオ ブ ジ ェ ク ト を 取 得 す る 。 こ の オ ブ ジ ェ ク ト を 使 っ て ク ラ イ ア ン ト に 返 す デ ー タ を 書 き 出 す こ と が で き る 。 
  • println(String)メ ソ ッ ド を 呼 び 出 し て 、 “Hello, world!” 文 字 列 を 応 答 デ ー タ と し て 書 き 出 す 。 
  • そ し て 応 答 デ ー タ は ソ ケ ッ ト ス ト リ ー ム に 書 き 出 さ れ 、 ク ラ イ ア ン ト に 返 さ れ る 。 
  • 構 成 

    Javaプ ラ ッ ト フ ォ ー ム の 構 成 を 説 明 す る 。 

  • #Java実 行 環 境  (JRE) は 、 Javaプ ラ ッ ト フ ォ ー ム に 配 置 さ れ た Javaア プ リ ケ ー シ ョ ン を 実 行 す る た め に 必 要 な 、 ソ フ ト ウ ェ ア で あ る 。 標 準 ク ラ ス ラ イ ブ ラ リ や Java仮 想 マ シ ン な ど か ら 構 成 さ れ る 。 
  • #Java開 発 キ ッ ト  (JDK) は 、 Javaプ ロ グ ラ ム の 開 発 を 支 援 す る 基 本 的 な ソ フ ト ウ ェ ア で あ る 。 
  • #JREと JDKの 複 数 の 実 装 で 、 JREと JDKの 開 発 と 提 供 の 状 況 に つ い て 簡 単 に 述 べ る 。 
  • #Javaの エ デ ィ シ ョ ン で 、 オ ラ ク ル と JCPが 規 定 し て い る 3つ の Javaの エ デ ィ シ ョ ン に つ い て 簡 単 に 述 べ る 。 
  • #拡 張 機 能 と 関 連 技 術 で 、 Javaの 主 な 拡 張 機 能 と 関 連 す る 技 術 を 述 べ る 。 
  • Java実 行 環 境 

    Java実 行 環 境  (JRE; Java Runtime Environment) は 、 Javaプ ラ ッ ト フ ォ ー ム に 配 置 さ れ た Javaア プ リ ケ ー シ ョ ン を 実 行 す る た め に 必 要 な 、 ソ フ ト ウ ェ ア で あ る 。 標 準 ク ラ ス ラ イ ブ ラ リ や Java仮 想 マ シ ン な ど か ら 構 成 さ れ る 。 

    エ ン ド ユ ー ザ は 普 通 、 Javaソ フ ト ウ ェ ア パ ッ ケ ー ジ や ウ ェ ブ ブ ラ ウ ザ プ ラ グ イ ン の 利 用 を 通 じ て JREを 使 う 。 オ ラ ク ル  / JCPを は じ め 複 数 の 団 体 や 企 業 に よ り 、  さ ま ざ ま な プ ラ ッ ト フ ォ ー ム 向 け に 、 多 く の  JRE の 実 装 が 開 発 ・ 提 供 さ れ て い る 。 

    JREの 他 、 オ ラ ク ル  / JCPな ど の 団 体 ・ 企 業 は 、 Java開 発 キ ッ ト  (JDK) と 呼 ば れ る JREの ス ー パ ー セ ッ ト の 実 装 を 開 発 ・ 提 供 し て い る 。 JDKは 、 Javaプ ロ グ ラ ム の 開 発 を 支 援 す る 基 本 的 な ソ フ ト ウ ェ ア で あ り 、 多 く の 開 発 ツ ー ル が 含 ま れ て い る 。 

    Java実 行 環 境 は 、 標 準 ク ラ ス ラ イ ブ ラ リ と Java仮 想 マ シ ン 、 お よ び い く つ か の フ ァ イ ル と ソ フ ト ウ ェ ア か ら 構 成 さ れ る 。 

  • Javaク ラ ス ラ イ ブ ラ リ 群 ( 標 準 ク ラ ス ラ イ ブ ラ リ ) 
  • コ ア ラ イ ブ ラ リ 
  • コ レ ク シ ョ ン の ラ イ ブ ラ リ 
  • リ フ レ ク シ ョ ン  : Javaで は 実 行 時 に も ク ラ ス や メ ソ ッ ド の 情 報 を も っ て お り 、 ク ラ ス 名 や メ ソ ッ ド 名 を 動 的 に 指 定 し て 呼 び 出 す こ と が で き る 。 
  • XML文 書 を 扱 う ラ イ ブ ラ リ 
  • セ キ ュ リ テ ィ 機 能 
  • 国 際 化 と 地 域 化 の ラ イ ブ ラ リ 
  • シ リ ア ラ イ ズ ( serialization、 オ ブ ジ ェ ク ト 直 列 化 ) : オ ブ ジ ェ ク ト の 参 照 を た ど っ て 関 連 す る オ ブ ジ ェ ク ト を ま と め て バ イ ト ス ト リ ー ム に す る こ と が で き る 。 そ の ス ト リ ー ム を フ ァ イ ル に 書 き 込 め ば 、 オ ブ ジ ェ ク ト の 状 態 を そ の ま ま 保 存 ( 永 続 化 ) で き る 。 
  • 統 合 ラ イ ブ ラ リ ( 外 部 シ ス テ ム と の 連 携 機 能 ) 
  • JDBC: デ ー タ ベ ー ス 接 続 の API
  • JNDI (Java Naming and Directory Interface) : ネ ー ミ ン グ サ ー ビ ス ・ デ ィ レ ク ト リ サ ー ビ ス へ の ア ク セ ス 
  • Java RMI( Remote Method Invocation、 遠 隔 メ ソ ッ ド 呼 び 出 し ) と  CORBA : 分 散 オ ブ ジ ェ ク ト 環 境 ( 分 散 処 理 環 境 ) 
  • 分 散 シ ス テ ム な ど で 、 別 の Java仮 想 マ シ ン に あ る オ ブ ジ ェ ク ト が お 互 い の メ ソ ッ ド を 呼 ぶ こ と が で き る 。 ソ ケ ッ ト 等 を 直 接 利 用 す る 通 信 の 低 水 準 な 実 装 を せ ず に 、 簡 単 に 高 水 準 な 実 装 を す る こ と が で き る 。 
  • グ ラ フ ィ カ ル ユ ー ザ イ ン タ フ ェ ー ス  (GUI) の ラ イ ブ ラ リ 
  • AWT( Abstract Window Toolkit、 抽 象 ウ ィ ン ド ウ ツ ー ル キ ッ ト ) 
  • Swing
  • Java 2D : 2次 元 グ ラ フ ィ ク ス や 画 像 ( JPEGな ど ) を 扱 う ラ イ ブ ラ リ 。 
  • Java Sound な ど 音 声 を 扱 う API群 ( 録 音 、 再 生 、 そ の 他 の 処 理 ) 
  • Javaア プ レ ッ ト 
  • jar (Java Archive) : Javaプ ロ グ ラ ム の 標 準 圧 縮 フ ァ イ ル の 圧 縮 ・ 展 開 機 能 。 拡 張 子 の 関 連 付 け を す れ ば 、 jarフ ァ イ ル を ダ ブ ル ク リ ッ ク す る こ と で 実 行 で き る 。 実 際 は  ZIP で 圧 縮 し て い る 。 
  • JNI (Java Native Interface) : Javaか ら Cな ど 他 の 言 語 で 実 装 さ れ た ネ イ テ ィ ブ な プ ロ グ ラ ム や ラ イ ブ ラ リ を 呼 び 出 す こ と が で き る 。 
  • Java仮 想 マ シ ン  (Java VM)
  • プ ラ グ イ ン 
  • Java Web Start
  • ラ イ セ ン ス 文 書 お よ び 各 種 の 文 書 
  • Java開 発 キ ッ ト 

    Java開 発 キ ッ ト  (JDK; Java Development Kit) は 、 オ ラ ク ル  / JCP を は じ め 複 数 の 団 体 や 企 業 に よ り 開 発 ・ 提 供 さ れ て い る 、 Javaプ ロ グ ラ ム の 開 発 を 支 援 す る 基 本 的 な ソ フ ト ウ ェ ア で あ る 。 Javaが 世 に 出 て 以 来 、 広 く 使 わ れ て き た Javaの 開 発 ツ ー ル で あ る 。 javac、 javadoc、 デ バ ッ ガ な ど を 含 む 多 く の 開 発 ツ ー ル が 含 ま れ て い る 。 ま た 、 完 全 な Java実 行 環 境  (JRE) を 同 梱 し て い る 。 

    Javaプ ロ グ ラ ム を 実 行 す る だ け で あ れ ば 、 Java実 行 環 境 が 導 入 さ れ て い れ ば 充 分 で 、 Java開 発 キ ッ ト を 導 入 す る 必 要 は 無 い 。 

    Java開 発 キ ッ ト  (JDK) の 呼 称 は 、 こ れ ま で に 何 度 か 変 更 さ れ て い る 。 

  • J2SE 1.2.2_004 ま で は  JDK と 呼 ん で い た 。 
  • J2SE 1.4 ま で は  Java 2 SDK と 呼 ん で い た 。 
  • J2SE 5.0 で は  再 び  JDK と 呼 ん で い る 。 
  • JREと JDKの 複 数 の 実 装 

    広 く 使 わ れ て い る プ ラ ッ ト フ ォ ー ム な ど に 対 し て は 、 複 数 の 団 体 や 企 業 が 独 自 に JREや JDKの 実 装 を 開 発 ・ 提 供 し て い る 。 独 自 の 最 適 化 技 術 を 適 用 し た り 、 特 定 の 用 途 に 特 化 し た 最 適 化 、 あ る い は 異 な る ラ イ セ ン ス を 採 用 す る な ど 、 そ れ ぞ れ 特 徴 が あ る 。 

  • Linux / IA-32プ ラ ッ ト フ ォ ー ム  : オ ラ ク ル 、 Blackdown、 IBM、 Kaffe.org、 GNUプ ロ ジ ェ ク ト な ど が JREや JDKを 実 装 ・ 提 供 し て い る 。 
  • Windows/IA-32プ ラ ッ ト フ ォ ー ム  : オ ラ ク ル 、 IBMな ど が JREや JDKを 実 装 ・ 提 供 し て い る 。 
  • オ ラ ク ル お よ び い く つ か の 団 体 が 、 オ ー プ ン ソ ー ス も し く は フ リ ー ソ フ ト ウ ェ ア の ラ イ セ ン ス で 利 用 で き る 、 Java仮 想 マ シ ン お よ び JRE 、 JDKの 実 装 を 開 発 し て い る 。 

    サ ン  / JCPは Java発 表 時 か ら Java仮 想 マ シ ン お よ び 標 準 ラ イ ブ ラ リ の 仕 様 を 公 開 し て お り 、 Java標 準 ク ラ ス ラ イ ブ ラ リ の ソ ー ス コ ー ド も JDKの 一 部 と し て 提 供 し て い た 。 し か し ソ ー ス コ ー ド の 改 変 は 下 記 の OpenJDKリ リ ー ス ま で ラ イ セ ン ス で 認 め て い な か っ た 。 そ の た め 、 サ ン の 実 装 と は 別 に 、 オ ー プ ン ソ ー ス も し く は フ リ ー ソ フ ト ウ ェ ア で か つ サ ン の 実 装 と 互 換 性 の あ る Java標 準 ク ラ ス ラ イ ブ ラ リ と Java仮 想 マ シ ン が 開 発 さ れ た 。 ま た 、 2006年 に サ ン は ラ イ セ ン ス の 方 針 を 変 更 し 近 い 将 来 オ ー プ ン ソ ー ス に す る 意 向 を 表 明 し 、 2007年 5月 8日 に Java SE 6を OpenJDKと し て  GNU General Public License に て リ リ ー ス し た 。 

    GNU Classpathは 、 2007年 3月 現 在 、 J2SE 1.4の ラ イ ブ ラ リ の 99%以 上 を 実 装 し 、 J2SE 5.0で は 95%以 上 を 実 装 し て い る 。  ま た OpenJDKに は IBMが 協 力 し て い る 。 

    GNUプ ロ ジ ェ ク ト が GNU Interpreter for Javaお よ び GNUコ ン パ イ ラ コ レ ク シ ョ ン  (GCC) の Java版 で あ る GNU Compiler for Javaを 出 し て い る 。 GNU Compiler for Javaは ahead-of-timeコ ン パ イ ラ を 搭 載 し て お り 、 Javaの ソ ー ス コ ー ド や バ イ ト コ ー ド を ネ イ テ ィ ブ マ シ ン コ ー ド ( Windowsの 場 合 は exeフ ァ イ ル ) に 変 換 で き る 。 ク ラ ス ラ イ ブ ラ リ は GNU Classpathを 使 っ て お り 、 1.4の ほ と ん ど の 部 分 が 対 応 し て お り 、 5.0の 部 分 も 実 装 が 進 ん で い る 。 

    Windows環 境 で は 、 GCJは MinGW (Minimalist GNU for Windows) も し く は Cygwinを 使 っ て 実 行 で き る 。 Cygwinの 場 合 は 、 対 象 が ラ イ セ ン ス が GPLの ソ フ ト ウ ェ ア に 限 ら れ る が 、 MinGWの 場 合 は 商 用 含 め 、 す べ て の ソ フ ト ウ ェ ア で 利 用 で き る 。 

    米 Excelsior社 が Excelsior JETと い う ahead-of-timeコ ン パ イ ラ を 販 売 し て い る 。 Java SE 用 に 書 か れ た プ ロ グ ラ ム を  Windowsの ネ イ テ ィ ブ マ シ ン コ ー ド で あ る exeフ ァ イ ル ( 実 行 フ ァ イ ル ) に 変 換 で き る 。 起 動 の 高 速 化 や ア プ リ ケ ー シ ョ ン の 難 読 化 を 実 現 す る 。 

    Windowsに て 、 配 布 、 実 行 し や す く す る た め に 、 Javaの jarフ ァ イ ル を exeフ ァ イ ル ( 実 行 フ ァ イ ル ) で ラ ッ ピ ン グ す る ツ ー ル が あ る 。 以 下 が 、 そ の 一 例 で あ る 。 

  • exewrap
  • JSmooth
  • Launch4j
  • NSIS – Java Launcher with automatic JRE installation
  • Java Web Startに は 、 適 切 な バ ー ジ ョ ン の JREを イ ン ス ト ー ル す る 機 能 が あ る が 、 そ も そ も 、 JREが イ ン ス ト ー ル さ れ て い な い 場 合 は 、 そ れ が 不 可 能 で あ る 。 JSmoothな ど で は 、 ラ ッ ピ ン グ さ れ た exeが 、 必 要 な JREが イ ン ス ト ー ル さ れ て い な い こ と を 検 出 し た 時 は 、 JREを ダ ウ ン ロ ー ド し て 、 イ ン ス ト ー ル す る 機 能 を 持 つ 。 ま た 、 上 記 3つ す べ て に お い て 、 JREを 同 梱 し て 、 同 梱 し た JREを 使 っ て ア プ リ ケ ー シ ョ ン を 実 行 す る 機 能 を 持 つ 。 

    ま た 、 通 常 の Javaア プ リ ケ ー シ ョ ン で は 、 Windowsの タ ス ク マ ネ ー ジ ャ に は 、 java.exeや javaw.exeと 表 示 さ れ 、 Javaの ア イ コ ン が 表 示 さ れ る が 、 自 前 の exeフ ァ イ ル 名 と 自 前 の ア イ コ ン を 表 示 す る 機 能 を 持 つ 。 

    さ ら に 、 上 記 の い く つ か は 、 ア プ リ ケ ー シ ョ ン の 2重 起 動 を 防 止 し た り 、 ア プ リ ケ ー シ ョ ン を Windowsサ ー ビ ス ( NTサ ー ビ ス ) 化 す る 機 能 を 持 つ 。 

    サ ン が 特 定 の OSに 特 化 し た 機 能 を 提 供 す る こ と を 嫌 が っ て い た た め 、 こ れ ら の 機 能 が 不 足 し て お り 、 そ れ を 補 う た め に 、 exeパ ッ ケ ー ジ 化 が 存 在 す る 。 

    Javaの エ デ ィ シ ョ ン 

    オ ラ ク ル と JCPは 、 さ ま ざ ま な 環 境 に 対 応 す る た め 、 3つ の Javaプ ラ ッ ト フ ォ ー ム の エ デ ィ シ ョ ン を 規 定 し て い る 。 Javaの APIの 多 く は 分 類 さ れ 各 エ デ ィ シ ョ ン に 割 り 当 て ら れ て い る 。 

    エ デ ィ シ ョ ン ご と に 実 行 環 境 と 開 発 環 境 が あ る 。 Java実 行 環 境  (JRE) は 、 Java仮 想 マ シ ン と 標 準 ラ イ ブ ラ リ の 実 装 か ら 構 成 さ れ る 。 JDK 1.1の バ ー ジ ョ ン ま で は 、 Java SEに 相 当 す る エ デ ィ シ ョ ン の み が 提 供 さ れ て い た 。 3つ の エ デ ィ シ ョ ン が 規 定 さ れ た の は 、 JDK 1.1の 次 の バ ー ジ ョ ン か ら で あ る 。 オ ラ ク ル  / JCPが 規 定 し て い る エ デ ィ シ ョ ン を 次 に 示 す 。 

    Java API に 含 ま れ る ク ラ ス は 、 パ ッ ケ ー ジ と 呼 ば れ る グ ル ー プ に 分 類 さ れ る 。 各 パ ッ ケ ー ジ は 、 相 互 に 関 連 す る イ ン タ フ ェ ー ス 、 ク ラ ス 、 例 外 を 含 む 。 Java の 各 エ デ ィ シ ョ ン で ど の よ う な 機 能 が 使 え る か に つ い て は 、 そ れ ぞ れ の エ デ ィ シ ョ ン の 項 目  (Java SE, Java EE, Java ME) を 参 照 の こ と 。 

    Javaの APIセ ッ ト は 、 オ ラ ク ル と 他 の 個 人 や 企 業 ・ 団 体 が 共 同 で 、 JCP (Java Community Process) プ ロ グ ラ ム に 沿 っ て 管 理 し て い る 。 こ の プ ロ セ ス に 参 加 す る 人 々 が 、 Java APIの 設 計 と 開 発 に 関 わ っ て い る 。 こ の プ ロ セ ス の あ り 方 に つ い て は 、 議 論 の 対 象 と な っ て い る 。 

    2004年 よ り 、 IBMと BEAシ ス テ ム ズ ( 後 に オ ラ ク ル が 買 収 ) は 、 Javaの 公 式 の オ ー プ ン ソ ー ス 実 装 を 作 る 動 き を 、 公 的 に 支 援 し て い る 。 2006年 ま で 、 サ ン は こ う し た 動 き に 対 し て は 拒 否 す る 立 場 を と っ て き た が 、 方 針 を 変 え て 自 社 と JCPに よ る Javaの 実 装 を オ ー プ ン ソ ー ス に す る 意 向 を 表 明 し 実 行 に 移 し 始 め て い る 。 

    拡 張 機 能 と 関 連 技 術 

    Javaの 標 準 機 能 に 対 す る 拡 張 機 能 は 、 多 く の 場 合 、 javax.*パ ッ ケ ー ジ に 属 す る 。 こ う し た 拡 張 機 能 は 、 Java SEの  Java開 発 キ ッ ト  (JDK) や  Java実 行 環 境  (JRE) に は 含 ま れ な い 。 Java の 拡 張 機 能 や 関 連 技 術 は 、 プ ロ グ ラ ミ ン グ 言 語 Javaと 密 接 に 連 携 す る 。 主 な Javaの 拡 張 機 能 と 関 連 技 術 を 示 す ( い く つ か の 拡 張 機 能 は 近 年 の Java SE標 準 ラ イ ブ ラ リ に 統 合 さ れ た ) 。 

  • Java EE( 従 来 の J2EE) (Java Platform, Enterprise Edition) – 大 規 模 で 分 散 化 さ れ た 企 業 シ ス テ ム も し く は イ ン タ ー ネ ッ ト サ ー バ 向 け の  Java の エ デ ィ シ ョ ン 
  • Java ME( 従 来 の J2ME) (Java Platform, Micro Edition) – 携 帯 機 器 な ど 資 源 が 限 ら れ て い る 環 境 向 け の  Java の エ デ ィ シ ョ ン 
  • JMF (Java Media Framework) – 音 声 ・ 動 画 な ど の マ ル チ メ デ ィ ア 向 け の API
  • JNDI (Java Naming and Directory Interface) – ネ ー ミ ン グ サ ー ビ ス ・ デ ィ レ ク ト リ サ ー ビ ス へ の ア ク セ ス 
  • JSML (Java Speech Markup Language) – 音 声 合 成 シ ス テ ム に テ キ ス ト の 注 釈 を 追 加 す る 
  • JDBC – デ ー タ ベ ー ス 接 続 の  API
  • 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 – 分 散 し た 記 憶 装 置 を 管 理 す る 技 術 
  • Java Card – ス マ ー ト カ ー ド な ど の 機 器 で 安 全 に Javaア プ リ ケ ー シ ョ ン の 実 行 を 実 現 す る 技 術 
  • JavaSpaces – 分 散 環 境 で Javaオ ブ ジ ェ ク ト の 送 受 信 ・ 永 続 化 な ど を 支 援 す る 技 術 
  • JML (Java Modeling Language) – 契 約 に よ る 設 計  (Design by contract) に 基 づ い た 開 発 を 支 援 す る 技 術 
  • JMI (Java Metadata Interface) – Javaの メ タ デ ー タ の 作 成 ・ ア ク セ ス ・ 検 索 ・ 送 受 信 に 関 す る 仕 様 
  • JMX (Java Management Extensions) – 分 散 環 境 に お け る 機 器 ・ ア プ リ ケ ー シ ョ ン ・ ネ ッ ト ワ ー ク サ ー ビ ス の 管 理  / 監 視 を 行 う 技 術 
  • JSP (JavaServer Pages) – Java EE に よ る ウ ェ ブ ア プ リ ケ ー シ ョ ン で  XHTML な ど の フ ァ イ ル に  Java の コ ー ド を 埋 め 込 み 、 動 的 に 文 書 を 生 成 す る 技 術 
  • JSF (JavaServer Faces) – Java EE に よ る ウ ェ ブ ア プ リ ケ ー シ ョ ン で ユ ー ザ イ ン タ フ ェ ー ス の 簡 易 な 開 発 を 支 援 す る 技 術 
  • JNI (Java Native Interface) – Java か ら 他 の 言 語 で 実 装 さ れ た ネ イ テ ィ ブ な プ ロ グ ラ ム や ラ イ ブ ラ リ を 呼 び 出 す た め の 仕 様 
  • JXTA – Peer to Peer (P2P) の 仮 想 ネ ッ ト ワ ー ク の た め の オ ー プ ン プ ロ ト コ ル 
  • Java 3D – 3次 元 グ ラ フ ィ ク ス プ ロ グ ラ ミ ン グ の た め の 高 水 準 な  API Java 3D
  • JOGL (Java OpenGL) – OpenGL を 使 う 3Dグ ラ フ ィ ク ス プ ロ グ ラ ミ ン グ の た め の 低 水 準 な  API
  • LWJGL (Light Weight Java Game Library) – ゲ ー ム を 開 発 す る た め の 低 水 準 な  API で 、 OpenGL、 OpenAL、 OpenCL お よ び 多 様 な 入 力 機 器 の 制 御 機 能 も 提 供 す る 
  • OSGi – サ ー ビ ス の 動 的 な 管 理 と 遠 隔 保 守 
  • JavaDesktop
  • Java技 術 の 標 準 化 

    現 在 、 Javaプ ラ ッ ト フ ォ ー ム の 将 来 の バ ー ジ ョ ン や 機 能 は 、 JCP (Java Community Process) の 標 準 化 プ ロ セ ス の も と で 開 発 さ れ て い る 。 JCPの メ ン バ に な る こ と で 、 Java技 術 の 将 来 の バ ー ジ ョ ン や 機 能 の 定 義 に 関 与 す る こ と が で き る 。 JCPに は 、 IBM、 ボ ー ラ ン ド 、 富 士 通 、 Apacheソ フ ト ウ ェ ア 財 団 、 ヒ ュ ー レ ッ ト ・ パ ッ カ ー ド  な ど 、 さ ま ざ ま な 個 人 、 団 体 、 企 業 が メ ン バ と し て 参 加 し て い る 。 

    JCPは 、 Javaプ ラ ッ ト フ ォ ー ム に 追 加 す る 仕 様 や 技 術 を 、 JSRs (Java Specification Requests) と い う 文 書 群 に 記 述 す る 。 

    プ ロ グ ラ ミ ン グ 言 語 Javaと Javaコ ア APIに 関 わ る い く つ か の  JSRs を 示 す 。 

  • JSR 14 Add Generic Types To The Java Programming Language (J2SE 5.0)
  • JSR 41 A Simple Assertion Facility (J2SE 1.4)
  • JSR 47 Logging API Specification(J2SE 1.4)
  • JSR 51 New I/O APIs for the Java Platform (J2SE 1.4)
  • JSR 59 J2SE Merlin Release Contents (J2SE 1.4)
  • JSR 121 Application Isolation API
  • JSR 133 Java Memory Model and Thread Specification Revision (J2SE 5.0)
  • JSR 166 Concurrency Utilities (J2SE 5.0)
  • JSR 175 A Metadata Facility for the Java Programming Language (J2SE 5.0)
  • JSR 176 J2SE 5.0 (Tiger) Release Contents (J2SE 5.0)
  • JSR 201 Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import (J2SE 5.0)
  • JSR 203 More New I/O APIs for the Java Platform (“NIO.2”) (Java SE 7)
  • JSR 204 Unicode Supplementary Character Support (J2SE 5.0) – Unicode 3.1 の サ ポ ー ト 
  • JSR 244 Java EE 5 Specification (Java EE 5)
  • JSR 270 Java SE 6 (“Mustang”) Release Contents (Java SE 6)
  • JSR 275 Physical Units/Quantities Support (Java SE) – JScienceを も と に し た リ フ ァ レ ン ス 実 装 
  • JSR 901 Java Language Specification (J2SE 5.0)
  • 開 発 ツ ー ル 

    Javaア プ リ ケ ー シ ョ ン を 開 発 す る た め の 開 発 ツ ー ル ( 開 発 用 ソ フ ト ウ ェ ア ) を い く つ か 示 す 。 次 に 示 す ツ ー ル 以 外 に も 、 数 多 く の ツ ー ル が 開 発 ・ 提 供 さ れ て い る 。 

  • Java開 発 キ ッ ト  (Java Development Kit, JDK) – Javaア プ リ ケ ー シ ョ ン の 基 本 的 な 開 発 環 境 。 
  • 統 合 開 発 環 境  (IDE) – ア プ リ ケ ー シ ョ ン を 開 発 で き る 多 機 能 な 開 発 環 境 。 後 述 す る 。 
  • Apache Ant – Javaア プ リ ケ ー シ ョ ン の ビ ル ド ツ ー ル 。 Apacheソ フ ト ウ ェ ア 財 団 の プ ロ ジ ェ ク ト に よ っ て 開 発 さ れ た 。 コ ン パ イ ル 、 バ ー ジ ョ ン 管 理 シ ス テ ム と の 連 携 、 jar、 javadoc生 成 、 フ ァ イ ル の コ ピ ー /移 動 /削 除 /変 換 な ど の 一 連 の 処 理 を 自 動 化 し て 効 率 的 に 実 行 す る 。 make と 同 種 の ツ ー ル で あ り 、 XMLフ ァ イ ル に ビ ル ド の 規 則 を 記 述 す る 。 Java 以 外 の 言 語 に よ る ア プ リ ケ ー シ ョ ン 開 発 や 、 ア プ リ ケ ー シ ョ ン 開 発 以 外 の 用 途 に も 使 う こ と が で き る 。 
  • Apache Maven – Javaア プ リ ケ ー シ ョ ン の プ ロ ジ ェ ク ト 管 理 ツ ー ル 。 Apacheソ フ ト ウ ェ ア 財 団 の プ ロ ジ ェ ク ト に よ っ て 開 発 さ れ た 。 
  • JUnit – Javaア プ リ ケ ー シ ョ ン の 単 体 テ ス ト フ レ ー ム ワ ー ク 。 単 体 テ ス ト を 自 動 化 す る 。 xUnitの 一 種 で あ る 。 テ ス ト 駆 動 開 発 を 支 援 す る 。 
  • 統 合 開 発 環 境 

    Javaプ ロ グ ラ ム を 開 発 で き る い く つ か の 統 合 開 発 環 境  (IDE) を 示 す 。 

  • NetBeans – オ ラ ク ル ( サ ン ・ マ イ ク ロ シ ス テ ム ズ ) を 中 心 に 開 発 さ れ て い る オ ー プ ン ソ ー ス の IDE。 Windows版 、 Linux版 。 Solaris版 、 Mac OS版 。 
  • NetBeans.org NetBeans.jp
  • WebSphere Studio – IBM。 Eclipse SDK の 上 位 版 と も い え る も の 。 WebSphere Application Server と 統 合 さ れ て い る 。 Windows版 、 Linux版 。 Solaris版 、 Mac OS版 。 
  • WebSphere開 発 ツ ー ル 
  • Eclipse SDK – Eclipse財 団 。 以 前 は IBMが 管 理 し て い た 。 Web Sphere Studioの オ ー プ ン ソ ー ス 版 と も い え る 。 Windows版 、 Linux版 、 Solaris版 、 Mac OS版 。 
  • eclipse.org( 英 語 )  EclipseWiki( 日 本 語 ) 
  • JBuilder – エ ン バ カ デ ロ ・ テ ク ノ ロ ジ ー ズ 。 Windows版 、 Linux版 。 Solaris版 、 Mac OS版 。 
  • JBuilder
  • Oracle JDeveloper – オ ラ ク ル 。 Oracle Application Serverと 統 合 さ れ て い る 。 Windows版 、 Linux版 。 Solaris版 。 2005年 6月 28日 に 無 料 化 し た 。 
  • JDeveloper
  • Oracle Workshop for WebLogic – オ ラ ク ル ( BEAシ ス テ ム ズ ) 。 WebLogic( 英 語 版 ) と 統 合 さ れ て い る 。 
  • Oracle Workshop for WebLogic
  • BlueJ – Deakin University( オ ー ス ト ラ リ ア ) と University of Kent( イ ン グ ラ ン ド ) 、 サ ン ・ マ イ ク ロ シ ス テ ム ズ が 共 同 で 開 発 し た フ リ ー ソ フ ト ウ ェ ア 、 Javaの 学 習 に 適 し た イ ン タ ラ ク テ ィ ブ な 統 合 開 発 環 境 。 
  • BlueJ
  • IntelliJ IDEA – JetBrainsが 開 発 販 売 し て い る 商 用 の 統 合 開 発 環 境 。 
  • IntelliJ IDEA
  • JCreator – Xinox Softwareが 開 発 販 売 し て い る 商 用 の 統 合 開 発 環 境 。 
  • JCreator
  • Xcode – ア ッ プ ル 。 macOSに 付 属 す る 統 合 開 発 環 境 。 
  • 批 判 

    Javaに 対 し て は 、 優 れ た 技 術 だ と 評 価 す る 人 々 が い る 一 方 で 、 批 判 も 少 な く な い 。 Javaは 、 ソ フ ト ウ ェ ア に 関 す る 複 雑 さ を 管 理 す る 問 題 に 対 し て 、 革 新 的 な 方 法 を 提 供 す る と い う 目 標 の 下 で 、 開 発 さ れ た 。 多 く の 人 々 は 、 Java技 術 は 、 こ の 期 待 に 対 し て 満 足 で き る 答 え を 提 供 し た と 評 価 し て い る 。 し か し Javaに も 欠 点 が 無 い わ け で は な い 。 Javaは 、 ど の よ う な プ ロ グ ラ ミ ン グ 作 法 に も 適 応 し て い る わ け で は な い 。 ま た 、 ど の よ う な 環 境 や 要 件 に も 普 遍 的 に 適 応 し て い る わ け で は な い 。 

    Javaに 対 す る 批 判 を 大 ま か に 記 述 す る 。 

    実 行 性 能 

    Javaの 初 期 の バ ー ジ ョ ン で は 、 Cや C++な ど の ネ イ テ ィ ブ に コ ン パ イ ル す る 言 語 と 比 べ て 、 と て も 実 行 が 遅 く メ モ リ の 消 費 が 激 し い と し て 、 批 判 さ れ る こ と が 多 か っ た が 、 近 年 の バ ー ジ ョ ン で は 改 善 さ れ て き て い る 。 近 年 の Java仮 想 マ シ ン で 採 用 し て い る ジ ャ ス ト イ ン タ イ ム コ ン パ イ ラ や 動 的 再 コ ン パ イ ル の 実 行 性 能 は 、 従 来 の 言 語 の ネ イ テ ィ ブ コ ン パ イ ラ と ほ ぼ 同 じ 水 準 の 実 行 性 能 か そ れ 以 上 を 達 成 す る こ と が あ る 。 こ れ は 頻 繁 に メ モ リ ア ク セ ス を 行 う プ ロ グ ラ ム に お い て Javaの ガ ベ ー ジ コ レ ク シ ョ ン の 技 術 が 、 Cの mallocや freeよ り も 高 い 性 能 を 発 揮 で き る こ と に よ る 。 こ う し た 事 情 か ら 、 Javaの 実 行 性 能 に つ い て は 、 議 論 の 対 象 と な っ て い る 。 

    ル ッ ク ア ン ド フ ィ ー ル 

    ル ッ ク ア ン ド フ ィ ー ル に 関 し て 、 Javaの Swingの ツ ー ル キ ッ ト を 使 っ た グ ラ フ ィ カ ル ユ ー ザ イ ン タ フ ェ ー ス  (GUI) を 備 え た ア プ リ ケ ー シ ョ ン の 既 定 の ル ッ ク ア ン ド フ ィ ー ル が 、 従 来 の ネ イ テ ィ ブ な ア プ リ ケ ー シ ョ ン と は 大 き く 異 な る た め 、 エ ン ド ユ ー ザ の 人 々 に と っ て Javaの GUIア プ リ ケ ー シ ョ ン は な じ み に く い と 批 判 さ れ る こ と が あ る 。 Javaで は プ ラ グ イ ン 可 能 な ル ッ ク ア ン ド フ ィ ー ル の 機 構 を 備 え て お り 、 サ ン は  Windows、 macOSお よ び Motifの 各 ル ッ ク ア ン ド フ ィ ー ル の ク ロ ー ン を 提 供 し た 。 そ の た め 、 Swingの 既 定 の ル ッ ク ア ン ド フ ィ ー ル で は な く 、 プ ラ ッ ト フ ォ ー ム ネ イ テ ィ ブ と 同 様 の ル ッ ク ア ン ド フ ィ ー ル で Javaの ア プ リ ケ ー シ ョ ン を 動 か す よ う 指 定 す る こ と が で き る 。 し か し エ ン ド ユ ー ザ に と っ て こ の 指 定 方 法 は 簡 単 で は な い と 指 摘 さ れ る こ と が あ る 。 

    言 語 設 計 

    言 語 の 設 計 ( デ ザ イ ン ) に 対 す る 批 判 を い く つ か の 側 面 か ら 述 べ る 。 

    Javaの 設 計 者 は 、 他 の プ ロ グ ラ ミ ン グ 言 語 で は 備 え て い る い く つ か の 機 能 を Javaか ら 排 除 し た 。 利 便 性 よ り 言 語 設 計 の 簡 潔 さ を 優 先 し た 結 果 だ が 、 こ う し た 設 計 上 の 判 断 に つ い て は 賛 否 が 分 か れ て い る 。 

  • 多 重 継 承 
  • 演 算 子 の オ ー バ ー ロ ー ド 
  • プ ロ パ テ ィ 
  • タ プ ル  (tuple)
  • ま た 、 Javaは 、 Smalltalkの よ う に 「 純 粋 な 」 オ ブ ジ ェ ク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 で は な い と し て 、 設 計 の 一 貫 性 の な さ を 批 判 さ れ る こ と が あ る 。 た と え ば Javaに は 、 プ リ ミ テ ィ ブ 型 と い う 、 ク ラ ス 型 ( 参 照 型 ) で は な い も の が あ る 。 Javaの 設 計 者 は 、 実 行 性 能 上 の 理 由 か ら 、 意 図 的 に プ リ ミ テ ィ ブ 型 を Javaに 導 入 し た 。 例 え ば 、 int型 な ど の 組 み 込 み 型 が プ リ ミ テ ィ ブ 型 に 相 当 す る 。 int型 の 値 は オ ブ ジ ェ ク ト で は な く 、 こ れ を ク ラ ス 型 の オ ブ ジ ェ ク ト と し て 扱 う に は 、 ラ ッ パ ー で あ る Integerク ラ ス 型 へ の 変 換 ( ボ ク シ ン グ ) が 必 要 に な る 。 J2SE 5.0以 降 で は オ ー ト ボ ク シ ン グ に よ り 、 プ リ ミ テ ィ ブ 型 と 、 そ れ に 対 応 す る ボ ッ ク ス ク ラ ス 型 の 間 の や り と り ( 変 数 へ の 代 入 や 値 の 参 照 な ど ) は 、 コ ン パ イ ラ に よ っ て 自 動 的 に 行 わ れ る よ う に な り 、 ソ ー ス コ ー ド 上 の 煩 雑 さ は 軽 減 さ れ た が 、 本 質 的 に 同 じ も の を 指 す は ず の デ ー タ 型 が 複 数 存 在 す る と い う 矛 盾 を 依 然 と し て 抱 え た ま ま で あ る 。 

    一 方 で 、 C++の よ う に 名 前 空 間 レ ベ ル の メ ソ ッ ド や フ ィ ー ル ド を 定 義 で き ず 、 必 ず ク ラ ス 定 義 が 必 要 で あ る こ と か ら 、 ク ラ ス を 定 義 す る 側 も 利 用 す る 側 も 記 述 量 が 肥 大 化 し が ち で あ る 。 J2SE 5.0 で は 、 メ ソ ッ ド と フ ィ ー ル ド の staticイ ン ポ ー ト を 行 え る よ う に な り 、 ク ラ ス 修 飾 な し で staticメ ン バ ー を 利 用 で き る よ う に な っ た 。 し か し staticイ ン ポ ー ト を 不 用 意 に 使 う と ソ ー ス コ ー ド を 判 読 困 難 に す る 可 能 性 が あ る 。 サ ン  / JCPは staticイ ン ポ ー ト を 適 切 に 使 用 す る ガ イ ド ラ イ ン を 合 わ せ て 公 開 し た 。 

    な お 、 C#は Delphiの 設 計 思 想 を 取 り 入 れ た 言 語 で あ り 、 登 場 当 初 か ら プ ロ パ テ ィ を サ ポ ー ト し て い る 。 演 算 子 オ ー バ ー ロ ー ド に つ い て も 、 C++よ り 限 定 的 で は あ る が サ ポ ー ト さ れ る 。 そ の ほ か 、 Javaで 問 題 視 さ れ て い た プ リ ミ テ ィ ブ 型 の 扱 い や ジ ェ ネ リ ク ス な ど に 対 し て 、 C#は 独 自 の 解 決 策 を 提 示 し て い る 。 

    ク ラ ス パ ス 

    一 般 に 、 Javaプ ロ グ ラ ム を 実 行 す る 際 、 -classpathオ プ シ ョ ン を 使 用 す る か 、 環 境 変 数 の ク ラ ス パ ス  (CLASSPATH) を 必 要 に 応 じ て 適 切 に 設 定 す る 必 要 が あ る 。 ク ラ ス パ ス を 指 定 す る と 、 既 定 の カ レ ン ト デ ィ レ ク ト リ と い う 設 定 が 上 書 き さ れ る 。 し た が っ て 、 ク ラ ス パ ス を 変 更 す る ソ フ ト を イ ン ス ト ー ル す る な ど 設 定 を 変 え ら れ た 場 合 は 、 Java実 行 環 境 は 正 し く Javaプ ロ グ ラ ム を 実 行 す る こ と が で き な く な る こ と が あ る 。 こ の た め  Javaを 使 い 始 め た 人 々 は 、 ク ラ ス パ ス に つ い て 戸 惑 う こ と が あ る 。 サ ン は -classpathオ プ シ ョ ン を 指 定 す る 方 法 を 推 奨 し て い た 。 

    移 植 性 ・ 互 換 性 

    Javaは 高 い 移 植 性 と 互 換 性 を 実 現 す る べ く 開 発 さ れ て お り 、 あ る 程 度 の 水 準 ま で 達 成 し て い る が 、 課 題 が 残 っ て い る 。 Javaの バ ー ジ ョ ン 間 の 下 位 互 換 性 ・ 上 位 互 換 性 が 完 全 で は な い こ と が 問 題 と し て 議 論 の 対 象 に な っ て い る 。 Javaで は 高 い 移 植 性 を 保 っ て い る た め 、 一 部 の プ ラ ッ ト フ ォ ー ム に し か な い 独 自 の 機 能 は Javaか ら は 使 え な い 。 

    Java認 定 資 格 

    サ ン ・ マ イ ク ロ シ ス テ ム ズ は 複 数 の Java認 定 資 格 を 主 催 し て い た 。 オ ラ ク ル に よ る 買 収 後 、 一 部 資 格 は 変 更 さ れ て い る 。 た だ し 、 買 収 前 に 以 下 の 資 格 を 取 得 し た 者 は 買 収 後 も 有 効 資 格 で あ る 。 

  • Sun認 定  Java ア ソ シ エ イ ツ  (SJC-A)
  • Sun認 定  Java プ ロ グ ラ マ  (SJC-P)
  • Sun認 定  Java デ ィ ベ ロ ッ パ  (SJC-D)
  • Sun認 定  Web コ ン ポ ー ネ ン ト デ ィ ベ ロ ッ パ  (SJC-WC)
  • Sun認 定 ビ ジ ネ ス コ ン ポ ー ネ ン ト デ ィ ベ ロ ッ パ  (SJC-BC)
  • Sun認 定  Java Web サ ー ビ ス デ ィ ベ ロ ッ パ  (SJC-WS)
  • Sun認 定 モ バ イ ル ア プ リ ケ ー シ ョ ン デ ィ ベ ロ ッ パ  (SJC-MA)
  • Sun認 定 エ ン タ ー プ ラ イ ズ ア ー キ テ ク ト  (SJC-EA)
  • 現 行 は オ ラ ク ル が 以 下 の Java認 定 資 格 を 主 催 し て い る 。 こ れ ら の う ち Oracle認 定 Java EE 6 Enterprise JavaBeansデ ィ ベ ロ ッ パ 以 外 の 試 験 は サ ン ・ マ イ ク ロ シ ス テ ム ズ が 主 催 し て い た 試 験 の 、 そ れ ぞ れ 略 号 の  “OCJ” を  “SJC” に 変 更 し た も の に 対 応 す る 位 置 付 け に あ る 。 

  • Oracle認 定 Javaア ソ シ エ イ ツ  (OCJ-A)
  • Oracle認 定 Javaプ ロ グ ラ マ  (OCJ-P)
  • Oracle認 定 Javaデ ィ ベ ロ ッ パ  (OCJ-D)
  • Oracle認 定 Webコ ン ポ ー ネ ン ト デ ィ ベ ロ ッ パ  (OCJ-WC)
  • Oracle認 定 ビ ジ ネ ス コ ン ポ ー ネ ン ト デ ィ ベ ロ ッ パ EE 5 (OCJ-BC)
  • Oracle認 定 Java Webサ ー ビ ス デ ィ ベ ロ ッ パ EE 5 (OCJ-WS)
  • Oracle認 定 モ バ イ ル ア プ リ ケ ー シ ョ ン デ ィ ベ ロ ッ パ  (OCJ-MA)
  • Oracle認 定 エ ン タ ー プ ラ イ ズ ア ー キ テ ク ト  (OCJ-EA)
  • Oracle認 定 Java EE 6 Enterprise JavaBeansデ ィ ベ ロ ッ パ 
  • 認 定 試 験 に 不 合 格 だ っ た 場 合 、 そ の 試 験 日 を 含 め て 14日 以 内 は 同 一 試 験 を 受 験 す る こ と が で き な い 。 

    ※ 参照元:https://ja.wikipedia.org



    /script/scriptreplace/インストール/入門/script入門/script配列/とは/dictionary/アップデート/配列/正規表現/ダウンロード/資格/更新/バージョン確認/最新/フレームワーク/バージョン/コンストラクタ/スクリプト/アプレット/配列初期化/文字列比較/ファイル読み込み/開発環境/プログラミング/ゲーム/コンパイル/演算子/乱数/メソッド/ラムダ式/継承/アンインストール/確認/意味/インターフェース/クラス/配列宣言/初心者/アノテーション/サーブレット/言語/環境変数/ファイル出力/実行/インスタンス/文字列/学習/とは/文字列分割/ジェネリクス/文字列切り出し/引数/リフレクション/文字列結合/日付フォーマット/文字列検索/改行/オーバーライド/スレッド/勉強/文字列置換/四捨五入/ランタイム/拡張for文/定数/参照渡し/パッケージ/コマンド/配列追加/キャスト/デザインパターン/dimension/アプリ/入力/インストールできない/練習問題/オブジェクト指向/現在時刻/文字コード/三項演算子/日付比較/diamondoperator/文字コード変換/例外/オーバーロード/日付/型変換/文字列数値変換/基礎/旧バージョン/dictionaryexample/構造体/関数/dialog/変数/絶対値/できること/ファイルコピー/随机数/dispose/リスト/マルチスレッド/コメント/コーディング規約/シルバー/エスケープ/ライブラリ/型/サンプルコード/フィールド/ブロンズ/本/標準入力/ソート/数値チェック/洗車/リファレンス/シンボルを見つけられません/バージョン一覧/動作確認/ファイル削除/プログラム/コレクション/の道/有効/画像表示/基本/配列要素数/アプリケーション/抽象クラス/連想配列/オブジェクト/環境/キーボード入力/参考書/時間計測/セキュリティ/正規表現エスケープ/数値文字列/データベース/練習/ファイル作成/二次元配列/使い方/コマンドプロンプト/割り算/メソッド呼び出し/インストール確認/シングルトン/ダウングレード/エラー/実行環境/正規表現チェック/可変長引数/オプション/アクセス修飾子/比較演算子/コメントアウト/設定/クラスパス/逆コンパイル/プロパティファイル/独学/命名規則/日付加算/無料/メモリ/カレンダー/電卓/zulu/ソースコード/データ型/ブラウザ/ビット演算/時間/本格入門/ファイル/システム日付/全角半角変換/勉強法/テキストファイル読み込み/メール送信/置換/試験/カプセル化/バッチ/多次元配列/グローバル変数/野球/エクリプス/最新確認/プリミティブ型/シリアライズ/変数宣言/暗号化/検定/プラグイン/