• 締切済み

Javaの問題がわからない

Javaでわからないことがあります。 これの5行目がインスタンスメソッドなのはわかります。3行目はなぜインスタンスメソッドではなくstaticメソッドなのがわからないです。どういう違いですか?

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • akira1720
  • ベストアンサー率80% (127/158)
回答No.3

MethodB は中身がからっぽ(練習問題の目的とあまり関係ないので省略されている)なので、それを static メソッドして定義しなければいけない必然性についてはこの練習問題の中には書かれていません。ここでは static メソッドとインスタンスメソッドの呼び出し方などについて違いを学ぶのが目的で、どんなときに static メソッドを使うといいかはまた別のところで学ぶのでしょう。 インスタンスメソッドは、そのインスタンスの状態に依存して結果が変わってくるようなものに使います。例えばショッピングカートに入っている商品のリストを返すメソッドだったら、特定のショッピングカートの現在の状態が存在するのが前提ですよね。ショッピングカートクラスに static メソッドとして定義しても、毎回同じ値しか返せないので、役に立ちません。 逆に、static メソッドは、過去の経緯とか前提とか関係なく、同じ引数でそのメソッドを呼んでやると、いつでも同じ結果になるようなものに使います。Java 標準の Math クラスなんかはその典型ですよね。その前でどんな処理をしてようが、誰がショッピングしてようが、Math.sin(0) の結果は常に 0 になります。

  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.2

8行目でmethodB()はstaticメソッドだと宣言されています。 staticメソッドを呼ぶときは4行目にあるクラス名.メソッド名()の形が普通ですが、Testクラス内からmethodB()を呼ぶ場合はクラス名.を省略してmethodB()だけで呼ぶことができます。 これに対してmethodC()とmethodD()は9行目・15行目でインスタンスメソッドだと宣言されています。5行目・6行目はどのインスタンスに対してmethodC()やmethodD()を呼ぶのかを指定していないのでエラーになります。12行目はインスタンスメソッド内から同じクラスのインスタンスメソッドの呼び出しなので、インスタンスの指定を省略してmethodD()だけになっています。

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.1

インスタンスメソッドは、何故インスタンスメソッドというのかわかりますか?(質問を見る限りわかってなさそうなんだけど)

