\r\n\r\n
Javaは、多くのプラットフォーム向けのソフトウェアを書くのに役立つプログラミング言語です。デスクトップ・インターフェースによるGUIプログラムの作成、サーバーサイド・ソフトウェアの開発、Androidを使ったモバイル・アプリケーションの開発など、Javaの学習はあなたの役に立つことでしょう。ここでは、Javaのコアとなる概念を紹介します。
どのようなプログラムでも、JavaコードはJavaソースファイルという拡張子.Javaのテキストファイルに記述されます。これらのソースファイルは、Javaコンパイラーを使用してJavaクラスファイルにコンパイルされます。そして、そのクラスファイルは、JARファイルと呼ばれるZIPアーカイブにまとめられます。これらのJARファイルは、Java Virtual Machineに提供され、指定されたクラスのmain()プログラムの実行が開始されます。
変数という概念は、(どんな言語であれ)すべてのプログラムの基本です。変数は、プログラム内で値を格納する名前付きのエンティティです。
例として、円の面積を計算する場合を考えてみましょう。そして、円の半径を変数(radiusという)に格納し、それを使って面積を計算する必要があります。以下のコード例をご覧ください。
static private double computeArea(double radius) { return Math.PI * radius * radius;}Javaプログラムでは、すべての変数に型があります。型には、数値などのプリミティブ(上の例の半径の型はdouble)、組み込みクラス(文字列など)、ユーザー定義クラスがあります。
型は、以下のいずれかとする。
クラスは、Javaプログラムにおける概念の青写真です。振る舞いや状態をカプセル化するものです。動作はメソッドで、状態はメンバ変数で表現される。例えば、以下のCircleクラスは、半径の状態を持ち、面積を計算するcomputeArea()メソッドを提供します。
public class Circle { private double radius; public double computeArea() { return Math.PI * radius * radius; }}オブジェクトはクラスのインスタンスである。クラス定義は、実行中のプログラムでオブジェクトをインスタンス化するための青写真として使用されます。ここでは、プログラム内で上記のクラス(circleという名前)のインスタンスを作成し、そのメソッドを呼び出す方法を説明します(以下に説明します)。
Circle circle = ...;double area = circle.computeArea();コンストラクターは、オブジェクトが作成されるときに呼び出されるクラス内の特別なメソッドです。コンストラクタの処理中に、渡されたパラメータで呼び出されます。これらのパラメータは、オブジェクトを正しい状態に初期化するために使用されます。次の例では、Circleクラスが半径を引数に持つコンストラクタを提供しています。
コンストラクタのメソッドは、クラス名と同じ名前になります。
public class Circle { private double radius; public Circle(double r) { this.radius = r; } // more methods here ...}この定義で、円オブジェクトをインスタンス化することができるようになりました。
Circle circle = new Circle(2.5);オブジェクトメソッドは、特定の動作の実装である。計算をして値を返す場合もあり、その場合は戻り値の型が定義されている。あるいは、単にオブジェクトの状態を更新するだけかもしれない。この場合、メソッドは void 型の戻り値で定義されます。
このメソッドでは、計算に使用するパラメータを受け付けることも可能である。
以下の例では、computePercentric()メソッドがCircleクラスで定義されており、外周の計算に使用されています。引数を取らず、戻り値として double 型を返す。
public class Circle { ... public double computeCircumference() { return 2 * Math.PI * radius; } ...}フィールドは、オブジェクトのインスタンスの状態を示すために、クラス定義で宣言されます。フィールドの型は、プリミティブ型でも他のクラスでもよい。通常、privateと宣言され、そのクラスのメソッドのみがそのフィールドに直接アクセスできるようになっています。フィールドがpublicと宣言されている場合、そのフィールドはクラス定義の外からもアクセスすることができます。
次の例では、length と width の2つのフィールドを持つ Rectangle クラスを宣言しています。矩形の長さと幅を更新するために、setLength() と setWidth() メソッドが用意されています。
public class Rectangle { private double length, width; public Rectangle(double length,double width) { this.length = length; this.width = width; } public double computeArea() { return this.length * this.width; } public void setLength(double length) { this.length = length; } public void setWidth(double width) { this.width = width; }}インターフェースは、Javaにおける特殊な宣言の一種です。概念を抽象化したもので、そのクラスが実装しなければならない内容の青写真を示します。インターフェイスで宣言されたすべてのメソッドがクラスで実装されているとき、そのクラスはインターフェイスを実装しているとみなされます。例を挙げると分かりやすいでしょう。
Javaで最もよく使われるインターフェースの1つに、項目の順序付きコレクションを表すListインターフェースがあります。リストと見なすためにクラスが実装しなければならないメソッドを定義しています。このインターフェースの簡略化した例として、add()、get()、remove()メソッドをサポートする例を考えてみよう。
public interface List { public void add(Object obj); public Object get(int index); public void remove(int index);}このインタフェースを実装するクラスは、これらのメソッドをすべて実装する必要があります。 ArrayList クラスは、配列がサポートするストレージシステムを使用してこのインタフェースを実装します。次のように宣言することができる。
public class ArrayList implements List { // private field member used for storage private Object[] storage; public void add(Object obj) { // implements add() here } public Object get(int index) { // implements get() here } public void remove(int index) { // implements remove() here }}Javaにおけるパッケージは、組織的な単位である。クラスはパッケージで定義され、関連するクラスは1つのパッケージにまとめられます。パッケージ名は、慣習上、会社のドメイン名から始まる階層的な命名体系で整理されています。例えば、ドメイン名example.comのWebサイトを持つ会社が、com.example.shapesという会社を定義し、このパッケージにCircleというクラスを実装することができます。
名前付きコンポーネントと同じサブフォルダー階層を持つフォルダーにパッケージを作成します。上記のCircleクラスは、com/example/shapesフォルダに作成されます。
このようにJavaの中核となる概念を簡単に紹介したことで、Javaの世界で使用される用語を十分に理解し、さらにJavaのトレーニングを受ける準備が整ったはずです。
その他に学びたいJavaのトピックがあれば、以下のコメント欄でご意見をお聞かせください。
写真提供: Maksim Kabakou via Shutterstock.com