Javaを触ることになったので、忘れないようにメモ(間違いがありましたら、コメントいただけると嬉しいです)
staticメソッドと非staticメソッドについて良く分かっていない方は、参考程度に・・・
そもそも初心者の方は、おまじないのようにメソッドにstaticをつけてませんか?
私は、意味もわからずとりあえず書いていました!笑
まずは以下の2つのコードを見てください。
#・staticメソッドと非staticメソッド
##1.staticメソッド
class A {
public static void main(String[] args){
calc(); //calcメソッドの呼び出し
}
static void calc(){ //calcはstaticなメソッド
//計算処理
}
}
##2.非staticメソッド
class A {
public static void main(String[] args){
calc(); //calcメソッドの呼び出し
}
void calc(){ //calcは非staticなメソッド
//計算処理
}
}
どちらのプログラムも、mainメソッドからcalcメソッドの呼び出しを行おうとしています。
しかし、間違ったstaticの使い方をしたプログラムでは、コンパイルの際に
「staticでないメソッドをstaticコンテキストから参照することはできません」
というエラーが出てしまいます。
どうしてこのようなエラーが出てしまうのかというと
staticなメソッド(main)から同一クラス(A)内の非staticなメソッド(calc)への直接なアクセスはできない
ことになっているからです。
では、どうすれば同一クラス内のメソッドを呼ぶことができるかについて説明します。
#・メソッドの呼び出し方法
クラス内のメソッドの呼び出し方法は、主に2つあります。
##1.メソッドにstaticをつけて実行する(staticメソッド)
これは、上で記述した【1.staticメソッド】の通りです。
メソッドにstaticを付けると、クラス内で共用なメソッドになるため、他のメソッドからアクセスが可能になります。
##2.クラスのインスタンスを生成し、インスタンスを通して実行する(非staticメソッド)
言葉だと理解が難しいので、コードでも示します。
class A {
public static void main(String[] args){
A a = new A(); //aというインスタンスを生成
a.calc(); //インスタンスaのcalcメソッドの呼び出し
}
void calc(){ //calcは非staticなメソッド
//計算処理
}
}
staticなメソッドから同一クラス内の非staticなメソッドへアクセスはできないのではないか?と思った人がいるかもしれません。
この方法は、Aクラスのインスタンスaをmainメソッド内で生成することで、インスタンスaを通してcalcメソッドを呼び出しています。
そのため、直接アクセスしているわけではなく、間接的にアクセスしているため呼び出しが可能になるのです。
#・終わりに
staticメソッドと非staticメソッドについてなんとなくでも分かってもらえたら光栄です。
おそらくJava初心者に対して、メソッドを書く際にstaticを書かせる理由は、mainメソッドから呼び出した時にエラーになるのを防ぐためでしょうね!笑
staticは変数に付けることもあります。static変数に関する記事は、次回書こうと思います。
最後までお読み頂きありがとうございました。なつ。