TOPシステム開発> staticとインスタンス
はじめてのJava
はじめてのJava入門

第2回:何はなくともまずクラス

著者:サイオステクノロジー  片桐 一宗   2007/8/20
前のページ  1  2  3  次のページ
staticとインスタンス

   変数やメソッドの種類はどこに紐づいているかによって意味が変わります。staticな変数やメソッドはクラスに紐付けられており、インスタンス変数やインスタンスメソッドはオブジェクトに紐付けられています(図2)。
クラスとインスタンスの紐付け
図2:クラスとインスタンスの紐付け
(画像をクリックすると別ウィンドウに拡大図を表示します)

   メソッドの種類によってアクセスできる変数やメソッドが決められています(表2)。

  static
変数に
アクセス
インスタンス
変数に
アクセス
static
メソッドに
アクセス
インスタンス
メソッドに
アクセス
static
メソッド
× ×
インスタンス
メソッド

表2:メソッドの種類とアクセス可能範囲

   「インスタンス」はオブジェクトのことで、メモリ上にオブジェクトを生成することを「インスタンス化する」といいます(Javaプログラムではnewキーワードを使用します)。

   Javaを覚えたての人は、いちいちnewしなくてもアクセスできるので、何でもstatic変数にデータを格納しがちなのですが、他のインスタンスからも参照されることを忘れてはいけません。例えばWebアプリケーションのように複数スレッドが動作する場合(Javaではプロセスでなくスレッドという単位で並列処理を実現します)、検索結果をstatic変数に格納してしまうと、タイミングによっては他のユーザの検索結果を表示してしまうことがあります(図3)。

static変数とスレッド
図3:static変数とスレッド
(画像をクリックすると別ウィンドウに拡大図を表示します)

   またstaticメソッドについてもインターフェースで定義できないことから、オブジェクト指向における基本概念の1つである「ポリモーフィズム(注)」が実現できなくなるので、どのように使われるデータ/機能なのかを判断して設計すべきです。

※注: ポリモーフィズム(Polymorphism)とはオブジェクト指向における重要な考え方の1つで、「同一メソッド名で複数のオブジェクトに仕事をさせる性質のこと」を指す。もしくはメッセージが受手のオブジェクトによって様々に処理されることをいうこともある。


Hello World!

   ここまででひと通りクラスの定義を説明しましたので、いよいよJavaプログラムを組んでみましょう。このクラスは、実行されると標準出力(コンソール)に「Hello World!」と表示するものです。

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

   それでは各コードごとに説明していきましょう。


1.mainメソッド

   最初にメソッド宣言部を見てみると、「返り値の型 メソッド名 引数」の形式になっています。ここではpublicキーワードが付与されているので、他のクラスから参照可能です。またstaticメソッドなので、インスタンス化することなく呼び出すことができます。voidはメソッドが返す値がない場合に指定します。複数の値を返すことはできません。

   引数はメソッドが処理を行うために必要なデータを小括弧の中に指定します。「型 任意の引数名[, 型 任意の引数名…]」の形式で指定し、複数指定することも可能です。この場合、String型の配列が引数として渡されることを意味しています。また引数が不要ならば小括弧の中に記述する必要はありません。

※注: 今回説明しているmainメソッドは、javaコマンドにて指定されたクラスが最初に呼び出される特殊なメソッドです。メソッドの宣言は「public static void main」で、引数はString型の配列(String[])でなければいけません。mainメソッドが定義されていないクラスは、javaコマンドからクラスを実行することができません。


2.System.out.println("Hello World!");

   この1行で「Systemクラスのstatic変数outが持つインスタンスメソッドprintlnを呼び出す」という意味になります。static変数にアクセスする場合、クラス名.static変数というアクセスの仕方となります。

前のページ  1  2  3  次のページ


株式会社システムインテグレータ 安治
著者プロフィール
サイオステクノロジー株式会社  片桐 一宗
ソフトハウスでC、C++、Javaでの開発経験を積み、テンアートニ(現サイオステクノロジー)入社。Webシステムの設計・開発・保守からプロジェクトリーダーまでこなした後、現在、品質管理チームの一員を担当。サイオステクノロジーのシステム構築サービス品質向上に向け、日々奮闘中。


INDEX
第2回:何はなくともまずクラス
  プログラムを作成する
staticとインスタンス
  インスタンスを生成してみよう