javaに関する質問です。 基礎的なことで申し訳ないのですが、2日間フルで調べても判らなかったのでいつもンさせていただきます。

Java | C言語関連24閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

0

"インスタンスを生成しているのでstaticじゃないメソッドも呼べるようになっています。"ということは、 ”static同士でなければ呼べません。"というのが誤り?ということでしょうか。 インスタンス生成に関してですが、 kakeruメソッドを非staicにして、 kakeru obj2=new kakeru(val1, val2); にすると、この行にてコンパイルエラーになります。 Calc04_5メソッドをclass Exercise04_5内に移しても コンパイルエラーになります。 調べれば調べるほど別の項目で疑問点が生じ(都度解決済み)、 元々の疑問点を解決できる見込みが…。

ThanksImg質問者からのお礼コメント

他の方も詳しく書いてくれた方がいたのですが、 簡潔に理解できたのがこちらの回答・補足でしたので、 ベストアンサーとさせていただきます。

お礼日時:10/26 11:18

その他の回答(5件)

0

そもそも①の認識が誤っています。 static を指定すると、その要素は「クラス」に存在します。 static を指定しないと、その要素は「インスタンス」に存在します。 クラスはあなたが作成し、動作を始めた時点で「JRE」の中に存在し続けますが、インスタンスは new しなければ存在がありません。 public class A { public static void a(){ b(); // b メソッドは Aインスタンスに存在しますが、ここはAクラスに存在するメソッドなので呼び出せない A a = new A(); a.b(); // Aクラスのインスタンスが格納されている a の b メソッドを呼び出しているのでOK。 } public void b(){ A.a(); // Aクラスの クラスメソッドである a を呼び出しているので呼び出せる } } public class Main{ public static void main(String[] args){ A.a(); // 呼べる A.b(); // Aクラスのbメソッドを呼び出している Aクラスにbメソッドは存在しないので呼び出せない A a = new A(); a.b(); // Aクラスのインスタンスが格納されている a の bメソッドを呼び出しているので呼び出せる } } static メソッドから、static ではないメソッドも、static メソッドも呼び出すことはできますが、方法が異なります。 static ではないメソッドから、static ではないメソッドも、static メソッドも呼び出すことはできますが、方法がことなります。 どちらからどちらも呼び出すことはできます。 static 指定した変数を「静的変数」「クラス変数」などと呼称します。 static 指定したメソッドを「静的メソッド」「クラスメソッド」などと呼称します。 static 指定のない変数を「インスタンス変数」などと呼称します。 static 指定のないメソッドを「インスタンスメソッド」などと呼称します。 それぞれ利用方法、利用価値が異なります。 静的なものは、常にメモリ上に存在し続けるので、巨大なデータを保有する場合は適しませんが、インスタンス化することなく、いつでも呼び出せるメリットがあります。 インスタンスメソッドは、インスタンス化しなければ呼び出せませんが、インスタンスが保有する「状態」に応じて動きに変化をつけることができます。(この辺がオブジェクト指向プログラミングの最たるメリットではないでしょうか)

0

>そもそも①の認識が間違っているのか? そうです。 (誤) >staticメソッドはstaticメソッドからしか呼び出せない。 (正) staticメソッドはstaticメソッドしか呼び出せない。 インスタンス・メソッドは「インスタンス・メソッド、staticメソッド」の両方を呼び出せる。

上記プログラム(*)はコンパイル・実行できるので、 「staticメソッドはstaticメソッドしか呼び出せない。」は誤りです。 (*) obj.hikuとすべきところがobj.hikutになっていました。   コピペのさいに「t」が入ってしまいました。

0

>2日間フルで調べても判らなかったので 2日間フルで調べても分からなかったから すぐに質問するなんてプログラミングに向かない 大成するプログラマーは自分で答えを出す 少ししか考えずにすぐに人に聞くプログラマーは大きくならない 2日なんて少なすぎ 最低でも1ヶ月は悩むこと

0

1は厳密には違います。 もし「真実」であれば、どうやってクラスオブジェクトにアクセスするのでしょうか。 JavaでもC#でもC言語でもC++でもメインメソッド(C言語とかだとメイン関数)はstatic扱いなはずです。 (CとC++は若干違うが、クラスオブジェクトじゃないっていう意味で) 一応staticからstaticでないオブジェクトにアクセスすることはできます。 ですがインスタンス化しないといけません。 2は1の理由から「使おうと思えば使える」が、「インスタンス化」しないといけない。 Class1 obj = new Class1(); ってやるアレです。 3は…もういいですよね。

不適切な内容が含まれている可能性があるため、非表示になっています。

投稿内容に関する注意
0

kakeruは、メソッドにゃ。 Calc04_5は、クラスにゃ。