削除された内容 追加された内容
タグ: モバイル編集 モバイルウェブ編集
(同じ利用者による、間の1版が非表示)
1行目:
{{Otheruses|コンピューターのプログラミング言語およびプラットフォーム|その他|ジャバ}}
{{混同|JavaScript}}{{未検証|section=1|date=2019年3月}}{{出典の明記| date = 2019年3月}}
{{Infobox プログラミング言語
| fetchwikidata = ALL
34行目:
 
=== オブジェクト指向 ===
Javaの主要プログラミングパラダイムは[[クラスベース]]の[[オブジェクト指向プログラミング言語|オブジェクト指向]]である<ref>広辞苑 第六版</ref>。オブジェクト指向にある複数の実装スタイルの一つであるクラスベースは、手続き型プログラミングを土台にして実践できる比較的万人向けのものである。クラスベース・オブジェクト指向はその名の通り[[クラス (コンピュータ)|クラス]]の仕組みを中心にする。クラスは任意のフィールド(=メンバ変数)と任意のメソッド(=メンバ関数)をひとまとめにしたものである。クラスのデザインはフィールド構成を中心にして、それに関連したメソッドを備えるのが基本とされる。クラス定義内の要素はフィールド、メソッド、静的フィールド、静的メソッド、定数、内部クラスの六種類である。内部クラスはクラス内で定義される入れ子のクラスであり、コンポジションパターンの実装が主な用途になる。メソッド内部で任意のクラスを派生元にした無名クラスを定義する事もできる。これは[[プロトタイプベース]]・オブジェクト指向のスタイルを取り入れたもので、その場限りのクラスをコードに組み込める利便性の高い機能である。クラスの定義文には上述のフィールド名やメソッド文などの要素がずらずらと羅列される。Javaプログラムは、この1個以上のクラス定義文を組み合わせてから形成される。Javaクラスベース・オブジェクト指向の三つの要点とされる機構は[[カプセル化]]、[[継承 (プログラミング)|継承]]、[[ポリモーフィズム|多態性]]をサポートしている。
 
Javaのカプセル化は、クラス定義文に記述する四つのアクセス修飾子(''private''、''package''、''protected''、''public'')によってサポートされている。アクセス修飾子はフィールド定義メソッド定義のそれぞれ先頭と共に記されて可視性を決定する。''private''は同クラス内限定、''package''は同クラス内と同パッケージ内限定、''protected''は同クラス内と同パッケージ内と派生クラス内限定、''public''はどこからでもアクセス可能を意味する。パッケージはプログラム全体を任意に分割したソースファイルの1個以上のまとまりである。Javaのデフォルト可視性はOOPでは変則的なファイル単位の''package''なので隠蔽性よりも利便性が重視されている。
 
Javaの継承は、スーパークラスが一つに限られる単一継承をサポートしており、多重継承は除外されている。継承用のアクセス修飾子は無く''public''継承に統一されている。継承によって既存クラスの設計を引き継ぎつつ任意のフィールドとメソッドを追加した独自のクラスを作成できる。また既存とオリジナルの全てのクラスは、基礎APIで用意されているObjectクラスを基底継承最上位の基底クラスにするが強制されている。Objectクラスにはが持つロック機能が備えられているのでオブジェクト指向とマルチスレッド同期調和に一役買っていさせるものである。
 
Javaの多態性は、インターフェースと仮想関数とリフレクションと遅延バインディングでサポートされている。親クラスの''virtual''指定メソッドが仮想関数の抽象メソッドになり、子クラスの同名メソッドが仮想関数の実装メソッドになる。[[インタフェース (抽象型)|インターフェース]]は抽象メソッドだけで構成される純粋抽象クラスであり、''implements''構文によって任意の数だけクラスに実装指定できる。これはJavaの中でも比較的重視されておりクラスの動作局面を明確にする。リフレクションは動的ディスパッチ、メソッドミッシング、[[モンキーパッチ]]などの実装に活用できるが安易な使用は推奨されていない。遅延バインディングは''instanceof''演算子による実行時型チェックと、''(typename)''によるダウンキャストの二つである。ダウンキャスト失敗時は例外発生によってフォローされる。
 
Javaの多態性は、インターフェースと仮想関数を中心にしてサポートされている。親クラスの定義文で''virtual''指定されたメソドが仮想関数を表す抽象メソッドになり、その子クラスの定義文で処理内容を記述された同名のメソッドが仮想関数のプロセスを表す実装メソッドになる。Javaは強い[[静的型付け]]と共に安全な[[動的型付け]]も採用しており、''instanceof''演算子による型審査と、''(typename)''によるダウンキャストの二つがそれにあたる。ダウンキャスト失敗時は例外発生によってフォローされる。両者とも実行時決定でありデータの遅延バインディングをサポートしている。Javaの中でも比較的重視されている[[インタフェース (抽象型)|インターフェース]]は抽象メソッドだけで構成される純粋抽象クラスであり、クラス定義文の''implements''によって任意の数だけ実装指定できる。インターフェースは各クラスの様々な動作局面表現を促して設計を明確にする。Javaには[[リフレクション (情報工学)|リフレクション]]も導入されている。これはクラスの構造内容を操作できる機能であり、Javaの理念である堅牢性とセキュリティを壊しかねない危うさを伴うが、[[分散コンピューティング]]の発展などを視野に入れたJavaテクノロジの拡張に不可欠とされて専用APIが用意された。リフレクションはメッセージベース・オブジェクト指向のスタイルに近い柔軟な多態性の動的ディスパッチを実装できる他、Javaプログラムの為のメタ的なモニタリングツールおよびフレームワークの構築などが主な用途になる。
=== プラットフォーム非依存 ===
[[プラットフォーム (コンピューティング)|プラットフォーム]]非依存とは、Javaプログラムが特定のハードウェアおよびオペレーティングシステムの機能に依存する事なく、Java実行環境が導入されたあらゆるコンピューター環境上において共通した動作を見せる事を意味する。”''Write once, run anywhere''”(一度プログラムを書いてしまえば、どのコンピューターでも動くよ)がそのスローガンとされていた。Javaのプラットフォーム非依存性は次のようにして実現されている。
84 ⟶ 85行目:
'''家電向けプロジェクトの立ち上げ(1990年12月)'''
[[ファイル:James Gosling 2008.jpg|サムネイル|181x181ピクセル|ジェームズ・ゴスリン]]
Javaの歴史は、1990年12月に[[サン・マイクロシステムズ]]社が、次世代の家電製品が内蔵するマイクロコントローラ向けのプログラミング言語を開発するステルス・プロジェクトを立ち上げた事から始まる。サン社はこの分野が重要市場になると予測していた。サン社のエンジニアである[[ジェームズ・ゴスリン]]とマイク・シェルダンの参加により、現実味を帯びたプロジェクトの名称は正式に「グリーンプロジェクト」と定められた。彼らは、カリフォルニア州[[メンローパーク (カリフォルニア州)|メンローパーク]]市サンドヒルロードにある小さなオフィスで開発を始めた。
 
'''Oak言語とGreen OSの誕生(1991年)'''
96 ⟶ 97行目:
'''ワールドワイドウェブ参入(1994年6月~1994年9月)'''
 
1994年6月、サン社技術部長ジョン・ゲージが[[ジェームズ・ゴスリン]]、[[ビル・ジョイ]]、[[パトリック・ノートン]]、[[エリック・シュミット]]ら集めて、延べ3日に渡るブレインストーミングが行われた。ここで彼らは[[World Wide Web|ワールドワイドウェブ]]をプロジェクトの本命に据える事で一致した。革新的な[[ウェブブラウザ]]である「[[NCSA Mosaic]]」の登場に触発された彼らは、インターネットの世界がケーブルテレビのそれを超えたインタラクティブな媒体に発展しつつある事を認識していた。パトリック・ノートンはOakテクノロジをベースにした「WebRunner」という小さなウェブブラウザを開発した。Oakによる小さなアクティブプログラムが埋め込まれたウェブページにアクセスすると、WebRunner上でマウス操作に連動するインタラクティブなアニメーションが表示された。
 
'''Javaの始動(1994年10月~1996年1月)'''
102 ⟶ 103行目:
1994年秋までにグリーンチームは、Oakを'''Java'''に、WebRunnerを「[[HotJava]]」に改称した。その理由はOakがすでにビデオカードアダプタ製造会社の登録商標になっていたからだった。この命名は一部のチームメンバーがよく出入りしていた近くのコーヒーショップで決定されたという。Javaの由来は不明とされているが、ロゴが示している通りコーヒーに因んでいるのは明らかである。ジャワ島はコーヒー豆の名産地であり、豆(''Bean'')はJavaテクノロジ内でコンポーネントを指す用語にされている。
 
1994年10月、JavaランタイムとHotJavaブラウザがサン社幹部社員の前でデモンストレーションされ、α版が社内公開された。1995年5月23日のSunワールドカンファレンスで、JavaランタイムとHotJavaブラウザが社外初披露された。ここでは[[Javaアプレット]]の技術がセールスポイント的にアピールされた。同時に[[ネットスケープコミュニケーションズ|ネットスケープ社]]が「[[Netscape Navigator (ネットスケープコミュニケーションズ)|Netscape Navigator]]」ブラウザへもこのアプレット機能を配備するとアナウンスして業界の注目を集めた。1995年秋にβ版が社外公開された。1996年1月9日にサン社は正式にJavaソフトウェア部門を立ち上げた。その2週間後の1月23日に最初の公開バージョンである「JDK 1.0」が市場リリースされた。
 
=== バージョン履歴 ===
{{main|Javaバージョン履歴}}1996年1月の初リリースからバージョン更新はおおむね数年おきに行われていたが <ref>{{Cite web|url=http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|title=JAVASOFT SHIPS JAVA 1.0|accessdate=2008-02-05|archiveurl=https://web.archive.org/web/20070310235103/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|archivedate=March 10, 2007}}</ref>、2017年9月の「Java SE 9」から一定の機能蓄積を待たずに半年単位で更新する定期リリースに変更された。従来の長期間サポート(LTS)も廃止され、原則的に次回バージョンまでの半年間サポートになった。なお2018年9月の「Java SE 11」はLTS宣言されている<ref>{{Cite web|url=https://blogs.oracle.com/java-platform-group/introducing-java-se-11|title=Introducing Java SE 11|first=Sharat|author=Chander|website=oracle.com|accessdate=September 26, 2018|archiveurl=https://web.archive.org/web/20180926093144/https://blogs.oracle.com/java-platform-group/introducing-java-se-11|archivedate=September 26, 2018}}</ref>。LTS宣言されたものは安定版、されてないものは機能先取り版といった位置付けである。現行の推奨安定バージョンは「Java SE 11」と「Java SE 8」である。運用期間の長さと普及度から「Java SE 8」の方が代表的バージョンと見なされている。
{{main|Javaバージョン履歴}}2019年3月現在、Java 8がサポートされており、Java 8と11の両方が長期間サポート(LTS)バージョンとしてサポートされている。Javaの主なリリースバージョンとリリース日は以下である。
 
{| class="wikitable" style="margin-left:9px;"
|-
! バージョン
! リリース日
! 無料公開アップデート期限<ref name="auto9">{{Cite web|url=https://www.oracle.com/technetwork/java/java-se-support-roadmap.html|title=Oracle Java SE Support Roadmap|website=www.oracle.com}}</ref><ref>{{Cite web|url=https://adoptopenjdk.net/support.html#roadmap|title=Support &#124; AdoptOpenJDK|website=adoptopenjdk.net}}</ref>
! 延長サポート期限
|-
| {{Version|o|JDK Beta}} || 1995 || {{dunno}} || {{dunno}}
|-
| {{Version|o|JDK 1.0}} || 1996年1月 ||{{dunno}} || {{dunno}}
|-
| {{Version|o|JDK 1.1}} || 1997年2月 ||{{dunno}} || {{dunno}}
|-
| {{Version|o|J2SE 1.2}} || 1998年12月 ||{{dunno}} || {{dunno}}
|-
| {{Version|o|J2SE 1.3}} || 2000年5月 ||{{dunno}} || {{dunno}}
|-
| {{Version|o|J2SE 1.4}} || 2002年2月 || 2008年10月 ||2013年2月
|-
| {{Version|o|J2SE 5.0}} || 2004年9月 || 2009年11月 ||2015年4月
|-
| {{Version|o|Java SE 6}} || {{date|2006年12月 }}|| 2013年4月 || 2018年12月
|-
| {{Version|o|Java SE 7}} || 2011年7月 ||{{date|2015年4月}}|| 2022年7月
|-
| {{Version|co|Java SE 8 (LTS)}} || 2014年3月 ||Oracle(商用)   2019年1月まで
Oracle(個人用)  2020年12月まで
 
AdoptOpenJDK  2026年5月以降も予定
* JDK 1.0(1996年1月23日) <ref>{{Cite web|url=http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|title=JAVASOFT SHIPS JAVA 1.0|accessdate=2008-02-05|archiveurl=https://web.archive.org/web/20070310235103/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml|archivedate=March 10, 2007}}</ref>
* JDK 1.1(1996年2月19日)
* J2SE 1.2(1998年12月8日)
* J2SE 1.3(2000年5月8日)
* J2SE 1.4(2002年2月6日)
* J2SE 5.0(2004年9月30日)
* Java SE 6(2006年12月11日)
* Java SE 7(2011年7月28日)
* Java SE 8(2014年3月18日)
* Java SE 9(2017年9月21日)
* Java SE 10(2018年3月20日)
* Java SE 11(2018年9月25日) <ref>{{Cite web|url=https://blogs.oracle.com/java-platform-group/introducing-java-se-11|title=Introducing Java SE 11|first=Sharat|author=Chander|website=oracle.com|accessdate=September 26, 2018|archiveurl=https://web.archive.org/web/20180926093144/https://blogs.oracle.com/java-platform-group/introducing-java-se-11|archivedate=September 26, 2018}}</ref>
* Java SE 12(2019年3月19日)
* Java SE 13(2019年9月17日)
* Java SE 14(2020年3月17日)
 
Amazon Corretto 2023年6月までは保証<ref name="Corretto2018">{{cite web
| title = Introducing Amazon Corretto, a No-Cost Distribution of OpenJDK with Long-Term Support
| last = Gupta
| first = Arun
| url = https://aws.amazon.com/blogs/opensource/amazon-corretto-no-cost-distribution-openjdk-long-term-support/
| date = 2018-11-14
| accessdate = 2019-12-17}}</ref>
| 2030年12月
|-
| {{Version|o|Java SE 9}} || 2017年9月 || OpenJDK 2018年3月 || {{n/a}}
|-
| {{Version|o|Java SE 10}} || 2018年3月 || OpenJDK 2018年9月 || {{n/a}}
|-
| {{Version|co|Java SE 11 (LTS)}} || 2018年9月 || Amazon Corretto 2024年8月以降も予定<ref name="Corretto2018"></ref>
AdoptOpenJDK  2024年10月まで
| 2026年9月
|-
| {{Version|o|Java SE 12}} || 2019年3月 || OpenJDK 2019年9月 || {{n/a}}
|-
| {{Version|o|Java SE 13}} || 2019年9月 || OpenJDK 2020年3月 || {{n/a}}
|-
| {{Version|c|Java SE 14}} || 2020年3月 || OpenJDK 2020年9月 || {{n/a}}
|-
| {{Version|p|Java SE 15}} || 2020年9月 || OpenJDK 2021年3月 || {{n/a}}
|-
| {{Version|p|Java SE 16}} || 2021年3月 || OpenJDK 2021年9月 || {{n/a}}
|-
| {{Version|p|Java SE 17 (LTS)}} || 2021年9月 || {{TBA}} || {{TBA}}
|-
| colspan="4" | <small>{{Version|l|show=111101}}</small>
|}
== Javaプログラミング例 ==
{{main|Javaの文法}}