スタートページJavascriptJava>

Javaシリーズの目次

Javaの文法(5) クラス・メソッドの詳細


Mainクラス・mainメソッドの構成

クラスMain のメソッド main を例にして説明します。 public static void main(String[] args) は、決まり文句で、通常はこのまま記述します。
これらの構成について「ざっとした」説明をします。

public  class Main{
    public static void main(String[] args) {
        // 処理内容        
    }
}
    public アクセス修飾子 public は、どこからでも参照可能。Main-main は必ず public
    static 静的 インスタンス可(new)しなくても外部から使用可能
  void  戻り値なし
  main  メソッド名
  String[] 引数をString型の配列で受け取る
  args   引数名、任意の名称だが 通常は args とする。

(String[] args)

void 戻り値なし

staticメソッドとインスタンスメソッド

staticメソッドとは、プログラムの動作に関係なく機能を行うもので、静的メソッドです。
それに対して、インスタンスメソッドは、呼び出すプログラムの動作に対応した機能を行うもので、動的メソッドです。

インスタンスメソッドでは、呼出し側メソッドで与えた状況により、インスタンスといいます。メソッドでは抽象的な機能を記述しておき、インスタンスにより具体的な機能にしますが、それをインスタンス化といいます。 new や this が必要です。
>staticメソッドは、インスタンス化の必要のないメソッドだともいえます。

インスタンスメソッドは難しいし、多くがstaticメソッドですので、ここでは、staticメソッドに限定します。

アクセス修飾子

外部からの呼出しを許すかどうかの指定です。
クラスでは、
  Mainクラスは外部から(コンパイラから自動的に)呼び出されるので public
、   他のクラスは、同一パッケージ(プログラム)から呼び出されるので、通常は「設定なし」
にします。
以下は主にメソッドに関する説明です。

 アクセス修飾子 同一クラス 同一パッケージ サブクラス すべて
  public    ○   ○   ○   ○
  protected   ○   ○   ○   ×
  設定なし    ○   ○   ×   ×
  private    ○   ×   ×   ×

他のメソッド、クラス

メソッドの形式は、次の形式になります。

  public static void メソッド1() {
    System.out.println("メソッド1);
  };
  public static String メソッド2() {
    return  "メソッド2";
  };
  private static String メソッド3() {
    return  "メソッド3";
  };

Mainクラス以外のクラスは、他のクラスから参照されるのが通常ですので、アクセス修飾子は「設定なし」になるのが通常です。
他クラスのメソッドを呼び出すには、クラス名.メソッド名() とします。

メソッドの呼び出し

public class Main {
  public static void main(String[] args) {
    String 文字列 = "";
    文字列 = メソッド1();  // 引数のない関数  () を付ける
        System.out.println(文字列);    // 自クラス・public
    文字列 = メソッド2();
        System.out.println(文字列);    // 自クラス・private
    文字列 = 他クラス.メソッド1();
        System.out.println(文字列);    // 他クラス・public
//  文字列 = 他クラス.メソッド2();
//      System.out.println(文字列);    // 他クラス・privateは呼び出せない コンパイルエラー
  }
  public static String メソッド1() {
    return  "自クラス・public";
  }
  private static String メソッド2() {
    return  "自クラス・private";
  }
}
class 他クラス {
  public static String メソッド1() {
    return  "他クラス・public";
  }
  private static String メソッド2() {
    return  "他クラス・private";
  }
}

クラス関連用語

オブジェクト

Javaは、オブジェクト指向言語だといわれますが、オブジェクトを組み合わせて、ある目的を達成するプログラム技法です。
すなわち、オブジェクトとは、プログラムの部品のようなものです。
オブジェクトは、二つの要素からなっています。
  属性(データ) オブジェクトが持つ情報
  操作(メソッド)オブジェクトが持つ機能や動作

いいかえれば、オブジェクトとは、小さな処理を行うためのデータとメソッドをまとめたものだといえます。
そして、このオブジェクトの利用では、オブジェクトの内部構成をしる必要はなく(カプセル化)、オブジェクトの外部仕様であるメソッドを通してだけ、利用できるようにしています。

クラス

クラスとオブジェクトの関係は二つの見方があります。

インスタンス

コンストラクタ

デフォルトコンストラクタ

class 学生クラス {       // クラス名
  String 氏名 = "阿部";  // ┬ 構造体の型と初期値
  int 年齢 = 20;         // ┘
  public 学生クラス() {  // ┐ コンストラクタ名はクラス名に合わせる
    super();             // ├ 記述不要(このようなデフォルトコンストラクタが生成)
  }                      // ┘
}
public class Main {
  public static void main(String[] args) {
    学生クラス 学生 = new 学生クラス();   // new記述可能
    System.out.println(学生.氏名 + ", " + 学生.年齢); // 阿部, 20
  }
}

変数のスコープ(有効範囲)

通常は、メソッド内部で定義した変数は、ローカル変数となり、メソッドの外からアクセスできません。
そのため、異なるメソッドでは、同じ変数名が独立した変数として定義できます。
それに対して、クラスで定義した変数は、グローバル変数となり、クラス内のどのメソッドでもアクセスできます。
メソッドで、グローバル変数と同名の変数を定義すると、そのメソッド内だけでローカル変数になります。

public class Main{
  static String 変数G = "グローバル変数";           // static で定義する
  public static void main(String[] args) {
    System.out.println("変数G = " + 変数G);        // 変数G = グローバル変数 (どのメソッドでも使える)
    String 変数A = "mainメソッドのローカル変数";
    System.out.println("変数A = " + 変数A);        // 変数A = mainメソッドのローカル変数
    メソッド1();
//  System.out.println("変数B = " + 変数B);        // コンパイルエラー
  };
  public static void メソッド1() {
    String 変数B = "メソッド1のローカル変数";
    System.out.println("変数B = " + 変数B);        // 変数B = メソッド1のローカル変数
    String 変数G = "グローバル変数と同名のメソッド1のローカル変数";
    System.out.println("変数G = " + 変数G);        //  変数G = グローバル変数と同名のメソッド1のローカル変数 
  }
}

クラスの入れ子

クラスは入れ子にできます。
上位のクラスで定義した変数は、グローバル変数として、入れ子のクラスで使えます。
逆に、入れ子のクラスで定義した変数は、ローカル変数となり、他のクラスからは使えません、
  上位クラス:クラス
  入れ子のクラス:メソッド
のような関係になります。