クラスメソッド
ここではクラスメソッドについて紹介します。
クラスのなかの変数でstaticが宣言時に頭についたものをクラス変数と言いました。同じように、メソッドでstaticが宣言時に頭についたものをクラスメソッドと言います。クラスの構成やメソッドの書き方や呼び出し方がわかれば読めると思います。また、アクセス指定子も説明は省きます。(知らなくても読めると思いますが。)
クラスメソッドの特徴
クラスメソッドは呼び出すときにはインスタンス化をしません。呼び出すときはクラス名を使います。それによって便利なことや注意するべきことがあります。
クラスメソッドの構成
クラスメソッドの書き方と使い方をまとめました。
クラスメソッドの定義の仕方
クラスメソッドの書き方は次のようになります。
public class クラス名{
public static 戻り値の型 メソッド名(引数の型 引数){
// メソッドの中身
}
}
staticがつくだけです。なので、構成というほどのものはありません。
ただし、staticなメソッドはstaticなメソッドしか使えません。
クラスメソッドの呼び出し方
クラスメソッドはインスタンスせずにクラス名を使って
クラス名.メソッド名(引数の型 引数);
みたいに呼び出します。
クラスメソッドの例
次にクラスメソッドの例を書いてみましょう。
クラス名はCallクラスです。
public void Call(){
public static void Dog(){
System.out.println("ワンワン");
}
public static void Cat(){
System.out.println("ニャーニャー");
}
public static void Monkey(){
System.out.println("ウキー");
}
}
このクラスのstaticなメソッドをメインメソッドから呼び出します。このとき、インスタンス化せずにクラス名を使って呼び出していることに注意してください。
public class MainMethod(){
public static void main(String[] args){
Call.Dog();
Call.Cat();
Call.Monkey();
}
}
これで次のように
ワンワン
ニャーニャー
ウキー
という出力になります。
クラスメソッドの注意
クラスメソッドはインスタンス化しません。つまり、インスタンス毎に区別することが出来ません。例えばつぎのクラスではインスタンス毎のクラスの中のメソッドが呼び出された回数を変数instans_countでカウントします。この変数instans_countはインスタンス化するからこそ意味があります。なので、staticなメソッドでは意味をなさなくなります。
public class ClassValue2 {
private int s = 3;
private static int static_count = 0;
private int instans_count = 0;
public void add(int num){
s = num + s;
static_count = static_count + 1;
instans_count = instans_count + 1;
}
public void substract(int num){
s = -num + s;
static_count = static_count + 1;
instans_count = instans_count + 1;
}
public void multiple(int num){
s = num*s;
static_count = static_count + 1;
instans_count = instans_count + 1;
}
public void division(int num){
s = 1/num*s;
static_count = static_count + 1;
instans_count = instans_count + 1;
}
public void confirmation(){
System.out.println("static_count:" + static_count);
System.out.println("instans_count:" + instans_count);
System.out.println("s:" + s);
}
}