staticについて右から左へすぐに忘れていってしまうのでまとめたいと思います。
staticフィールド(変数)については以下でまとめています。
staticメソッドとは
staticとは日本語にすると「静的」と呼ばれます。「動的 (dynamic)」との対比としてそう呼ばれています。Javaではstatic(静的)フィールド(変数)とstaticメソッドが使われています。staticメソッドは静的メソッド、クラスメソッドとも呼ばれ静的フィールドと静的メソッドを合わせて静的メンバーと呼ばれたりします。
静的メソッドはインスタンスを生成していなくても呼び出すことができます。そのためstaticがついていないメソッドやフィールドへアクセスしたり呼び出すことはできません。
staticメソッドの呼び出し方
・クラス名.メソッド名
またはインスタンスを生成し呼び出すことも可能
・インスタンス名.メソッド名
※インスタンス名.メソッド名はコンパイル時にクラス名.メソッド名のコードに置き換えられます。
サンプルコード
サンプルコードをみながら動きを確認しましょう。
サンプルコード インスタンスを生成せずに呼び出す
newでインスタンスを生成せずにクラス名.メソッド名で直接呼び出しています。
public class Main {
public static void main(String[] args) throws Exception {
double r = 15;
Circle.cal(r);
}
}
class Circle{
static final double PI = 3.14;
static void cal(double r) {
double result = r * r * PI;
System.out.println(result);
}
}
サンプルコード staticなフィールド以外呼び出せない
public class Main {
public static void main(String[] args) throws Exception {
double r = 15;
Circle.cal(r);
}
}
class Circle{
double PI = 3.14;
static void cal(double r) {
double result = r * r * PI; // エラー
System.out.println(result);
}
}
サンプルコード staticなメソッド以外呼び出せない
public class Main {
public static void main(String[] args) throws Exception {
double r = 15;
Circle.cal(r);
}
}
class Circle{
static final double PI = 3.14;
static void cal(double r) {
double result = r * r * PI;
print( result); // エラー
}
void print(double num) {
System.out.println(num);
}
}
メソッドにstaticをつけるとエラーが消えます。
サンプルコード staticなメソッド以外を間接的に呼び出す
staticなメソッド以外呼び出せないと書きましたが、インスタンス化してしまえば呼び出すことができます。
public class Main {
public static void main(String[] args) throws Exception {
double r = 15;
Circle.cal(r);
}
}
class Circle{
static final double PI = 3.14;
static void cal(double r) {
double result = r * r * PI;
//インスタンスを生成
Circle test = new Circle();
// static以外のメソッドを間接的に呼び出し
test.print( result);
}
void print(double num) {
System.out.println(num);
}
}
おわり
staticのメソッドではstaticなメソッドとフィールドしか使えないことを忘れそう。