Javaは、高水準で汎用的なメモリ安全なオブジェクト指向プログラミング言語です。プログラマーが一度書けばどこでも実行できる(WORA) [ 17 ]ことを目的としており、コンパイルされたJava コードは再コンパイルの必要なく、Java をサポートするすべてのプラットフォームで実行できます。[ 18 ] Java アプリケーションは通常、基盤となるコンピュータ アーキテクチャに関係なく、任意のJava 仮想マシン(JVM)で実行できるバイト コードにコンパイルされます。[ 19 ] Java の構文はCやC ++に似ていますが、低レベルの機能はどちらよりも少なくなっています。Javaランタイムは、従来のコンパイル言語では通常利用できない動的な機能 (リフレクションやランタイム コードの変更など) を提供します。
Javaはリリース後すぐに人気を博し、それ以来人気のプログラミング言語となっている。[ 20 ] Javaは2022年には3番目に人気のあるプログラミング言語だった。GitHubによると。[ 21 ]依然として広く普及しているものの、近年はJavaの使用は徐々に減少しており、JVMを使用する他の言語の人気が高まっている。[ 22 ]
Javaは、Sun MicrosystemsのJames Goslingによって設計されました。1995年5月にSunのJavaプラットフォームの中核コンポーネントとしてリリースされました。オリジナルのJavaコンパイラ、仮想マシン(VM)、クラスライブラリ、リファレンス実装は、Sunが独自のライセンスでリリースしました。2007年5月現在、 Java Community Processの仕様に準拠して、SunはJavaテクノロジーのほとんどをGPL-2.0のみのライセンスで再ライセンスしています。 2010年にSunを買収したOracleは、独自のHotSpot Java仮想マシンを提供しています。しかし、公式のリファレンス実装はOpenJDK JVMであり、これはほとんどの開発者が使用するオープンソースソフトウェアで、ほぼすべてのLinuxディストリビューションのデフォルトのJVMとなっています。
2026年3月現在 、Java 26が現在のバージョンです。


