Java はじめて15 〜クラス型変数の使い方〜

イントロダクション

Javaはクラスをプログラムの単位としています。具体的にはJavaのプログラムを起動するのには下のようなコマンドを実行します。

java クラス名[プログラム引数]

つまり、プログラムを実行するのに「クラス」が必要なわけです。正確にはクラス内にある「メインメソッド」を検索して実行するのですが、「クラスが基本単位なんだな」という理解で十分です。

そして、クラスに役割を与えてそれぞれの役割でプログラムを実行するように作成すれば、デバック、プログラムの改修が楽になります。つまりより良いプログラムが作成しやすくなります。

クラス変数の使い方

Javaで作成したクラスを使う方法を記載します。クラス・インスタンスの作成は、以下のようにコードを書くと作れます。今回の内容はクラス名 変数名 = null;のように使用するときの話です。

クラス定義の書き方

/**
 * クラスのJavaDoc
 */
public クラス名 {
    // フィールド変数
    public String  firstName;
    public int age;
    // これは外部から参照できない
    private int zako;
    /**
    * メインメソッドのJavaDoc部分
    */
    public static void main(String[] args) {
        // メインメソッド(クラスのメンバメソッドではない)
    }
    /** メンバメソッドのJavaDoc */
    public void menberMethod() {
        // メンバーメソッド(newすると使える)
    }
}

クラス変数の使い方

今回は、作成したクラスの中にメインメソッドを作り、自分のクラスを変数に代入して使用します。
下にサンプルコードを示します。

ポイント

データ型 変数名の形で書く、SampleCls型の変数mainを宣言する
SampleCls main;

同様に、初期化する場合
SampleCls main = new SampleCls();

サンプルコード1: メンバメソッド

/**
 * クラスのJavaDoc
 */
public SampleCls {
    // フィールド変数
    public String  firstName;
    public int age;
    // これは外部から参照できない
    private int zako;
    /**
    * メインメソッドのJavaDoc部分
    */
    public static void main(String[] args) {
        // メインメソッド(クラスのメンバメソッドではない)
        // クラス型の変数main: データ型 変数名の形で書く
        SampleCls main = new SampleCls();
        main.menberMethod();
    }
    /** メンバメソッドのJavaDoc */
    public void menberMethod() {
        // メンバーメソッド(newすると使える)
        System.out.rintln("Hello MemberMethod!);
    }
}

シンプルにこんな形でコードを作成しました。メインメソッドは、「static」がつくので、クラスの中にあっても「new」演算子でのインスタンス化が必要になります。
「書き方」と同じ構成なのでわかりやすいと思いますが、いかがでしょうか?細かい説明は省きますが、メインメソッドの場合は、クラスをnewして使用しないとクラス内のメソッドを使用することができません。これはメンバメソッドはインスタンス化しないと使用できないためです。
逆に、メソッドにstaticをつけてやれば、メインメソッドから使用することができます。

サンプルコード2: staticメソッド

/**
 * クラスのJavaDoc
 */
public SampleCls {
    // フィールド変数
    public String  firstName;
    public int age;
    // これは外部から参照できない
    private int zako;

    /**
    * メインメソッドのJavaDoc部分
    */
    public static void main(String[] args) {
        SampleCls main = new SampleCls();
        // メインメソッド(クラスのメンバメソッドではない)
        main.menberMethod();
        // スタティックメソッドの実行
        staticMethod();
    }

/** メンバメソッドのJavaDoc */
    public void menberMethod() {
        // メンバーメソッド(newすると使える)
        System.out.rintln("Hello MemberMethod!);
    }

    public static void staticMethod() {
        // スタティックメソッド
        System.out.rintln("Hello StaticMethod!);
    }
}

つまりメインメソッド(staticメソッド)以外のメソッドにはクラスをnewしないとアクセスできません。

理屈としては、メインメソッドはstaticメソッドなので、通常のメソッド(メンバ・メソッド)とは独立したメンバになります。

staticとメンバについて

メンバ・メソッドと同様にメンバ・変数というのもあります。フィールド変数の事です。

「メンバ」とはクラスの中に定義するフィールド変数とメソッドの事です。ただし、staticと修飾子が付くと話は変わります。

メンバはクラスのインスタンスを生成して使用するルールになっていますが、staticメソッドはクラスのインスタンスを必要としません

なので呼び出し方が下の様に別にになります。ここがインスタンスとオブジェクトの違いになります。※深く考える必要はありません。後々に学びます。

public void sample() {
    ClassA clsA = new ClassA();
    // メンバメソッド
    clsA.memberMethod();
    // staticメソッド
    ClassA.staticMethod();
}

クラスからクラスを呼ぶ

上のコードともう1つ作成して見ます。

public SecondSampleCls {
    // フィールド変数
    public String  firstName;
    public int age;
    // これは外部から参照できない
    private int zako;
    /** JavaDoc */
    public void secondMethod() {
        // メンバーメソッド(newすると使える)
        System.out.rintln("Hello MemberMethod!);
    }
}

はじめのクラスに「メインメソッド」がないだけの同じうようなクラスです。
そして、はじめのクラスをちょっと修正します。

public SampleCls {
    // フィールド変数
    public String  firstName;
    public int age;
    // これは外部から参照できない
    private int zako;
    /**
    * JavaDoc部分
    */
    public static void main(String[] args) {
        // メインメソッド(クラスのメンバメソッドではない)
        SampleCls main = new SampleCls();
        main.menberMethod();
        SecondSampleCls second = new SecondSampleCls();
        second.sendMethod();
    }
    /** JavaDoc */
    public void sendMethod() {
        // メンバーメソッド(newすると使える)
        System.out.rintln("This is SecondMethod!);
    }
}

このような形でメインメソッドから他の作成したクラスを呼び出します。当然java.lang.XXXのようなクラスもこれと同じようにメソッドを呼び出し使用することができます。

例えば、以下のコードはjava.lang.Stringクラスの「equals()」を使用しています。

public static void main(String[] args) {
    String str = "test";
    if ("test".equals(str) {
        System.out.println("testです");
    } else {
        System.out.println("testではありません");
    }
}

<注意点>

  • 「"(ダブルクォーテーション)」で囲った文字はStringクラスとみなされます。
  • 「'(シングルクォーテーション)」で囲った文字はchar型とみなされます。
    String str = "文字列(String)";
    char ch = 'も'; // 1文字のみ

    こんな感じでしょうか?

でわでわ。。。

<Java関連の動画リスト>

<<< 前回 次回 >>>