• ベストアンサー

mainクラス内に書いたメソッドの宣言の仕方(staticの必要性)

java を勉強中の超初心者です、宜しくお願いします。 main と同じクラスに disp というメソッドを作成してやり、” void disp(int a , int b )”と書いてやりましたが、mainからアクセス出来ません。 そこで、” static void disp(int a , int b )” という風に” static ” を先頭につけてやりましたら、うまく動きました。 これは、mainメソッドから他のメソッドにアクセスする場合には、必ず” static ” をつけてやる必要があるということでしょうか。 ======================================================= class クラス練習 { public static void main(String[] args) { disp(5,10); } /*static*/ void disp(int a , int b ) { System.out.println("a+b = " + (a+b)); } }

質問者が選んだベストアンサー

  • ベストアンサー
  • tom11
  • ベストアンサー率53% (134/251)
回答No.2

自動で、コードを生成してくれるnetbeansなどは、 コンストラクタで、解決している場合もあるようです。 このように書いても、必ず、staticが、必要に、 ならない場合があるみたいです。 public class practice { public practice() { disp(5,10); } /** * @param args the command line arguments */ public static void main(String[] args) { new practice(); // TODO code application logic here } void disp(int a, int b) { System.out.println("a+b ="+(a+b)); } }

その他の回答 (2)

  • ttnnkkyy
  • ベストアンサー率26% (255/979)
回答No.3

staticメソッドはインスタンス化せずに呼び出せますが、staticでないメソッドはインスタンス化しないと使えません。 詳しいことは後々クラスの扱いを学ぶ辺りでわかりますので、今はそういうものだと思っておいて下さい。 とりあえずの対策としては、全体的な構造にもよるのですが、  クラス練習 tc = new クラス練習();  tc.disp(2,1); 等としてみて下さい。 以下はもう少し詳しい説明ですが、分からないなら無視して下さい。後々理解できるようになります。  例として、"Car"クラスと、そのインスタンスである"prius"と"fit"があるとします。  どれだけの燃料が入っているかを調べるgetFuelLevel()メソッド実装してみましょう。  仮にgetFuelLevel()をstaticとした場合、このメソッドが参照できる変数はstaticなクラス変数のみです。Car.getFuelLevel()等とした場合に、staticではない変数は「まだ宣言されていない」可能性があるためです。  (厳密にはもっと難しいんですが)  staticメソッドはすべてのインスタンスで共通ですので、この場合は"prius"も"fit"も同じ値が帰ってきます。更に言えば、地球上すべての車の燃料の残量が同じだということです。  こんなことはありえません。それぞれの車で違うはずです。燃料だけでなく車種やナンバーもそれぞれで違うはずです。  つまり「それぞれの車」で違うのですから、「それぞれのgetFuelLevel()」が必要になるわけです。staticは「共通のメッソドや変数」を作ります。

回答No.1

自分も勉強中のためあんま自信無いというかstaticとかについてよく わからないのですが mainの中で、クラス自体のオブジェクトを作れば出来ます。 つまり class クラス練習{ ---main---{ クラス練習 a = new クラス練習(); a.disp(5,10); } void disp(int a, int b){ ---- } }

htgo
質問者

お礼

皆さん回答有り難う御座いました。