ジェームズ・ゴスリング、マイク・シェリダン、パトリック・ノートンは、 1991年6月にJava言語プロジェクトを開始しました。[ 23 ]この言語は当初、ゴスリングのオフィスの外に立っていた樫の木にちなんでOakと呼ばれていました。その後、プロジェクトはGreenという名前になり、最終的にインドネシアのコーヒーの一種であるJava coffeeからJavaに改名されました。[ 24 ]ゴスリングは、システムプログラマやアプリケーションプログラマが馴染みやすいC / C++スタイルの構文でJavaを設計しました。 [ 25 ]
Sun Microsystems は 1996 年に Java 1.0 として最初の公開実装をリリースしました。[ 26 ]これは、一度書けばどこでも実行できる(WORA) 機能を提供し、一般的なプラットフォームで無償の実行時間を提供することを約束しました。かなり安全で、構成可能なセキュリティを備えており、ネットワークおよびファイルへのアクセス制限が可能でした。主要なWeb ブラウザーはすぐに Web ページ内でJava アプレットを実行する機能を組み込み、Java は急速に普及しました。Java 1.0 コンパイラは、Java 1.0 言語仕様に厳密に準拠するためにArthur van HoffによってJava で書き直されました。 [ 27 ] Java 2 (最初は1998年 12 月に J2SE 1.2 としてリリース) の登場により、新しいバージョンでは、さまざまな種類のプラットフォーム用に構築された複数の構成が使用されました。J2EEには、通常サーバー環境で実行されるエンタープライズ アプリケーション用のテクノロジーと API が含まれており、J2ME にはモバイル アプリケーション用に最適化された API が特徴でした。デスクトップ バージョンは J2SE と改名されました。 2006年、サン・マイクロシステムズはマーケティング上の目的で、新しいJ2バージョンをそれぞれJava EE、Java ME、Java SEと改名した。
1997年、Sun MicrosystemsはJavaを正式化するためにISO/IEC JTC 1標準化団体、そして後にEcma Internationalにアプローチしたが、すぐにそのプロセスから撤退した。[ 28 ] [ 29 ] [ 30 ] JavaはJavaコミュニティプロセスを通じて管理される事実上の標準であり続けている。[ 31 ]かつてSunは、自社のJava実装のほとんどを、プロプライエタリソフトウェアであるにもかかわらず無償で提供していた。SunはJava Enterprise Systemなどの特殊製品のライセンスを販売することでJavaから収益を得ていた。
2006年11月13日、SunはJava仮想マシン(JVM)の大部分をGPL-2.0のみのライセンス条件の下でフリーかつオープンソースソフトウェア(FOSS)としてリリースした。2007年5月8日、Sunはこのプロセスを完了し、Sunが著作権を保有していないごく一部のコードを除き、JVMのコアコードすべてをフリーソフトウェア/オープンソース配布条件の下で利用可能にした。[ 32 ]
サン社の副社長リッチ・グリーン氏は、Javaに関してサン社の理想的な役割は伝道者であることだと述べた。[ 33 ] 2009年から2010年にかけてオラクル社がサン・マイクロシステムズ社を買収した後、オラクル社は参加と透明性のあるコミュニティを育成することに絶え間なく取り組むJavaテクノロジーの管理者であると自らを説明した。[ 34 ]しかし、これはオラクル社がその後すぐに、 Android SDK内でJavaを使用しているとしてGoogleを提訴することを妨げるものではなかった( Androidのセクションを参照)。
2010年4月2日、ジェームズ・ゴスリングはオラクルを辞任した。[ 35 ]
2016年1月、OracleはJDK 9に基づくJavaランタイム環境ではブラウザプラグインの提供を終了すると発表した。[ 36 ]
Javaソフトウェアは、ノートパソコンからデータセンター、ゲーム機から科学用スーパーコンピュータまで、ほとんどのデバイスで動作します。[ 37 ]
Oracle(およびその他)は、古いバージョンのJavaには未解決のセキュリティ上の問題があるため、古いバージョンやサポートされていないバージョンのJavaをアンインストールすることを強く推奨しています。[ 38 ]
Java言語の作成には5つの主要な目標がありました。[ 18 ]
2026年6月現在 Java 8、11、17、21、25は長期サポート(LTS)バージョンとしてサポートされています。[ 39 ]
Oracle は、商用利用向けのレガシーバージョンJava 8 LTSの最後の無償公開アップデートを 2019 年 1 月にリリースしましたが、 個人利用向けの Java 8 は引き続き無期限で公開アップデートでサポートされます。Adoptium などの他のベンダーは、OpenJDK の長期サポート (LTS) バージョンの無料ビルドを提供し続けています。これらのビルドには、追加のセキュリティ パッチやバグ修正が含まれている場合があります。[ 40 ]
Javaの主要リリースバージョンとそのリリース日:
サン・マイクロシステムズは、異なるアプリケーション環境を対象とした4つのJavaエディションを定義し、サポートしています。また、多くのAPIをいずれかのプラットフォームに属するように分割しています。プラットフォームは以下のとおりです。
Java API のクラスは、パッケージと呼ばれる個別のグループに整理されています。各パッケージには、関連するインターフェース、クラス、サブパッケージ、および例外のセットが含まれています。
サン・マイクロシステムズは、パーソナルJavaと呼ばれるエディションも提供していたが、これは後に標準規格に基づいたJava MEの構成プロファイルの組み合わせに取って代わられた。
Javaの設計目標の一つは移植性です。これは、Javaプラットフォーム向けに書かれたプログラムは、適切なランタイムサポートがあれば、ハードウェアとオペレーティングシステムのあらゆる組み合わせで同様に動作する必要があることを意味します。これは、Java言語コードをアーキテクチャ固有のマシンコードに直接コンパイルするのではなく、 JVMバイトコードと呼ばれる中間表現にコンパイルすることで実現されます。JVMバイトコードの命令はマシンコードに似ていますが、ホストハードウェア専用に書かれた仮想マシン(VM)によって実行されることを想定しています。エンドユーザーは、スタンドアロンのJavaアプリケーションにはデバイスにインストールされたJava Runtime Environment (JRE)を、 JavaアプレットにはWebブラウザーを使用するのが一般的です。
標準ライブラリは、グラフィックス、スレッド処理、ネットワークなどのホスト固有の機能にアクセスするための汎用的な方法を提供する。
ユニバーサルバイトコードの使用により、移植は容易になります。しかし、バイトコードを機械語命令に解釈するオーバーヘッドにより、インタプリタ型プログラムはネイティブ実行可能ファイルよりもほぼ常に実行速度が遅くなります。実行時にバイトコードを機械語にコンパイルするジャストインタイム(JIT) コンパイラは、初期段階から導入されました。Java の Hotspot コンパイラは、実際にはGraalVM (Java 11 などには含まれていましたが、Java 16 以降は削除されました)により階層型コンパイルが可能になる 2 つのコンパイラが 1 つになっています。[ 52 ] Java 自体はプラットフォームに依存せず、 Java 仮想マシン(JVM)によって実行される特定のプラットフォームに適応され、 JVM バイトコードをプラットフォームの機械語に変換します。 [ 53 ]
Java で書かれたプログラムは、C++で書かれたプログラムよりも動作が遅く、より多くのメモリを必要とするという評判があります。[ 54 ] [ 55 ]しかし、Java プログラムの実行速度は、1997/1998 年にJava 1.1にジャストインタイムコンパイルが導入されたこと、[ 56 ]、より優れたコード分析をサポートする言語機能 (内部クラス、StringBuilder クラス、オプションのアサーションなど) の追加、およびHotSpot が2000 年に Sun のデフォルトの JVM になったことなどの Java 仮想マシンの最適化により大幅に向上しました。Java 1.5 では、 ConcurrentMapsやその他のマルチコア コレクションのロックフリー実装を含むパッケージの追加によりパフォーマンスが向上し、Java 1.6 でさらに向上しました。 java.util.concurrent
一部のプラットフォームはJavaのハードウェアを直接サポートしています。ソフトウェアJava仮想マシンの代わりにハードウェアでJVMバイトコードを実行できるマイクロコントローラがあり、[ 57 ]一部のARMベースのプロセッサはJazelleオプションを介してJVMバイトコードを実行するためのハードウェアサポートを備えている可能性がありますが、現在のARMの実装ではほとんどサポートが削除されています。
Java は、オブジェクトのライフサイクルでメモリを管理するために自動ガベージ コレクタを使用します。プログラマはオブジェクトが作成されるタイミングを決定し、Java ランタイムはオブジェクトが使用されなくなったときにメモリを解放する責任を負います。オブジェクトへの参照がなくなると、到達不能なメモリはガベージ コレクタによって自動的に解放される対象となります。プログラマのコードが不要になったオブジェクトへの参照を保持している場合、メモリ リークに似た現象が発生する可能性があります。これは通常、不要になったオブジェクトがまだ使用されているコンテナに格納されている場合に発生します。[ 58 ]存在しないオブジェクトのメソッドが呼び出されると、ヌル ポインタ例外がスローされます。[ 59 ] [ 60 ]
Javaの自動メモリ管理モデルの背後にある考え方の1つは、プログラマが手動でメモリ管理を行う負担から解放されることです。一部の言語では、オブジェクトの作成用のメモリはスタック上に暗黙的に割り当てられるか、ヒープから明示的に割り当ておよび解放されます。後者の場合、メモリ管理の責任はプログラマにあります。プログラムがオブジェクトを解放しない場合、メモリリークが発生します。[ 58 ]プログラムが既に解放されたメモリにアクセスまたは解放しようとすると、結果は未定義で予測が難しく、プログラムが不安定になったりクラッシュしたりする可能性が高くなります。これはスマートポインタを使用することで部分的に解決できますが、オーバーヘッドと複雑さが増します。ガベージコレクションは論理メモリリーク、つまりメモリがまだ参照されているが使用されていないリークを防ぐことはできません。 [ 58 ]
ガベージコレクションはいつでも発生する可能性があります。理想的には、プログラムがアイドル状態のときに発生します。新しいオブジェクトを割り当てるのに十分な空きメモリがヒープ上にない場合、必ずトリガーされます。これにより、プログラムが一時的に停止することがあります。Java では明示的なメモリ管理はできませんが、JVM にガベージコレクションを実行するように手動で要求することは可能です。[ 61 ]
Java は、オブジェクトのアドレスを算術的に操作できるC/C++ スタイルのポインタ演算をサポートしていません (例えば、オフセットを加算または減算するなど)。これにより、ガベージ コレクタが参照されているオブジェクトを再配置できるようになり、型の安全性とセキュリティが確保されます。
C++や他のオブジェクト指向言語と同様に、Javaのプリミティブデータ型の変数は、非プリミティブデータ型で一般的に見られるヒープではなく、フィールド(オブジェクトの場合)またはスタック(メソッドの場合)に直接格納されます(ただし、エスケープ解析を参照)。これは、パフォーマンス上の理由からJavaの設計者が意図的に決定したものです。
Java には複数の種類のガベージ コレクタがあります。Java 9 以降、HotSpot はデフォルトでGarbage First Garbage Collector (G1GC) を使用しています。 [ 63 ]ただし、Java 11 で導入された Z Garbage Collector (ZGC) や、Java 12 で導入されたものの Oracle が作成した OpenJDK ビルドでは利用できない Shenandoah GC など、ヒープの管理に使用できる他のガベージ コレクタもいくつかあります。Shenandoah は、Eclipse Temurinなどのサードパーティの OpenJDK ビルドで利用できます。ほとんどの Java アプリケーションでは、G1GC で十分です。Java 8 などの以前のバージョンの Java では、デフォルトのガベージ コレクタとしてParallel Garbage Collector が使用されていました。
メモリ管理の問題を解決したとしても、プログラマーはネットワークやデータベース接続、ファイルハンドルなど、他の種類のリソースを適切に処理するという負担から解放されるわけではない。特に例外が発生した場合はなおさらである。

