- ベストアンサー
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)); } }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
自動で、コードを生成してくれる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)
staticメソッドはインスタンス化せずに呼び出せますが、staticでないメソッドはインスタンス化しないと使えません。 詳しいことは後々クラスの扱いを学ぶ辺りでわかりますので、今はそういうものだと思っておいて下さい。 とりあえずの対策としては、全体的な構造にもよるのですが、 クラス練習 tc = new クラス練習(); tc.disp(2,1); 等としてみて下さい。 以下はもう少し詳しい説明ですが、分からないなら無視して下さい。後々理解できるようになります。 例として、"Car"クラスと、そのインスタンスである"prius"と"fit"があるとします。 どれだけの燃料が入っているかを調べるgetFuelLevel()メソッド実装してみましょう。 仮にgetFuelLevel()をstaticとした場合、このメソッドが参照できる変数はstaticなクラス変数のみです。Car.getFuelLevel()等とした場合に、staticではない変数は「まだ宣言されていない」可能性があるためです。 (厳密にはもっと難しいんですが) staticメソッドはすべてのインスタンスで共通ですので、この場合は"prius"も"fit"も同じ値が帰ってきます。更に言えば、地球上すべての車の燃料の残量が同じだということです。 こんなことはありえません。それぞれの車で違うはずです。燃料だけでなく車種やナンバーもそれぞれで違うはずです。 つまり「それぞれの車」で違うのですから、「それぞれのgetFuelLevel()」が必要になるわけです。staticは「共通のメッソドや変数」を作ります。
- kkkkeeennn
- ベストアンサー率50% (3/6)
自分も勉強中のためあんま自信無いというかstaticとかについてよく わからないのですが mainの中で、クラス自体のオブジェクトを作れば出来ます。 つまり class クラス練習{ ---main---{ クラス練習 a = new クラス練習(); a.disp(5,10); } void disp(int a, int b){ ---- } }
お礼
皆さん回答有り難う御座いました。