関連するQ&A

  • Javaのstaticメソッドの意味を教えて下さい

    Javaのstaticメソッドの意味を教えて下さい。 現在の解釈では、staticなメソッドとはインスタンスの生成に依存せず呼び出せる処理のことだと認識しています。逆にstaticでないメソッドは、生成後のインスタンスにしか使えない処理だと理解しています。 しかし、コンストラクタがstaticでないことに気がつき、疑問が生まれました。コンストラクタはstaticではないので、コンストラクタを呼び出す時にはそのクラスのインスタンスが必要になるはずです。しかしこのインスタンスを作るのにもコンストラクタが必要です。コンストラクタを使うためにインスタンスが必要で、インスタンスを作るためにコンストラクタが必要という無限ループになってしまいました。 そこで改めて、staticメソッドの意味を教えて頂きたいです。

  • Javaのメモリの管理

    なんか基本的なことなんですけど、ちゃんと把握していないなーと思って質問します。 staticメソッドを使用してしまうと、メモリ上に残ってしまうからあまり使うななどとよく言うと思います。これに対して、staticでないメソッドは使用されている間はstaticと同じように管理され、使用後に開放対象となるということなのか。というか、非staticメソッドは、2箇所から同時にアクセスされたらメソッド2つ分のメモリを使用するのか。その前に、staticメソッドであっても、同時に2箇所からアクセスされたら2つ分のメモリを消費するはずではないのか。 サーブレットでは、アクセスのあったサーブレットクラスがインスタンス化され、そのインスタンスが何度も使い回される、との記述を見たが、複数のアクセスがあったときに同時に処理ができるが、これは実質メモリ上に複数のメソッドが存在することにならないのか… ロードの際にはクラス単位で読み込まれるのか、メソッド単位なのか。staticメソッドと非staticメソッドが混在しているクラスでは、読込み、開放はメソッド単位で行っているのか。 などの疑問を持っています。以上、まとまりのない疑問ですが、なんとなく私がわからない部分はわかっていただいたのではないかと思います。この辺の話について、よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaの課題が全くわかりません。

    この前学校からJavaの課題が出まして、全くわかりません。 <テストクラス>(ファイル名:Test.java) <フィールド> なし <メソッド> 1.メインメソッド 「ここからはテストクラスの流れを書きます」 ・アドレスサーチクラスを生成 ・アドレスサーチクラスのInitialize()メソッドを呼ぶ ・アドレスサーチクラスのSearchName()メソッドを呼ぶ ・検索結果を表示する <アドレスサーチクラス>(ファイル名:AddressSearch.java) <フィールド> 1.アドレス配列(3000個分) <メソッド> 2.住所録ファイル入力設定 (メソッド名) public void Initialize() 「ここからはテストクラスの流れを書きます」 ・住所録ファイルから1行目入力 ・1行を各項目に分解 ・アドレスクラスのインスタンスを生成 ・アドレスクラスのインスタンスに分解した各項目を設定 ・アドレス配列にインスタンスを格納 3.氏名検索 (メソッド名) public Address SearchName(String name) 「ここからはテストクラスの流れを書きます」 ・アドレス配列から氏名を探す ・一致した氏名のインスタンスを戻す  一致しない場合、nullを返す 長くなりました。このような条件でプログラムを作るのは私にはあまりわかりませんでした。googleなどで検索してもあまり良い情報がありません。もしこの問題が解ける方がいらっしゃるなら、ぜひアドバイスやプログラムなどを教えてくれたらありがたいです。

  • javaの質問です。

    明日JavaのBronze試験を受けに行くのですが、全然わからずに困っています。 紫色のJavaプログラマBronzr[SE7]という本を使用しています。 本の模試の問題です。 37 Class Super{ static void method(){ System.out.println("Super"); } } Class Sub extends Super{ static void method(){ System.out.println("Sub"); } } Class Test { public static void main(String[] args){ Super obj = new Sub(); obj.method(); } } この問題はSuperが表示されるらしいのですが、理由がわかりません。 サブクラスをインスタンス化しているので、Subが表示されるというのなら理解できます。staticが関係あるのはなんとなくわかるのですが、、、、、、なぜSuperなのかがわかりません。 解答ではスーパークラスの型にサブクラスを入れているからと簡単に書いてあります。 詳しく説明していただけると助かります。

    • ベストアンサー
    • Java
  • Java 静的メソッドとインスタンスメソッド

    静的メソッドとインスタンスメソッドの使い分けがよくわかりません。 私の認識は 静的メソッド:インスタンスメンバ変数を参照する必要がない処理 インスタンスメソッド:インスタンスメンバ変数を参照して行う処理 と思っています。 よって、例えばDAOを作成する場合、select、update、insertを実行するメソッドを作成しますが、これらはクラスのインスタンスメンバ変数を参照する必要がないので静的メソッドにするべきだと思っています。 しかし、本やネットのDAOのサンプルプログラムはインスタンスメソッドで作成されています。 これらは、private static String の変数(SQL文が記述されている)を参照していますが、インスタンスメンバ変数は参照していません。 なぜselect、update、insertのメソッドをインスタンスメソッドにする必要があるのかわかりません。 静的メソッドとインスタンスメソッドの使い分けの基準を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaプログラム 合ってるかお願いします

    プログラムは非常に苦手なため合ってないと思いますが、合ってないのは何が正解かを教えてください。 よろしくお願いします 1 ローカル変数を全て答えよ args,num 2 インスタンス変数を全て答えよ num 3 インスタンスメソッド名を答えよ Example2 4インスタンスメソッドを呼び出している行 public class Example2{ int num; public static viod main(String[] args){ Example2 ex2 = new Example2(5); int a = ex2.getNum(); System.out.println(a); } Example2(int num){ this.num=num; } int getNum(){ return this.num; } }

    • ベストアンサー
    • Java
  • java public static

    java言語の「public static」について javaで使われる「public static」はどこからでもアクセスできるという意味で間違ってますか? またstaticがつくことにより静的なメソッドになり コードを読み込む際、複数のthreadになってしまうこともありますでしょうか? 意味が通じてなかったらスミマセン。

    • ベストアンサー
    • Java
  • staticメソッドはどう使う?

    質問させてください。 Java初心者です。 staticメソッドは、どのようなときに使用するのでしょうか。 mainはともかくとして、他の場合は全てインスタンスメソッドにしてしまえばよいと思うのですが・・・。 どなたか教えていただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Java
  • 「static宣言されているメンバ関数」は、「インスタンスメソッド」な

    「static宣言されているメンバ関数」は、「インスタンスメソッド」なのでしょうか? それとも、「クラスメソッド」なのでしょうか? 先日、下記内容で質問して、その時は分かったつもりだったのですが、 やっぱり分かってなかったようなので、教えてください。 ▽「クラス関数」「メンバ関数」「メソッド」の違いを教えてください。   http://okwave.jp/qa/q5858806.html 例) ▽前提 ・Aクラスのインスタンスa ・static宣言されたpublicメソッド「static_public_method」 ・static宣言されていないpublicメソッド「public_method」 ▽メンバ関数呼び出し ・$a->static_public_method() ・A::static_public_method() ・A::public_method() このとき、「$a->static_public_method()」は、インスタンス経由でアクセスすることになるので、 「インスタンスメソッド」になるのでしょうか。それとも、static(静的)宣言しているので、「クラスメソッド」になるのでしょうか? また、「A::static_public_method()」や、「A::public_method()」は、どちらになるのでしょうか? ※現在、頭の中がこんがらがっているのは、下記3点です。どれかひとつでも構わないので、分かりやすい考え方等あれば、ぜひ教えてください。 ・「static宣言したメンバ関数」は、「インスタンスメソッド」? 「クラスメソッド」? ・「スタティック」宣言してるのに、メンバ関数へ、「->(アロー演算子)」(オブジェクト経由)でアクセスできる理由 ・「A::static_public_method()」と「A::public_method()」の違い

    • ベストアンサー
    • PHP
  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java