Java(プログラミング言語)
Javaはあるハイレベル、クラスベース、オブジェクト指向 プログラミング言語、いくつかの実装として持つように設計された依存関係を可能な限り。これは、アプリケーション開発者が一度書けばどこでも実行できるようにすることを目的とした汎用プログラミング言語(WORA)[16]です。つまり、コンパイルされたJavaコードは、再コンパイルせずにJavaをサポートするすべてのプラットフォームで実行できます。[17] Javaアプリケーションは通常、基盤となるものに関係なく、任意のJava仮想マシン(JVM)で実行できるバイトコードにコンパイルされます。 コンピュータアーキテクチャ。Javaの構文はCおよびC ++に似ていますが、どちらよりも低レベルの機能が少なくなっています。Javaランタイムは、従来のコンパイル言語では通常利用できない動的機能(リフレクションやランタイムコードの変更など)を提供します。2019年の時点で、Javaはほとんどの一つであった、使用中の一般的なプログラミング言語に応じてGitHubに、[18] [19]特にためのクライアントサーバのWebアプリケーション900万開発者に報告して、。[20][更新]
パラダイム | マルチパラダイム:ジェネリック、オブジェクト指向(クラスベース)、命令型、リフレクティブ |
---|---|
によって設計された | ジェームズ・ゴスリング |
開発者 | オラクル株式会社 |
初登場 | 1995年5月23日 | [1]
安定したリリース | Java SE 16.0.1 / 2021年4月20日 |
規律の入力 | 静的、強力、安全、主格、マニフェスト |
ファイル名拡張子 | .java、.class、.jar |
ウェブサイト | oracle .com / java / |
に影響を受けた | |
CLU、[2] Simula67、[2] LISP、[2] SmallTalk、[2] Ada 83、C ++、[3] C#、[4] Eiffel、[5] Mesa、[6] Modula-3、[7] Oberon、[8] Objective-C、[9] UCSD Pascal、[10] [11] Object Pascal [12] | |
影響を受け | |
Ada 2005、BeanShell、C#、Chapel、[13] Clojure、ECMAScript、Fantom、Gambas、[14] Groovy、Hack、[15] Haxe、J#、Kotlin、PHP、Python、Scala、Seed7、Vala、JavaScript | |
|
Javaはもともとによって開発されたジェームズ・ゴスリンでSun Microsystemsの(以降、Oracleによって買収された)とSun Microsystems社のコアコンポーネントとして1995年にリリースされたJavaプラットフォーム。オリジナルおよびリファレンス実装のJavaコンパイラ、仮想マシン、およびクラスライブラリは、元々、独自のライセンスの下でSunによってリリースされました。2007年5月の時点で、Java Community Processの仕様に準拠して、SunはGNU General PublicLicenseの下でほとんどのJavaテクノロジーを再ライセンスしていました。オラクルは独自のHotSpotJava仮想マシンを提供していますが、公式のリファレンス実装はOpenJDK JVMです。これは、無料のオープンソースソフトウェアであり、ほとんどの開発者が使用し、ほとんどすべてのLinuxディストリビューションのデフォルトJVMです。
2021年3月の時点では[更新]、最新バージョンがされたJava 16 Javaの11で、現在サポートされている長期的なサポート9月25日にリリースさ(LTS)版は、2018年Oracleは、のために最後のゼロコストのパブリックアップデートをリリースし、レガシーバージョンのJava 8 2019年1月の商用利用のためのLTS。ただし、それ以外の場合は、個人使用のための公開アップデートでJava8を無期限にサポートします。他のベンダーは、OpenJDK 8および11のゼロコストビルドを提供し始めており、セキュリティやその他のアップグレードをまだ受けています。
Oracle(およびその他)は、未解決のセキュリティ問題による重大なリスクがあるため、古いバージョンのJavaをアンインストールすることを強くお勧めします。[21] Java 9、10、12、13、14、および15はサポートされなくなったため、オラクルはユーザーに最新バージョン(現在はJava 16)またはLTSリリースにすぐに移行することをお勧めします。
歴史
James Gosling、Mike Sheridan、およびPatrick Naughtonは、1991年6月にJava言語プロジェクトを開始しました。[22] Javaはもともとインタラクティブテレビ用に設計されましたが、当時のデジタルケーブルテレビ業界にはあまりにも進んでいました。[23]言語が最初に呼ばれたオークの後にオークのGosling氏のオフィスの外に立っていた木。その後プロジェクトは、名前で行きグリーン、最終的に改名されたJavaのから、Javaのコーヒーからコーヒーの種類インドネシア。[24] Goslingは、システムおよびアプリケーションのプログラマーがよく知っているC / C ++スタイルの構文を使用してJavaを設計しました。[25]
サンマイクロシステムズは1996年にJava1.0として最初のパブリック実装をリリースしました。[26] Write Once、Run Anywhere(WORA)機能を約束し、人気のあるプラットフォームで無料のランタイムを提供します。かなり安全で、構成可能なセキュリティを備えているため、ネットワークおよびファイルへのアクセスを制限できます。主要なWebブラウザはすぐにWebページ内でJavaアプレットを実行する機能を組み込み、Javaはすぐに普及しました。Java 1.0コンパイラは、Java 1.0言語仕様に厳密に準拠するように、Arthur vanHoffによってJavaで書き直されました。[27] Java 2(1998年12月から1999年にJ2SE 1.2として最初にリリースされた)の出現により、新しいバージョンでは、さまざまなタイプのプラットフォーム用に複数の構成が構築されました。J2EEには、通常サーバー環境で実行されるエンタープライズアプリケーション用のテクノロジーとAPIが含まれていましたが、J2MEにはモバイルアプリケーション用に最適化されたAPIが搭載されていました。デスクトップバージョンはJ2SEに名前が変更されました。2006年、マーケティングの目的で、Sunは新しいJ2バージョンの名前をそれぞれJava EE、Java ME、およびJavaSEに変更しました。
1997年、SunMicrosystemsはISO / IEC JTC 1標準化団体にアプローチし、後にEcma InternationalにJavaを正式化するように働きかけましたが、すぐにプロセスから撤退しました。[28] [29] [30] Javaは事実上の標準であり、Java CommunityProcessによって制御されています。[31]かつて、Sunは、プロプライエタリソフトウェアのステータスにもかかわらず、ほとんどのJava実装を無料で利用できるようにしました。Sunは、Java Enterprise Systemなどの特殊な製品のライセンスを販売することで、Javaから収益を上げました。
2006年11月13日、Sunは、GNU General Public License(GPL)の条件に基づいて、Java仮想マシン(JVM)の多くを無料のオープンソースソフトウェア(FOSS)としてリリースしました。2007年5月8日、Sunはプロセスを終了し、Sunが著作権を保有していないコードのごく一部を除いて、JVMのすべてのコアコードをフリーソフトウェア/オープンソースの配布条件で利用できるようにしました。[32]
Sunの副社長であるRichGreenは、Javaに関するSunの理想的な役割は伝道者としてであると述べました。[33]以下のオラクル・コーポレーション2009-10におけるSun Microsystems、Inc.のの買収は、Oracleが参加し、透明性のコミュニティを育成する執拗なコミットメントとJava技術のスチュワードとしての地位を説明しています。[34]これは、Android SDK内でJavaを使用したとしてOracleがGoogleに対して訴訟を起こすことを妨げませんでした(Androidのセクションを参照)。
2010年4月2日、JamesGoslingはOracleを辞任しました。[35]
2016年1月、オラクルは、JDK9に基づくJavaランタイム環境がブラウザプラグインを廃止することを発表しました。[36]
Javaソフトウェアは、ラップトップからデータセンター、ゲーム機から科学的なスーパーコンピューターまで、あらゆるもので実行されます。[37]
原則
Java言語の作成には、次の5つの主要な目標がありました。[17]
- シンプルで、オブジェクト指向で、なじみのあるものでなければなりません。
- 堅牢で安全でなければなりません。
- アーキテクチャに依存せず、ポータブルである必要があります。
- 高性能で実行する必要があります。
- 解釈され、スレッド化され、動的である必要があります。
バージョン
2020年9月現在[更新]、Java 8および11はロングタームサポート(LTS)バージョンとしてサポートされており、それ以降の1つの非LTSバージョンがサポートされています。[38] Javaのメジャーリリースバージョンとそのリリース日:
バージョン | 日付 |
---|---|
JDKベータ版 | 1995年 |
JDK1.0 | 1996年1月23日[39] |
JDK 1.1 | 1997年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日[40] |
Java SE 12 | 2019年3月19日 |
Java SE 13 | 2019年9月17日 |
Java SE 14 | 2020年3月17日 |
Java SE 15 | 2020年9月15日[41] |
Java SE 16 | 2021年3月16日 |
エディション
Sunは、さまざまなアプリケーション環境を対象とするJavaの4つのエディションを定義およびサポートし、APIの多くをセグメント化して、それらがプラットフォームの1つに属するようにしました。プラットフォームは次のとおりです。
- スマートカード用のJavaCard。[42]
- Java Platform、Micro Edition(Java ME)–リソースが限られている環境を対象としています。[43]
- Java Platform、Standard Edition(Java SE)–ワークステーション環境を対象としています。[44]
- Java Platform、Enterprise Edition(Java EE)–大規模な分散型エンタープライズまたはインターネット環境を対象としています。[45]
Java APIのクラスは、パッケージと呼ばれる個別のグループに編成されています。各パッケージには、関連するインターフェイス、クラス、サブパッケージ、および例外のセットが含まれています。
Sunは、Personal Javaと呼ばれるエディションも提供しました。これは、後の標準ベースのJavaME構成とプロファイルのペアに取って代わられました。
実行システム
JavaJVMとバイトコード
Javaの設計目標の1つは移植性です。つまり、Javaプラットフォーム用に作成されたプログラムは、適切なランタイムサポートを備えたハードウェアとオペレーティングシステムの任意の組み合わせで同様に実行する必要があります。これは、Java言語コードを、アーキテクチャ固有のマシンコードに直接ではなく、Javaバイトコードと呼ばれる中間表現にコンパイルすることで実現されます。Javaバイトコード命令はマシンコードに類似していますが、ホストハードウェア用に特別に作成された仮想マシン(VM)によって実行されることを目的としています。エンドユーザーは通常、スタンドアロンJavaアプリケーションの場合はマシンに、Javaアプレットの場合はWebブラウザにインストールされたJavaランタイム環境(JRE)を使用します。
標準ライブラリは、グラフィックス、スレッド化、ネットワークなどのホスト固有の機能にアクセスするための一般的な方法を提供します。
ユニバーサルバイトコードを使用すると、移植が簡単になります。ただし、バイトコードをマシン命令に解釈するオーバーヘッドにより、解釈されたプログラムはほとんどの場合、ネイティブの実行可能ファイルよりも実行速度が遅くなります。実行時にバイトコードをマシンコードにコンパイルするジャストインタイム(JIT)コンパイラは、初期の段階から導入されました。Java自体はプラットフォームに依存せず、Java仮想マシン(JVM)によって実行される特定のプラットフォームに適合します。JVMは、Javaバイトコードをプラットフォームの機械語に変換します。[46]
パフォーマンス
Javaで記述されたプログラムは、C ++で記述されたプログラムよりも遅く、より多くのメモリを必要とするという評判があります。[47] [48]ただし、Javaプログラムの実行速度は1997/1998年にJava 1.1用のジャストインタイムコンパイルが導入されたことで大幅に向上しました。[49]より優れたコード分析をサポートする言語機能(内部クラスなど)が追加されました。 、StringBuilderクラス、オプションのアサーションなど)、およびJava仮想マシンでの最適化(2000年にHotSpotがSunのデフォルトJVMになるなど)。Java1.5では、java.util.concurrentパッケージを追加することでパフォーマンスが向上しました。ConcurrentMapsおよびその他のマルチコアコレクションのロックフリー実装を含み、Java1.6でさらに改善されました。
非JVM
一部のプラットフォームは、Javaの直接ハードウェアサポートを提供します。ソフトウェアJava仮想マシンの代わりにハードウェアでJavaバイトコードを実行できるマイクロコントローラーがあり[50]、一部のARMベースのプロセッサーはJazelleオプションを介してJavaバイトコードを実行するためのハードウェアサポートを備えていますが、現在の実装ではほとんどサポートが廃止されていますARMの。
自動メモリ管理
Javaは、自動ガベージコレクタを使用して、オブジェクトのライフサイクルでメモリを管理します。プログラマーはオブジェクトがいつ作成されるかを決定し、Javaランタイムは、オブジェクトが使用されなくなったときにメモリを回復する責任があります。オブジェクトへの参照がなくなると、到達不能なメモリはガベージコレクタによって自動的に解放される資格があります。プログラマーのコードが不要になったオブジェクトへの参照を保持している場合、通常は不要になったオブジェクトがまだ使用中のコンテナーに格納されている場合、メモリリークと同様のことが発生する可能性があります。存在しないオブジェクトのメソッドが呼び出されると、nullポインタ例外がスローされます。[51] [52]
Javaの自動メモリ管理モデルの背後にある考え方の1つは、プログラマーが手動のメモリ管理を実行しなければならないという負担を免れることができるということです。一部の言語では、オブジェクトを作成するためのメモリは、スタックに暗黙的に割り当てられるか、ヒープから明示的に割り当てられ、割り当てが解除されます。後者の場合、メモリを管理する責任はプログラマにあります。プログラムがオブジェクトの割り当てを解除しない場合、メモリリークが発生します。プログラムがすでに割り当て解除されているメモリにアクセスまたは割り当て解除しようとすると、結果は未定義で予測が難しく、プログラムが不安定になったりクラッシュしたりする可能性があります。これは、スマートポインターを使用することで部分的に修正できますが、これらはオーバーヘッドと複雑さを追加します。ガベージコレクションは、論理メモリリーク、つまりメモリがまだ参照されているが使用されていないリークを防止しないことに注意してください。
ガベージコレクションはいつでも発生する可能性があります。理想的には、プログラムがアイドル状態のときに発生します。新しいオブジェクトを割り当てるのに十分な空きメモリがヒープにない場合にトリガーされることが保証されています。これにより、プログラムが一時的に停止する可能性があります。Javaでは明示的なメモリ管理はできません。
Javaは、オブジェクトアドレスを算術的に操作できる(オフセットの加算または減算など)C / C ++スタイルのポインター算術をサポートしていません。これにより、ガベージコレクターは参照されるオブジェクトを再配置し、型の安全性とセキュリティを確保できます。
C ++やその他のオブジェクト指向言語と同様に、Javaのプリミティブデータ型の変数は、非プリミティブデータに一般的に当てはまるように、ヒープではなくフィールド(オブジェクトの場合)またはスタック(メソッドの場合)に直接格納されます。タイプ(ただし、エスケープ分析を参照)。これは、パフォーマンス上の理由から、Javaの設計者による意識的な決定でした。
Javaには、複数のタイプのガベージコレクタが含まれています。Java 9以降、HotSpotはデフォルトとしてガベージファーストガベージコレクター(G1GC)を使用します。[53]ただし、ヒープの管理に使用できるガベージコレクターは他にもいくつかあります。Javaのほとんどのアプリケーションでは、G1GCで十分です。以前は、並列ガベージコレクターがJava8で使用されていました。
メモリ管理の問題を解決しても、特に例外が存在する場合に、ネットワークやデータベース接続、ファイルハンドルなど、他の種類のリソースを適切に処理する負担からプログラマーを解放することはできません。
構文
Javaの構文は、C ++とCの影響を大きく受けます。構造化、ジェネリック、およびオブジェクト指向プログラミングの構文を組み合わせたC ++とは異なり、Javaはほぼ排他的にオブジェクト指向言語として構築されました。[17]すべてのコードはクラス内に記述され、パフォーマンス上の理由からオブジェクトではないプリミティブデータ型(整数、浮動小数点数、ブール値、文字)を除いて、すべてのデータ項目はオブジェクトです。 。Javaは、C ++のいくつかの一般的な側面(printf
メソッドなど)を再利用します。
C ++とは異なり、Javaは演算子のオーバーロード[54]やクラスの多重継承をサポートしていませんが、インターフェースでは多重継承がサポートされています。[55]
Javaは、C ++と同様のコメントを使用します。コメントの三つの異なるスタイルがあります:2つのスラッシュの付いた単一のラインのスタイル(//
)、複数の線スタイルはで開く/*
とで閉じ*/
、そしてJavadocのコメントスタイルがで開かれた/**
として閉じました*/
。Javadocスタイルのコメントにより、ユーザーはJavadoc実行可能ファイルを実行してプログラムのドキュメントを作成でき、Eclipseなどの統合開発環境(IDE)で読み取って、開発者がIDE内のドキュメントにアクセスできるようにすることができます。
Helloworldの例
従来のHelloworldプログラムは、Javaで次のように記述できます。[56]
パブリック クラス HelloWorldApp { public static void main (String [] args ) { システム。アウト。println ("Hello World!" ); //文字列をコンソールに出力します。 }}
すべてのソースファイルは、それらに含まれるパブリッククラスにちなんで名前を付ける必要があり.java
、たとえば、接尾辞を追加しますHelloWorldApp.java
。最初に、Javaコンパイラを使用してバイトコードにコンパイルし、.class
接尾辞(HelloWorldApp.class
この場合は)が付いたファイルを生成する必要があります。そうして初めて、実行または起動できます。Javaソースファイルにはパブリッククラスを1つだけ含めることができますが、非パブリックアクセス修飾子を持つ複数のクラスと任意の数のパブリック内部クラスを含めることができます。ソースファイルに複数のクラスが含まれている場合は、1つのクラス(class
キーワードで導入)をパブリック(public
キーワードで先行)にし、そのパブリッククラス名でソースファイルに名前を付ける必要があります。
publicと宣言されていないクラスは、任意の.java
ファイルに格納できます。コンパイラは、ソースファイルで定義されたクラスごとにクラスファイルを生成します。クラスファイルの名前は、クラスの名前に.classが追加されたものです。クラスファイルの生成では、匿名クラスは、その名前が、それを囲むクラスの名前、$、および整数を連結したものであるかのように扱われます。
キーワード public
の方法は他のクラスのコードから呼び出すことができること、またはクラスがクラス階層外側のクラスによって使用されてもよいことを意味します。クラス階層は、.javaファイルが配置されているディレクトリの名前に関連しています。これは、アクセスレベル修飾子と呼ばれます。他のアクセスレベル修飾子には、キーワードprivate
(同じクラスでのみアクセスできるメソッド)とprotected
(同じパッケージのコードがアクセスできるようにする)が含まれます。コードの一部がプライベートメソッドまたは保護されたメソッドにアクセスしようとすると、JVMはSecurityException
メソッドの前にあるキーワードstatic
[18]は、静的メソッドを示します。静的メソッドは、クラスにのみ関連付けられており、そのクラスの特定のインスタンスには関連付けられていません。オブジェクトへの参照なしで呼び出すことができるのは静的メソッドのみです。静的メソッドは、静的でもないクラスメンバーにはアクセスできません。静的に指定されていないメソッドはインスタンスメソッドであり、動作するにはクラスの特定のインスタンスが必要です。
このキーワードvoid
は、mainメソッドが呼び出し元に値を返さないことを示します。Javaプログラムがエラーコードで終了する場合は、System.exit()を明示的に呼び出す必要があります。
メソッド名main
はJava言語のキーワードではありません。これは、Javaランチャーがプログラムに制御を渡すために呼び出すメソッドの名前にすぎません。アプレットやエンタープライズJavaBeansなどの管理環境で実行されるJavaクラスは、main()
メソッドを使用しないか、メソッドを必要としません。Javaプログラムには、main
メソッドを持つ複数のクラスが含まれている場合があります。つまり、VMは、どのクラスから起動するかを明示的に指示する必要があります。
mainメソッドは、オブジェクトの配列を受け入れる必要がありString
ます。慣例により、args
他の正当な識別子名を使用できるかのように参照されます。Java 5以降、mainメソッドは変数引数をの形式で使用することもpublic static void main(String... args)
でき、mainメソッドを任意の数のString
引数で呼び出すことができます。この代替宣言の効果は意味的に同じですが(オブジェクトのargs
配列であるパラメーターとString
)、配列を作成して渡すための代替構文が可能になります。
Javaランチャーは、指定されたクラス(コマンドラインまたはJARの属性として指定)をロードし、そのpublic static void main(String[])
メソッドを開始することによってJavaを起動します。スタンドアロンプログラムは、このメソッドを明示的に宣言する必要があります。String[] args
パラメータが配列であるString
クラスに渡される引数を含むオブジェクト。のパラメータmain
は、多くの場合、コマンドラインを使用して渡されます。
印刷はJava標準ライブラリの一部です。このSystem
クラスは、と呼ばれるパブリック静的フィールドを定義しout
ます。out
オブジェクトは、インスタンスであるPrintStream
クラスとにデータを印刷するための多くの方法を提供する標準外を含め、println(String)
また渡さに新しい行を追加した文字列。
文字列"Hello World!"
は、コンパイラによって自動的にStringオブジェクトに変換されます。
メソッドの例
//これは2つのスラッシュを使用した1行コメントの例です/ * *これは、スラッシュとアスタリスクを使用した複数行コメントの例です。*このタイプのコメントは、多くの情報を保持したり、コードを非アクティブ化するために使用できます*が、コメントを閉じることを忘れないでください。* /パッケージ fibsandlies ;import java.util.Map ; import java.util.HashMap ;/ ***これはJavadocコメントの例です。Javadocは、このテキストから*ドキュメントをコンパイルできます。Javadocコメントは、文書化されるクラス、メソッド、*、またはフィールドの直前に置く必要があります。* @authorウィキペディアボランティア* /パブリック クラス FibCalculatorは 拡張 フィボナッチ 実装 電卓 { プライベート 静的な 地図<整数、 整数> メモ化 = 新しい HashMapを<> (); / * *次のように記述されたmainメソッド は、プログラムの開始点として* JVMによって使用されます。 * / public static void main (String [] args ) { メモ化。プット(1 、 1 ); メモ化。プット(2 、 1 ); システム。アウト。println (フィボナッチ(12 )); // 12番目のフィボナッチ数を取得し、コンソールに出力します } / ** * Javaで記述されたメソッドの例。クラスにラップされています。 *非負の数FIBINDEXが与えられると、 * N番目のフィボナッチ数を返します。ここで、NはFIBINDEXに等しくなります。 * * @param fibIndexフィボナッチ数のインデックス *フィボナッチ数@return * / パブリック 静的 INT フィボナッチ(INT fibIndex ) { 場合 (メモ化。のcontainsKey (fibIndex )) リターン メモ化します。get (fibIndex ); 他 { int型の 答え = フィボナッチ(fibIndex - 1 ) + フィボナッチ(fibIndex - 2 )。 メモ化。put (fibIndex 、 answer ); 答えを返す ; } } }
特別クラス
アプレット
Javaアプレットは、他のアプリケーション、通常はWebブラウザに表示されるWebページに埋め込まれたプログラムでした。JavaアプレットAPIは、2017年のJava9以降非推奨になりました。[57] [58]
サーブレット
Javaサーブレットテクノロジは、Web開発者に、Webサーバーの機能を拡張し、既存のビジネスシステムにアクセスするためのシンプルで一貫性のあるメカニズムを提供します。サーブレットは、クライアントからの要求に対する応答を生成するサーバー側のJavaEEコンポーネントです。ほとんどの場合、これはHTTPリクエストに応答してHTMLページを生成することを意味しますが、WebSocket通信など、他にも多くの標準サーブレットクラスを利用できます。
JavaサーブレットAPIは、Webサービス用の2つの標準Javaテクノロジにある程度置き換えられています(ただし、内部ではまだ使用されています)。
- RESTful Webサービス用のJava API(JAX-RS 2.0)AJAX、JSONやRESTサービスのための便利な、と
- XML Webサービス用のJava APIに便利(JAX-WS)SOAP Webサービス。
アプリケーションサーバーまたはサーブレットコンテナでのこれらのAPIの一般的な実装では、標準のサーブレットを使用して、実際のビジネスロジックのWebサービスメソッドに委任するHTTP要求および応答とのすべての対話を処理します。
JavaServerPages
JavaServer Pages(JSP)は、クライアントからのHTTP要求に対する応答(通常はHTMLページ)を生成するサーバー側のJavaEEコンポーネントです。JSPは、特別な区切り文字とを使用して、JavaコードをHTMLページに埋め込みます。JSPは、最初にアクセスされたときに、それ自体がJavaアプリケーションであるJavaサーブレットにコンパイルされます。その後、生成されたサーブレットが応答を作成します。[59] <%
%>
スイングアプリケーション
Swingは、JavaSEプラットフォーム用のグラフィカルユーザーインターフェイスライブラリです。Swingのプラグ可能なルックアンドフィールシステムを使用して、異なるルックアンドフィールを指定することができます。Windows、GTK +、およびMotifのクローンはSunから提供されています。Appleは、macOS用のAquaルックアンドフィールも提供しています。これらのルックアンドフィールの以前の実装が不足していると考えられていた場合、Java SE 6のSwingは、基盤となるプラットフォームのよりネイティブなGUIウィジェット描画ルーチンを使用してこの問題に対処します。[60]
JavaFXアプリケーション
JavaFXは、デスクトップアプリケーション、およびさまざまなデバイスで実行できるリッチWebアプリケーションを作成および配信するためのソフトウェアプラットフォームです。JavaFXは、Java SEの標準GUIライブラリとしてSwingを置き換えることを目的としていますが、JDK 11以降、JavaFXはコアJDKではなく、別のモジュールに含まれています。[61] JavaFXは、Microsoft Windows、Linux、およびmacOS上のデスクトップコンピューターとWebブラウザーをサポートしています。JavaFXは、ネイティブOSのルックアンドフィールをサポートしていません。[62]
ジェネリック
2004年に、ジェネリックスがJ2SE5.0の一部としてJava言語に追加されました。ジェネリックスが導入される前は、各変数宣言は特定のタイプである必要がありました。たとえば、コンテナクラスの場合、特定のタイプのオブジェクトのみを受け入れるコンテナを作成する簡単な方法がないため、これは問題になります。コンテナは、通常Object
、クラスまたはインターフェイスのすべてのサブタイプで動作するか、含まれているクラスごとに異なるコンテナクラスを作成する必要があります。ジェネリックスを使用すると、それぞれがほぼ同じコードを含む多くのコンテナクラスを作成しなくても、コンパイル時の型チェックが可能になります。より効率的なコードを有効にすることに加えて、コンパイル時エラーを発行することにより、特定のランタイム例外の発生を防ぎます。Javaがすべてのランタイムタイプエラー(ClassCastException
s)の発生を防止した場合、タイプセーフになります。
2016年、Javaの型システムは不健全であることが証明されました。[63]
批判
Javaに対する批判には、ジェネリックスの実装、[64]速度、[65]符号なし数値の処理、[66]浮動小数点演算の実装、[67]、およびプライマリJavaVM実装におけるセキュリティの脆弱性の履歴が含まれます。HotSpot。[68]
クラスライブラリ
Javaのクラスライブラリは、ある標準ライブラリ、Javaでのアプリケーション開発をサポートするために開発され、。これは、Java CommunityProcessプログラムを通じて他のユーザーと協力してOracleによって制御されます。[69]このプロセスに参加している企業または個人は、APIの設計と開発に影響を与える可能性があります。このプロセスは、2010年代に論争の的となっています。[70]クラスライブラリには、次のような機能が含まれています。
- 以下を含むコアライブラリ:
- IO / NIO
- ネットワーキング(注:Java 11以降の新しいHTTPクライアント)
- 反射
- 並行性
- ジェネリック
- スクリプティング/コンパイラ
- 関数型プログラミング(ラムダ、ストリーミング)
- リスト、辞書、ツリー、セット、キュー、両端キュー、またはスタックなどのデータ構造を実装するコレクションライブラリ[71]
- XML処理(解析、変換、検証)ライブラリ
- セキュリティ[72]
- 国際化およびローカリゼーションライブラリ[73]
- アプリケーション作成者が外部システムと通信できるようにする統合ライブラリ。これらのライブラリには次のものが含まれます。
- Javaデータベースコネクティビティ(JDBC)APIデータベースアクセスのための
- ルックアップとディスカバリーのためのJavaNaming and Directory Interface(JNDI)
- 分散アプリケーション開発用のRMIとCORBA
- アプリケーションを管理および監視するためのJMX
- 以下を含むユーザーインターフェイスライブラリ:
- (ヘビーウェイトまたはネイティブの)Abstract Window Toolkit(AWT)は、GUIコンポーネント、それらのコンポーネントをレイアウトするための手段、およびそれらのコンポーネントからのイベントを処理するための手段を提供します。
- (軽量)Swingライブラリ。AWT上に構築されていますが、AWTウィジェットの(非ネイティブ)実装を提供します。
- オーディオのキャプチャ、処理、再生のためのAPI
- JavaFX
- Javaライブラリとサードパーティアプリケーションのバイトコードを実行する手段であるJava仮想マシンのプラットフォーム依存の実装
- アプレットをWebブラウザで実行できるようにするプラグイン
- Java Web Start。これにより、Javaアプリケーションをインターネット全体のエンドユーザーに効率的に配布できます。
- ライセンスとドキュメント
ドキュメンテーション
Javadocはによって作成された包括的なドキュメントシステム、であるサン・マイクロシステムズ。これは、開発者にコードを文書化するための体系化されたシステムを提供します。Javadocコメントは区切り文字であるすなわち、先頭に余分なアスタリスクを持っている/**
し、*/
Javaで通常の複数行のコメントは区切り文字でオフに設定されているのに対し、/*
および*/
、およびシングルラインコメントは行を始めます//
。[74]
実装
Oracle Corporationは、2010年1月27日にSun Microsystemsを買収した後、Java SEプラットフォームの公式実装の現在の所有者です。この実装は、SunによるJavaの元の実装に基づいています。Oracleの実装は、Microsoft Windows(XPでも機能しますが、現在公式にサポートされているのはそれ以降のバージョンのみです)、macOS、Linux、およびSolarisで使用できます。Javaには、Ecma International、ISO / IEC、ANSI、またはその他のサードパーティ標準化団体によって認識されている正式な標準化がないため、Oracleの実装は事実上の標準です。
Oracleの実装は、2つの異なるディストリビューションにパッケージ化されています。Javaプログラムの実行に必要なエンドユーザー向けのJava SEプラットフォームの部分を含むJavaランタイム環境(JRE)と、Java開発キット(JDK)です。ソフトウェア開発者向けであり、Javaコンパイラ、Javadoc、Jar、デバッガなどの開発ツールが含まれています。オラクルは、高性能のJava動的コンパイラおよびインタプリタであるGraalVMもリリースしました。
OpenJDKは、GNUGPLの下でライセンスされているもう1つの注目すべきJavaSE実装です。実装は、SunがGPLの下でJavaソースコードをリリースし始めたときに始まりました。Java SE 7の時点で、OpenJDKは公式のJavaリファレンス実装です。
Javaの目標は、Javaのすべての実装に互換性を持たせることです。歴史的に、Javaブランドの使用に関するSunの商標ライセンスは、すべての実装に互換性があることを要求しています。これにより、SunがMicrosoftの実装がRMIまたはJNIをサポートしておらず、独自のプラットフォーム固有の機能を追加したと主張した後、Microsoftとの法的紛争が発生しました。サンは1997年に訴訟を起こし、2001年には、2,000万米ドルの和解と、サンからのライセンス条件を強制する裁判所命令を勝ち取りました。[75]その結果、MicrosoftはJavaをWindowsに同梱しなくなりました。
プラットフォームに依存しないJavaがために不可欠であるのJava EE、より一層厳格な検証が実施を証明するために必要とされます。この環境により、ポータブルなサーバー側アプリケーションが可能になります。
Javaプラットフォームの外部で使用する
Javaプログラミング言語では、コンパイルされたプログラムを実行するためにソフトウェアプラットフォームが存在する必要があります。
オラクルは、Javaで使用するためのJavaプラットフォームを提供しています。AndroidのSDKには、主に開発するために使用される代替ソフトウェアプラットフォームであり、Androidのアプリケーションを独自のGUIシステムで。
Android
Java言語は、オープンソースのモバイルオペレーティングシステムであるAndroidの重要な柱です。Linuxカーネル上に構築されたAndroidは主にCで記述されていますが、Android SDKはAndroidアプリケーションの基盤としてJava言語を使用しますが、標準のGUI、SE、ME、またはその他の確立されたJava標準を使用しません。[76] Android SDKでサポートされているバイトコード言語はJavaバイトコードと互換性がなく、スマートフォンやタブレットコンピューターなどの低メモリデバイス用に最適化された独自の仮想マシンで実行されます。Androidのバージョンに応じて、バイトコードはDalvik仮想マシンによって解釈されるか、Androidランタイムによってネイティブコードにコンパイルされます。
Androidは完全なJavaSE標準ライブラリを提供していませんが、AndroidSDKにはその大規模なサブセットの独立した実装が含まれています。Java6および一部のJava7機能をサポートし、標準ライブラリ(Apache Harmony)と互換性のある実装を提供します。
論争
AndroidでJava関連のテクノロジーを使用すると、OracleとGoogleの間で法的な論争が発生しました。2012年5月7日、サンフランシスコの陪審員は、APIが著作権で保護されている可能性がある場合、GoogleがAndroidデバイスでJavaを使用することによりOracleの著作権を侵害していることを発見しました。[77]ウィリアム・アルサップ地方裁判官は2012年5月31日に、APIは著作権で保護できないと裁定しましたが、[78]これは、2014年5月に連邦巡回控訴裁判所によって取り消されました。[79] 2016年5月26日、地方裁判所はGoogleを支持することを決定し、AndroidでのJavaAPIの著作権侵害を裁定することは公正な使用を構成します。[80] 2018年3月、この判決は、サンフランシスコの連邦裁判所に損害賠償を決定する訴訟を下した控訴裁判所によって覆されました。[81] Googleは、2019年1月に、オラクルに有利な控訴裁判所が下した2つの判決に異議を申し立てるために、米国最高裁判所に裁量上訴の申立てを提出しました。[82] 2021年4月5日、裁判所はGoogleに有利な6-2の判決を下し、JavaAPIの使用はフェアユースと見なされるべきであるとの判決を下しました。しかし、裁判所はAPIの著作権についての判決を拒否し、代わりにJavaのAPIを「純粋に議論のために」著作権で保護されていると見なして判決を決定することを選択しました。[83]
も参照してください
- C#
- C ++
- 古いAndroidバージョンで使用されていたDalvikは、非JITAndroidランタイムに置き換えられました
- 決定論的並列Java
- Java仮想マシンのリスト
- JavaAPIのリスト
- JVM言語のリスト
Javaと他の言語との比較
- C#とJavaの比較
- JavaとC ++の比較
参考文献
- ^ Binstock、Andrew(2015年5月20日)。「Javaの20年の革新」。フォーブス。2016年3月14日にオリジナルからアーカイブされました。2016年3月18日取得。
- ^ a b c d バーバラ・リスコフとジョン・グッタッグ(2000)Javaでのプログラム開発-抽象化、仕様、およびオブジェクト指向設計。アメリカ、アディソンウェスリー。ISBN 9780201657685。
- ^ Chaudhary、Harry H.(2014年7月28日)。「Javaプログラミングインタビューのクラッキング:: 2000 + JavaインタビューQue / Ans」。2016年5月29日取得。
- ^ Java 5.0は、同様の(そして競合する) C#言語で導入された後、いくつかの新しい言語機能( forループ、オートボクシング、可変引数、および注釈の拡張)を追加しました。[1]アーカイブで2011年3月19日、ウェイバックマシン[2]アーカイブで2006年1月7日、ウェイバックマシン
- ^ ゴスリング、ジェームズ; マクギルトン、ヘンリー(1996年5月)。「Java言語環境」。2014年5月6日にオリジナルからアーカイブされました。2014年5月6日取得。
- ^ ゴスリング、ジェームズ; ジョイ、ビル; スティール、ガイ; ブラチャ、ギラッド。「Java言語仕様、第2版」。2011年8月5日にオリジナルからアーカイブされました。2008年2月8日取得。
- ^ 「プログラミング言語のAZ:Modula-3」。Computerworld.com.au。2009年1月5日にオリジナルからアーカイブされました。2010年6月9日取得。
- ^ Niklaus Wirthは、2005年9月にモスクワの工科博物館で行われた講演など、多くの公の場で述べました(ロシア語での独立した直接のアカウントがいくつか存在します。たとえば、録音されたものは次のとおりです。 フィリッポワ、エレナ(2005年9月22日)。「モスクワの工科博物館でのニクラウス・ヴィルトの講演」。)、Sun Java設計チームがJavaのリリースの数年前にOberonコンパイラソースのライセンスを取得し、それを調査したこと:(相対的な)コンパクトさ、型安全性、ガベージコレクション、クラスの多重継承なし-これらすべての重要な全体的な設計機能はJavaとOberonで共有されています。
- ^ Patrick Naughtonは、Javaプログラミング言語の設計に強い影響を与えるものとしてObjective-Cを引用し、注目すべき直接派生物にはJavaインターフェイス(Objective-Cのプロトコルから派生)とプリミティブラッパークラスが含まれると述べています。[3] アーカイブで2011年7月13日、ウェイバックマシン
- ^ TechMetrix Research(1999)。「Javaの歴史」 (PDF)。Javaアプリケーションサーバーレポート。2010年12月29日にオリジナル (PDF)からアーカイブされました
。プロジェクトはgreenという名前で進められ、言語はUCSD Pascalの古いモデルに基づいていたため、解釈コードを生成できます。
- ^ 「ジェームズゴスリングとの会話–ACMキュー」。Queue.acm.org。2004年8月31日。2015年7月16日のオリジナルからアーカイブ。2010年6月9日取得。
- ^ 1996年の夏、Sunは、現在のAWTおよびJavaBeansコンポーネントアーキテクチャのイベントモデルの前身を設計していました。ボーランドはこのプロセスに大きく貢献しました。Delphi Object Pascalを注意深く調べ、Javaプログラミング言語とそのAPIとの相互作用を理解するために、バインドされたメソッド参照の実用的なプロトタイプを作成しました。マイクロソフトの代表者に関するホワイトペーパー
- ^ 「チャペル仕様(謝辞)」 (PDF)。Cray Inc. 2015年10月1日。2016年2月5日のオリジナルからアーカイブ (PDF)。2016年1月14日取得。
- ^ 「Gambasドキュメントの紹介」。ガンバスのウェブサイト。2017年10月9日にオリジナルからアーカイブされました。2017年10月9日取得。
- ^ 「FacebookのQ&A:ハックは静的型付けをPHPの世界にもたらします」。InfoWorld。2014年3月26日。2015年2月13日のオリジナルからアーカイブ。2015年1月11日取得。
- ^ 「一度書いて、どこでも走る?」。ComputerWeekly。2002年5月2日。2009年7月27日取得。
- ^ a b c 「1.2Java™プログラミング言語の設計目標」。オラクル。1999年1月1日。2013年1月23日のオリジナルからアーカイブ。2013年1月14日取得。
- ^ a b マクミラン、ロバート(2013年8月1日)。「Javaはそのモジョを失っていますか?」。Wired.com。2017年2月15日にオリジナルからアーカイブされました。2017年3月8日取得。
少なくとも、絶えず変化するコンピュータープログラミング言語の世界に目を光らせているある衣装によれば、Javaは衰退しつつあります。10年以上の間、TIOBEプログラミングコミュニティインデックスを支配し、トップに戻ってきました。これは、インターネット検索結果などを調べて、さまざまな言語の話題の量を測定するソフトウェア開発者の熱意のスナップショットです。しかし、最近、Javaはスリップしています。
- ^ チャン、ロザリー(2019年1月22日)。「10個の最も一般的なプログラミング言語、 『プログラマのためのFacebookによります』」。ビジネスインサイダー。2019年6月29日にオリジナルからアーカイブされました。2019年6月29日取得。
- ^ 「JavaOne2013レビュー:Javaはモノのインターネットを利用します」。www.oracle.com。2016年4月19日にオリジナルからアーカイブされました。2016年6月19日取得。 代替URL
- ^ 「システムから古いバージョンのJavaをアンインストールする必要があるのはなぜですか?」。Oracle 。2016年9月9日取得。
- ^ Byous、Jon(c.1998)。「Javaテクノロジー:初期」。Sun DeveloperNetwork。サンマイクロシステムズ。2005年4月20日にオリジナルからアーカイブされました。2005年4月22日取得。
- ^ オブジェクト指向プログラミング 「Javaテクノロジーの歴史」。Sun DeveloperNetwork。c。1995年。 2010年2月10日のオリジナルからアーカイブ。2010年4月30日取得。
- ^ マーフィー、キーロン(1996年10月4日)。「それで、なぜ彼らはそれをJavaと呼ぶことにしたのですか?」。JavaWorld。2020年7月13日取得。
- ^ Kabutz、Heinz; 2007年4月13日、ウェイバックマシンでアーカイブされたオークに一度 。アルティマ。2007年4月29日取得。
- ^ 「JAVASOFTSHIPSJAVA1.0」。2007年3月10日にオリジナルからアーカイブされました。2018年5月13日取得。
- ^ Javaを使用したオブジェクト指向プログラミング:EssentialsとApplications。タタマグロウヒルエデュケーション。p。34。
- ^ 「JSG–Java研究会」。open-std.org。2006年8月25日にオリジナルからアーカイブされました。2006年8月2日取得。
- ^ 「Java™が2回標準化された理由」 (PDF)。2014年1月13日のオリジナルからアーカイブ (PDF)。2018年6月3日取得。
- ^ 「ECMAとは何ですか?そしてマイクロソフトが気にする理由」。2014年5月6日にオリジナルからアーカイブされました。2014年5月6日取得。
- ^ 「JavaCommunityProcessWebサイト」。Jcp.org。2010年5月24日。2006年8月8日のオリジナルからアーカイブ。2010年6月9日取得。
- ^ 「JAVAONE:Sun –Javaの大部分はオープンソースです」。GrnLight.net。2014年5月27日にオリジナルからアーカイブされました。2014年5月26日取得。
- ^ 「JavaエバンジェリストとしてのSunの進化する役割」。オライリーメディア。2010年9月15日にオリジナルからアーカイブされました。2009年8月2日取得。
- ^ 「OracleとJava」。oracle.com。オラクル株式会社。2010年1月31日にオリジナルからアーカイブされました。2010年8月23日取得。
オラクルは、1995年の登場以来Javaの主導的かつ実質的なサポーターであり、参加と透明性のコミュニティの育成に絶え間なく取り組んでいるJavaテクノロジーのスチュワードとして新しい役割を担っています。
- ^ ジェームズ・ゴスリング(2010年4月9日)。「次に進む時間...」 新しい道で。2010年11月5日にオリジナルからアーカイブされました。2011年11月16日取得。
- ^ トピック、ダリボル。「プラグインフリーWebへの移行」。2016年3月16日にオリジナルからアーカイブされました。2016年3月15日取得。
- ^ 「Javaテクノロジについて学ぶ」。オラクル。2011年11月24日にオリジナルからアーカイブされました。2011年11月21日取得。
- ^ 「OracleJavaSEサポートロードマップ」。オラクル。2020年5月13日。2020年12月11日取得。
- ^ 「JAVASOFTSHIPSJAVA1.0」。sun.com。2007年3月10日にオリジナルからアーカイブされました。2008年2月5日取得。
- ^ チャンダー、シャラット。「JavaSE11の紹介」。oracle.com。2018年9月26日にオリジナルからアーカイブされました。2018年9月26日取得。
- ^ 「Java15の登場!」。Oracle。2020年9月15日。2020年9月15日取得。
- ^ 「JavaCardの概要」。Oracle TechnologyNetwork。オラクル。2015年1月7日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「JavaPlatform、Micro Edition(Java ME)」。Oracle TechnologyNetwork。オラクル。2015年1月4日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「JavaSE」。Oracle TechnologyNetwork。オラクル。2014年12月24日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「JavaPlatform、Enterprise Edition(JavaEE)」。Oracle TechnologyNetwork。オラクル。2014年12月17日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「JVM(Java仮想マシン)プラットフォームに依存しますか、それともプラットフォームに依存しませんか?JVMを使用し、Javaを翻訳言語にすることの利点は何ですか?」。プログラマーインタビュー。2015年1月19日にオリジナルからアーカイブされました。2015年1月19日取得。
- ^ ジェロビッチ、デジャン。「Javaが常にC ++よりも遅くなる理由」。2008年2月11日にオリジナルからアーカイブされました。2008年2月15日取得。
- ^ グーグル。「C ++ / Java / Go / Scalaでのループ認識」 (PDF)。2012年7月12日取得。
- ^ 「SunJDK1.1に統合されるSymantecのジャストインタイムJavaコンパイラ」。2010年6月28日にオリジナルからアーカイブされました。2009年8月1日取得。
- ^ Salcic、Zoran; パク、ヒジョン; Teich、Jürgen; マリク、アビナッシュ; ナディーム、ムハンマド(2017年7月22日)。「Noc-HMP:SystemJで設計された組み込みシステム用の異種マルチコアプロセッサ」。電子システムの設計自動化に関するACMトランザクション。22(4):73 DOI:10.1145 / 3073416。ISSN 1084から4309まで。S2CID 11150290。
- ^ 「NullPointerException」。オラクル。2014年5月6日にオリジナルからアーカイブされました。2014年5月6日取得。
- ^ 「Javaの例外」。Artima.com。2009年1月21日にオリジナルからアーカイブされました。2010年8月10日取得。
- ^ 「JavaHotSpot™仮想マシンのパフォーマンスの強化」。Oracle.com。2017年5月29日にオリジナルからアーカイブされました。2017年4月26日取得。
- ^ 「演算子のオーバーロード(C#とJava)」。Java開発者向けのC#。マイクロソフト。2015年1月7日にオリジナルからアーカイブされました。2014年12月10日取得。
- ^ 「状態、実装、およびタイプの多重継承」。Java™チュートリアル。オラクル。2014年11月9日にオリジナルからアーカイブされました。2014年12月10日取得。
- ^ 「レッスン:HelloWorldアプリケーションの詳細」。Java™チュートリアル>はじめに。オラクル株式会社。2011年3月17日にオリジナルからアーカイブされました。2011年4月14日取得。
- ^ 「非推奨のAPI、機能、およびオプション」。www.oracle.com 。2019年5月31日取得。
- ^ 「アプレット(Java Platform SE 7)」。docs.oracle.com 。2020年5月1日取得。
- ^ 「JSPページとは?-Java EE5チュートリアル」。docs.oracle.com 。2020年5月1日取得。
- ^ 「トレイル:JFC / Swingを使用したGUIの作成(Java™チュートリアル)」。docs.oracle.com 。2020年5月1日取得。
- ^ 「JDK11から削除され、JavaFX11はスタンドアロンモジュールとして提供されます」。2020年10月13日取得。
- ^ 「JavaFX入門:Hello World、JavaFXスタイル| JavaFX2チュートリアルとドキュメント」。docs.oracle.com 。2020年5月1日取得。
- ^ 「JavaとScalaの型システムは健全ではない」 (PDF)。2016年11月28日のオリジナルからアーカイブ (PDF)。2017年2月20日取得。
- ^ アーノルド、ケン。「有害と考えられるジェネリック」。java.net。2007年10月10日にオリジナルからアーカイブされました。2015年9月10日取得。 以前のアーカイブスナップショットで利用可能な元の記事へのより多くのコメント。
- ^ ジェロビッチ、デジャン。「Javaが常にC ++よりも遅い理由」。www.jelovic.com。2008年2月11日にオリジナルからアーカイブされました。2012年10月17日取得。
- ^ Owens、Sean R. 「Javaとunsignedint、unsigned short、unsigned byte、unsigned longなど(というより、その欠如)」。2009年2月20日にオリジナルからアーカイブされました。2011年7月4日取得。
- ^ カハン、ウィリアム。「Javaの浮動小数点がどこでもすべての人を傷つける方法」 (PDF)。カリフォルニア大学バークレー校の電気工学およびコンピュータサイエンス。2012年9月5日のオリジナルからアーカイブ (PDF)。2011年6月4日取得。
- ^ 「Javaをチェックしましたか?」。2012年9月21日にオリジナルからアーカイブされました。2011年12月23日取得。
- ^ Cadenhead、Rogers(2017年11月20日)、Javaプログラムのしくみを理解する、 2019年3月26日取得
- ^ ウルフ、ニッキー(2016年5月26日)。「GoogleはAndroidコードの著作権をめぐってOracleとの6年間の法廷闘争に勝ちました」。ガーディアン。ISSN 0261から3077まで。2019年3月26日取得。
- ^ 「コレクションフレームワークの概要」。Javaドキュメント。オラクル。2014年12月31日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「Java™セキュリティの概要」。Javaドキュメント。オラクル。2015年1月3日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「トレイル:国際化」。Java™チュートリアル。オラクル。2014年12月31日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ 「Javadocツールのドキュメントコメントの書き方」。Oracle TechnologyNetwork。オラクル。2014年12月18日にオリジナルからアーカイブされました。2014年12月18日取得。
- ^ ニコライ、ジェームズ(2001年1月24日)。「Sun、MicrosoftはJava訴訟を解決する」。JavaWorld。IDGニュースサービス。2020年7月13日取得。
- ^ van Gurp、Jilles(2007年11月13日)。「GoogleAndroid:第一印象と批評」。Javalobby 。2009年3月7日取得。
率直に言って、Googleがそこにある膨大な量の既存の実装を無視しようとしている理由がわかりません。私には「ここで発明されていない」という悪いケースのように思えます。最終的に、これは採用を遅らせるでしょう。モバイルの世界にはすでにJavaプラットフォームが多すぎますが、これはまた別のプラットフォームです。
- ^ マリン、ジョー。「グーグルはオラクルの裁判で侵害の罪を犯した。将来の法的な頭痛の種が迫っている」。法と障害。ArsTechnica。2012年5月8日にオリジナルからアーカイブされました。2012年5月8日取得。
- ^ Mullin、Joe(2012年5月31日)。「グーグルが重要なAPIの決定を勝ち取り、オラクルの訴訟は打ち切られた」。ArsTechnica。2017年3月12日にオリジナルからアーカイブされました。2012年6月1日取得。
- ^ ローゼンブラット、セス(2014年5月9日)。「Java特許控訴においてAndroidよりもOracleの法廷側」。CNET。2014年5月10日にオリジナルからアーカイブされました。2014年5月10日取得。
- ^ Mullin、Joe(2016年5月26日)。「GoogleはOracleを打ち負かします—AndroidはJavaAPIを「フェアユース」します」。ArsTechnica。2017年1月20日にオリジナルからアーカイブされました。2016年5月26日取得。
- ^ ファリヴァー、サイラス(2018年3月27日)。「」控訴裁判所規則「のJava APIパッケージのGoogleの使用は、公正、ではなかったです」。ArsTechnica 。2019年8月6日取得。
- ^ リー、ティモシー(2019年4月23日)。「Googleは最高裁判所にAPI著作権に関する悲惨な判決を却下するよう要請している」。ArsTechnica。2019年4月23日取得。
- ^ GoogleLLC対OracleAmerica 、Inc 593 US ____(2021)
引用された作品
- ゴスリング、ジェームズ; ジョイ、ビル; スティール、ガイ; ブラチャ、ギラッド; バックリー、アレックス(2014)。Java®言語仕様 (PDF)(Java SE 8版)。
- ゴスリング、ジェームズ; ジョイ、ビル; スティール、ガイL.、ジュニア; ブラチャ、ギラッド(2005)。Java言語仕様(第3版)。アディソン-ウェスリー。ISBN 0-321-24678-0。
- リンドホルム、ティム; イェリン、フランク(1999)。Java仮想マシン仕様(第2版)。アディソン-ウェスリー。ISBN 0-201-43294-3。
外部リンク
- ウィクショナリーでのJavaの辞書定義
- ウィキメディアコモンズのJavaに関連するメディア
- ウィキブックスでのJavaプログラミング
- ウィキバーシティでのJavaに関連する学習資料