Java の構文は、C++とCの影響を強く受けています。構造化プログラミング、汎用プログラミング、オブジェクト指向プログラミングの構文を組み合わせた C++ とは異なり、Java はほぼ完全にオブジェクト指向言語として構築されました。[ 18 ]すべてのコードはクラス内に記述され、すべてのデータ項目はオブジェクトですが、パフォーマンス上の理由から、プリミティブデータ型 (整数、浮動小数点数、ブール値、文字など) はオブジェクトではありません。
C++とは異なり、Javaはクラスの演算子オーバーロード[ 64 ]や多重継承をサポートしていませんが、インターフェースの多重継承はサポートされています[ 65 ]。
Java では、C++ と同様のコメントが使用されます。コメントには 3 つのスタイルがあります。2 つのスラッシュ ( ) でマークされた 1 行スタイル、 で開始しで終了する//複数行スタイル、そしてで開始しで終了するJavadocコメント スタイルです。Javadoc スタイルのコメントを使用すると、Javadoc 実行可能ファイルを実行してプログラムのドキュメントを作成でき、Eclipseなどの統合開発環境(IDE) で読み取ることができるため、開発者は IDE 内でドキュメントにアクセスできます。/**//***/
以下は、従来のJava構文で記述された「Hello, World!」プログラムの例です。
public class HelloWorld {public static void main ( String [] args ) {System.out.println ( " Hello World! " ) ;}}Java 25では、メインクラスとメインメソッドの構文が簡略化され、ユーザーが簡潔に小さなJavaプログラムを記述できるようになりました。[ 66 ] [ 67 ]
void main () {IO.println ( " Hello World!" ) ;}Javaアプレットは、主にWebブラウザに表示されるWebページなど、他のアプリケーションに組み込まれたプログラムでした。JavaアプレットAPIは、 2017年のJava 9のリリースで非推奨になりました。[ 68 ] [ 69 ]
Javaサーブレット技術は、Web開発者に対し、Webサーバーの機能を拡張したり、既存のビジネスシステムにアクセスしたりするための、シンプルで一貫性のあるメカニズムを提供します。サーブレットは、クライアントからのリクエストに対して応答を生成するサーバーサイドJava EEコンポーネントです。多くの場合、これはHTTPリクエストに応答してHTMLページを生成することを意味しますが、 WebSocket通信など、他にも多くの標準サーブレットクラスが利用可能です。
JavaサーブレットAPIは、Webサービス向けの2つの標準的なJavaテクノロジーによって、ある程度置き換えられつつあります(ただし、内部的には依然として使用されています)。
アプリケーションサーバーやサーブレットコンテナ上でこれらのAPIを実装する際の一般的な方法は、 HTTPリクエストとレスポンスとのすべてのやり取りを処理するために標準のサーブレットを使用し、実際のビジネスロジックはWebサービスメソッドに委譲します。
JavaServer Pages ( JSP ) は、クライアントからのHTTPリクエストに対して応答 (通常はHTMLページ) を生成するサーバー側のJava EE コンポーネントです。JSP は、特別な区切り文字とを使用して、HTML ページに Java コードを埋め込みます。JSP は、最初にアクセスされたときに、それ自体が Java アプリケーションである Javaサーブレットにコンパイルされます。その後、生成されたサーブレットが応答を作成します。[ 70 ]<%%>
Swingは Java SE プラットフォーム用のグラフィカル ユーザー インターフェイスライブラリです。Swingのプラグイン可能なルック アンド フィールシステムを通じて、異なるルック アンド フィールを指定できます。Windows 、GTK+、およびMotifのクローンは Sun によって提供されています。AppleはmacOS用のAquaルック アンド フィールも提供しています。これらのルック アンド フィールの以前の実装は不十分であると見なされていたかもしれませんが、Java SE 6 の Swing は、基盤となるプラットフォームのネイティブGUI ウィジェット描画ルーチンをより多く使用することでこの問題を解決しています。 [ 71 ]
JavaFX は、デスクトップ アプリケーションや、さまざまなデバイスで実行できるリッチな Web アプリケーションを作成および配信するためのソフトウェア プラットフォームです。JavaFX は、 Java SEの標準グラフィカル ユーザー インターフェイス(GUI) ライブラリとしてSwingに取って代わることを目的としていましたが、JDK 11 以降、JavaFX はコア JDK には含まれておらず、代わりに別のモジュールとして提供されています。[ 72 ] JavaFX は、 Microsoft Windows、Linux、macOS上のデスクトップ コンピュータとWeb ブラウザーをサポートしています。JavaFX は、ネイティブ OS のルック アンド フィールをサポートしていません。[ 73 ]
2004 年、ジェネリクスが J2SE 5.0 の一部として Java 言語に追加されました。ジェネリクスが導入される前は、各変数宣言は特定の型である必要がありました。たとえば、コンテナ クラスの場合、特定の型のオブジェクトのみを受け入れるコンテナを簡単に作成する方法がないため、これは問題となります。コンテナは、通常Object、クラスまたはインターフェースのすべてのサブタイプで動作するか、含まれるクラスごとに異なるコンテナ クラスを作成する必要があります。ジェネリクスを使用すると、それぞれにほぼ同じコードを含む多数のコンテナ クラスを作成することなく、コンパイル時の型チェックが可能になります。より効率的なコードを可能にすることに加えて、コンパイル時のエラーを発行することで、特定の実行時例外の発生を防ぐことができます。Java がすべての実行時型エラー ( ) の発生を防ぐことができれば、型安全ClassCastExceptionになります。
2016年に、Javaの型システムは、ジェネリクスを使用して、あるクラスのインスタンスを別の無関係なクラスの変数に代入できるクラスやメソッドを構築できるという点で不健全であることが証明されました。このようなコードはコンパイラによって受け入れられますが、実行時にクラスキャスト例外で失敗します。[ 74 ]
Java に対する批判には、ジェネリクスの実装[ 75 ]、速度[ 54 ] 、符号なし数値の処理[ 76 ] 、浮動小数点演算の実装[ 77 ] 、および主要な Java VM 実装であるHotSpotのセキュリティ脆弱性の歴史[ 78 ]などがある。 開発者は、Java EE の標準部分である Java Persistence API (JPA) の複雑さと冗長性を批判してきた。このため、データベース操作を簡素化し、定型コードを削減することを目的とした Spring Data JPA のような高レベルの抽象化の採用が増加している。このようなフレームワークの人気が高まっていることは、標準の JPA 実装が現代の Java 開発にとって使いやすさに限界があることを示唆している。
Javaクラスライブラリは、Javaでのアプリケーション開発をサポートするために開発された標準ライブラリです。Javaコミュニティプロセスプログラムを通じて、 Oracleが他の企業と協力して管理しています。[ 79 ]このプロセスに参加する企業や個人は、APIの設計と開発に影響を与えることができます。このプロセスは2010年代に論争の的となりました。[ 80 ]クラスライブラリには、次のような機能が含まれています。
Javadoc は、 Sun Microsystemsによって作成された包括的なドキュメント システムです。開発者にコードを文書化するための体系的なシステムを提供します。Javadoc コメントの先頭には余分なアスタリスクが付きます。つまり、区切り文字は と です/**が*/、通常の Java の複数行コメントは と で区切られ/*、*/単一行コメントは で始まります//。[ 88 ]
Oracle Corporationは、2010年1月27日にSun Microsystemsを買収したことにより、Java SEプラットフォームの公式実装を所有しています。この実装は、SunによるJavaのオリジナル実装に基づいています。Oracleの実装は、 Windows、macOS、Linux、Solarisで利用可能です。Javaは、 Ecma International、ISO/IEC、ANSI、その他のサードパーティ標準化団体によって正式に認められた標準化がないため、Oracleの実装が事実上の標準となっています。
Oracleの実装は、2つの異なるディストリビューションにパッケージ化されています。1つは、Javaプログラムを実行するために必要なJava SEプラットフォームのコンポーネントを含む、エンドユーザー向けのJava Runtime Environment(JRE)です。もう1つは、ソフトウェア開発者向けのJava Development Kit (JDK)で、 Javaコンパイラ、Javadoc、Jar、デバッガなどの開発ツールが含まれています。Oracleは、高性能なJava動的コンパイラおよびインタプリタであるGraalVMもリリースしています。
OpenJDKは、GNU GPLライセンスの下で提供されるJava SEの実装の一つです。この実装は、Sun MicrosystemsがJavaソースコードをGPLライセンスの下で公開し始めたことをきっかけに始まりました。Java SE 7以降、OpenJDKは公式のJavaリファレンス実装となっています。
Java の目標は、すべての Java 実装を互換性のあるものにすることです。歴史的に、Sun の Java ブランド使用の商標ライセンスは、すべての実装が互換性を持つ必要があると主張していました。このため、Sun は Microsoft の実装がJava リモート メソッド呼び出し(RMI) やJava Native Interface (JNI) をサポートしておらず、独自のプラットフォーム固有の機能を追加していると主張し、 Microsoftとの間で法的紛争が発生しました。Sun は 1997 年に訴訟を起こし、2001 年に 2,000 万米ドルの和解金と、Sun からのライセンスの条項を強制する裁判所命令を獲得しました。 [ 89 ]その結果、Microsoft はWindowsに Java を同梱しなくなりました。
プラットフォームに依存しないJavaはJava EEにとって不可欠であり、実装を認証するにはさらに厳格な検証が求められます。この環境により、移植性の高いサーバーサイドアプリケーションが可能になります。
Javaプログラミング言語では、コンパイルされたプログラムを実行するためにソフトウェアプラットフォームが必要となります。
OracleはJavaで使用するためのJavaプラットフォームを提供しています。Android SDKは代替となるソフトウェアプラットフォームであり、主に独自のGUIシステムを備えたAndroidアプリケーションの開発に使用されます。
Java 言語は、オープンソースのモバイルオペレーティングシステムであるAndroidの重要な柱です。Linuxカーネルをベースに構築された Android は大部分が C 言語で記述されていますが、Android SDK はAndroid アプリケーションの基盤として Java 言語を使用していますが、その標準の GUI、SE、ME、その他の確立された Java 標準は使用していません。[ 90 ] Android SDK でサポートされているバイトコード言語は JVM バイトコードと互換性がなく、スマートフォンやタブレットコンピュータなどの低メモリデバイス向けに最適化された独自の仮想マシン上で実行されます。Android のバージョンに応じて、バイトコードはDalvik 仮想マシンによって解釈されるか、 Android ランタイムによってネイティブコードにコンパイルされます。
AndroidはJava SE標準ライブラリ全体を提供するわけではありませんが、Android SDKにはその大部分の独立した実装が含まれています。Java 6と一部のJava 7機能をサポートしており、標準ライブラリと互換性のある実装(Apache Harmony)を提供しています。
Android での Java 関連技術の使用は、Oracle と Google の間の法的紛争につながった。2012 年 5 月 7 日、サンフランシスコの陪審は、API に著作権があるならば、Google は Android デバイスでの Java の使用によって Oracle の著作権を侵害したと判断した。[ 91 ] 2012 年 5 月 31 日、ウィリアム アルサップ地方裁判所判事は、API には著作権がないと判決を下したが、[ 92 ]これは 2014 年 5 月に連邦巡回控訴裁判所によって覆された。[ 93 ] 2016 年 5 月 26 日、地方裁判所は Google に有利な判決を下し、Android での Java API の著作権侵害はフェアユースに該当すると判断した。[ 94 ] 2018 年 3 月、この判決は控訴裁判所によって覆され、損害賠償額の決定に関する訴訟はサンフランシスコの連邦裁判所に差し戻された。[ 95 ] Google は、Oracle に有利な控訴裁判所の 2 つの判決に異議を唱えるため、2019 年 1 月に米国最高裁判所に上訴許可令状 の請願を提出した。 [ 96 ] 2021 年 4 月 5 日、最高裁は 6 対 2 で Google に有利な判決を下し、Java API の使用はフェアユースとみなされるべきであるとした。しかし、最高裁は API の著作権の有無については判断せず、代わりに「議論のためだけに」 Java の API を著作権の対象とみなすことで判決を下すことを選択した。[ 97 ]
green
という名前で進められ、言語は
UCSD Pascal
の古いモデルに基づいており
、解釈型コードの生成が可能でした。
。1996 年の夏、Sun は現在 AWT のイベント モデルと JavaBeans コンポーネント アーキテクチャの前身となるものを設計していました。Borland はこのプロセスに大きく貢献しました。私たちは Delphi Object Pascal を非常に注意深く調べ、バインド メソッド リファレンスの動作プロトタイプを構築して、Java プログラミング言語とその API との相互作用を理解しました。
は、1995年のJavaの登場以来、Javaの主要かつ実質的なサポーターであり、参加と透明性のあるコミュニティを育成するという揺るぎないコミットメントをもって、Javaテクノロジーの管理者としての新たな役割を担っています。
{{cite web}}: CS1 maint: url-status (リンク)率直に言って、Googleが既存の膨大な実装を無視しようとしている理由が理解できません。これは「自社開発主義」の悪い例のように思えます。最終的には、これが普及を遅らせるでしょう。モバイルの世界には既にJavaプラットフォームが多すぎるのに、これはまた一つ増えるだけです。