Java は、1995 年 5 月に Sun Microsystems によって発売された Java オブジェクト指向プログラミング言語および Java プラットフォームの一般名です。 James Gosling と同僚によって共同開発され、1995 年に正式に発売されました。
Java は 3 つのシステムに分かれています。
2005 年 6 月に JavaOne カンファレンスが開催され、SUN は Java SE 6 をリリースしました。この時点までに、Java のさまざまなバージョンが数字の「2」を削除する名前に変更されていました。J2EE は Java EE、J2SE は Java SE、J2ME は Java ME にそれぞれ名前が変更されました。
2009 年に、Sun は Oracle に買収されました。
2018 年、オープンソース組織 Eclipse Foundation は、JavaEE (Enterprise Edition) の名前が JakartaEE (Jakarta) に変更されると発表しました。
Java 言語の構文は C 言語や C++ 言語に非常に似ているため、ほとんどのプログラマーにとって簡単に学習して使用できます。一方、Java は、演算子のオーバーロード、多重継承、自動キャストなど、めったに使用されず、理解しにくく、混乱を招く C++ の機能を破棄します。特に、Java 言語ではポインターではなく参照が使用されます。また、自動メモリリサイクル管理メカニズムも提供するため、プログラマはメモリ管理について心配する必要がなくなります。
Java 言語は、クラス、インターフェイス、継承などのプリミティブを提供します。簡単にするために、クラス間の単一継承のみをサポートしますが、インターフェイス間の多重継承をサポートし、クラスとインターフェイス間の実装メカニズム (キーワードはimplements) をサポートします。 Java 言語は動的バインディングを完全にサポートしていますが、C++ 言語は仮想関数に対してのみ動的バインディングを使用します。つまり、Java 言語は純粋なオブジェクト指向プログラミング言語です。
Java 言語は、インターネット アプリケーションの開発をサポートします。基本的な Java アプリケーション プログラミング インターフェイスには、URL、URLConnection、Socket、ServerSocket などのネットワーク アプリケーション プログラミング用のクラス ライブラリを提供するネットワーク アプリケーション プログラミング インターフェイス (Java net) があります。 Java の RMI (Remote Method Activation) メカニズムも、分散アプリケーションを開発する重要な手段です。
Java の強力な型指定メカニズム、例外処理、自動ガベージ コレクションなどは、Java プログラムの堅牢性を保証する重要な要素です。ポインタを破棄することは Java にとって賢明な選択です。 Java のセキュリティ チェック メカニズムにより、Java はより堅牢になります。
Java は通常、ネットワーク環境で使用されます。このため、Java は悪意のあるコードによる攻撃を防ぐセキュリティ メカニズムを提供します。 Java 言語の多くのセキュリティ機能に加えて、Java には、ネットワーク経由でダウンロードされたクラスに対するセキュリティ防止メカニズム (クラス ClassLoader) が備わっています。たとえば、ローカル クラスが同じ名前で置き換えられるのを防ぐための異なる名前空間の割り当て、バイト コード インスペクション、また、セキュリティ管理メカニズム (SecurityManager クラス) を提供することで、Java アプリケーションがセキュリティ監視をセットアップできるようになります。
Java プログラム (接尾辞 java が付いたファイル) は、Java プラットフォーム上でアーキテクチャに依存しないバイトコード形式 (接尾辞 class が付いたファイル) にコンパイルされ、この Java プラットフォームを実装する任意のシステム上で実行できます。このアプローチは、異種ネットワーク環境やソフトウェア配布に適しています。
この移植性はアーキテクチャの中立性からもたらされます。さらに、Java は各基本データ型の長さも厳密に規制します。 Java システム自体も移植性が高く、Java コンパイラは Java で実装され、Java 実行環境は ANSI C で実装されます。
前述したように、Java プログラムは Java プラットフォーム上でバイトコード形式にコンパイルされ、この Java プラットフォームを実装する任意のシステム上で実行できます。実行時に、Java プラットフォームの Java インタープリタがこれらのバイトコードを解釈して実行し、実行中に必要なクラスが接続フェーズで実行環境にロードされます。
これらの解釈された高級スクリプト言語と比較すると、Java は確かに高性能です。実際、JIT (Just-In-Time) コンパイラー技術の発展により、Java の実行速度はますます C++ に近づいています。
Java 言語では、スレッドは Thread クラスまたはその子孫 (孫) によって作成される必要がある特別なオブジェクトです。通常、スレッドを作成するには 2 つの方法があります。1 つは、Thread(Runnable) 型のコンストラクターを使用して、Runnable インターフェイスを実装するオブジェクトをスレッドにラップする方法で、2 つ目は、Thread クラスからサブクラスを派生し、そのオブジェクトである run メソッドをオーバーライドする方法です。このサブクラスを使用して作成されたものがスレッドです。 Thread クラスは Runnable インターフェイスを実装しているため、どのスレッドにも run メソッドがあり、run メソッドにはスレッドによって実行されるコードが含まれていることは注目に値します。スレッドのアクティビティは、一連のメソッドによって制御されます。 Java 言語は、複数のスレッドの同時実行をサポートし、複数のスレッド間の同期メカニズム (キーワードは synchronized) を提供します。
Java 言語の設計目標の 1 つは、動的に変化する環境に適応することです。 Java プログラムに必要なクラスは、実行環境に動的にロードすることも、ネットワーク経由でロードすることもできます。これにより、ソフトウェアのアップグレードも容易になります。さらに、Java のクラスには実行時表現があり、実行時の型チェックを実行できます。
Java 言語は、システム メモリが 1G 以上であることを確認しようとします。その他のツールは次のとおりです。
上記のツールをインストールすると、Java の最初のプログラム「Hello World!」を出力できるようになります。
public class MyFirstJavaProgram { public static void main(String []args) { System.out.println("Hello World"); } }
次の章では、Java 開発環境を構成する方法を紹介します。