プロが教える店舗&オフィスのセキュリティ対策術

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));
}
}

A 回答 (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));

}

}
    • good
    • 0

staticメソッドはインスタンス化せずに呼び出せますが、staticでないメソッドはインスタンス化しないと使えません。



詳しいことは後々クラスの扱いを学ぶ辺りでわかりますので、今はそういうものだと思っておいて下さい。


とりあえずの対策としては、全体的な構造にもよるのですが、

 クラス練習 tc = new クラス練習();
 tc.disp(2,1);

等としてみて下さい。



以下はもう少し詳しい説明ですが、分からないなら無視して下さい。後々理解できるようになります。

 例として、"Car"クラスと、そのインスタンスである"prius"と"fit"があるとします。

 どれだけの燃料が入っているかを調べるgetFuelLevel()メソッド実装してみましょう。

 仮にgetFuelLevel()をstaticとした場合、このメソッドが参照できる変数はstaticなクラス変数のみです。Car.getFuelLevel()等とした場合に、staticではない変数は「まだ宣言されていない」可能性があるためです。
 (厳密にはもっと難しいんですが)

 staticメソッドはすべてのインスタンスで共通ですので、この場合は"prius"も"fit"も同じ値が帰ってきます。更に言えば、地球上すべての車の燃料の残量が同じだということです。

 こんなことはありえません。それぞれの車で違うはずです。燃料だけでなく車種やナンバーもそれぞれで違うはずです。

 つまり「それぞれの車」で違うのですから、「それぞれのgetFuelLevel()」が必要になるわけです。staticは「共通のメッソドや変数」を作ります。
    • good
    • 0

自分も勉強中のためあんま自信無いというかstaticとかについてよく


わからないのですが

mainの中で、クラス自体のオブジェクトを作れば出来ます。
つまり

class クラス練習{
---main---{
クラス練習 a = new クラス練習();
a.disp(5,10);
}
void disp(int a, int b){
----
}
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/15 17:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!