• ベストアンサー

staticメソッドはどう使う?

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

  • ryu-e
  • お礼率72% (202/278)
  • Java
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • public_sa
  • ベストアンサー率52% (13/25)
回答No.2

staticが良い例 int 足し算 (int a, int b) { return a + b; } staticでは出来ない例 int 足し算 (int b) { return this.a + b; } つまり、 受け取ったパラメタをそのまま演算して 返す場合はstaticが良いと思います。 そして、クラスローダーのロード時期にやメモリ配置においても staticの方が高速にアクセスできます。 簡単に言うなら 非static・・・引き出しにしまった書類 static・・・机の上においた書類 といったところでしょうか。

ryu-e
質問者

お礼

ありがとうございます。 とてもよくわかりました。

その他の回答 (1)

回答No.1

例1) そもそもインスタンス変数とか要らなかったり関係ないもの http://download.oracle.com/javase/7/docs/api/java/lang/Math.html#sin%28double%29 http://download.oracle.com/javase/7/docs/api/java/net/InetAddress.html#getLocalHost%28%29 例2)SingletonパターンとかAbstract Factory パターンとか知ってみるといいかも http://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

ryu-e
質問者

お礼

ありがとうございます。 未知の用語がでてきたので、勉強させていただきます。

関連するQ&A

  • mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつ

    mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつけなければならないのでしょうか? そのような記述を見掛けたのですが、もしこれが正しいという場合、 それは、なぜなのでしょう? java初心者ですが、どうぞ宜しくお願いいたします。 class MainClass{  //先頭のstaticに注目  static void sub(){   ~~  }  //mainメソッド  public static void main(String[] args){   sub();  } }

    • ベストアンサー
    • Java
  • staticメソッドにするかどうかの判断

    staticメソッドの使いどころについて質問させてください。 まず、メソッドの内部で、そのメソッドが定義されているクラスのイ ンスタンス変数を使用している場合は、そのメソッドはインスタンス に依存するので、インスタンスメソッドにしかできないのはわかり ます。疑問なのは、「じゃあこのメソッド内でインスタンス変数を使 わないで引数で渡せるように作れば、インスタンスに依存しないの でstaticにしていいの?」(※)ということです。 さらにこうも思います。 なんとなくですが、※のようなことをしたらオブジェクト指向の意味 がない気がします。理由ははっきりわかりません。ほんとになんとなく です。(奇跡的にあたっていたとしても、理由を教えて下さいm(_ _)m) そして、さらに混乱するのが、ユーティリティの関数などでstaticメ ソッドになっているのを見ました。この場合はどうしてメソッドの引 数を指定するようにしていて、クラスのインスタンス変数を使うこと はしないのか。 以上、大変下手な文章ですが、混乱しているポイントが伝わったでし ょうか? よろしくお願いします。

  • staticなフィールドをstaticじゃないメソッドで使うには?

    いつもお世話になっています。よろしくお願いします。 javaで、staticなメインメソッドからも、staticじゃないメソッドからも1つの メンバ変数(フィールド)を処理したいと思います。 private static String nr; というフィールドを宣言しました。 (staticであるmainメソッドの中で使えるようにstaticで宣言しようと思いました。) 次に、 private void Kensaku() { このstaticではないメソッドの中でString nrを使って処理を行いたいです。 } 初歩の初歩なことを質問してすみませんが、調べても分かりませんでした。 どうか、よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのstaticメソッドの意味を教えて下さい

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

  • メインメソッドのstatic

    javaでstaticは静的という意味があると思うのですがメインメソッドにも使われていますよね? public static void main(String[] args) publicはどこからでもアクセスできるという意味だったと思うのですが メインメソッドにstaticがついている意味などはあるのでしょうか? 素朴な疑問です。

    • ベストアンサー
    • Java
  • 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)); } }

    • ベストアンサー
    • Java
  • メソッドの呼び出し方(static参照したくない場合は??)

    いつもお世話になっております。 いつまで経ってもJavaが理解できないでいる初心者tak315です(涙) 今作っているWebアプリで、開発者全員が使う共通クラスがあります。 メソッドを呼び出したいのですが、 *-------------------------* 型 [クラス名] から非 static メソッド [メソッド名]に static 参照することはできません。 *-------------------------* というエラーがでます。 どちらもstaticじゃないので、そりゃそうなんでしょうが、 static参照しない場合の呼び出し方がわかりません。 eclipseのアシストだと、呼び出し元をstaticにすればいいじゃん。 と言われるのですが、共通クラスなので、勝手に変更できません。 メソッドの呼び出し方自体まだよくわからず、 大変困っております。。。 [クラス名] [小文字クラス名] = new [クラス名].[メソッド名()]; なんて書けば使えるんじゃ…と思ったけど、使えませんでした。 なにぶん、Javaをわかっていないもので、 説明不足なところがあるかも知れません。 補足でいくらでも答えますので、 足りていない説明などもご指摘いただければありがたいです。 そして、やさしく教えてほしいです。。。 どうか、よろしくお願い致します。

    • ベストアンサー
    • 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メソッドの長所短所

    初めまして。 c言語からjavaの勉強を始めたものです。 javaには共通ライブラリをstaticなメソッド(この言い方に慣れない)で作ることが多いようですが、なぜですか? 私の認識は、 staticはメモリの共有領域に確保され誰からも参照できる。 よって、メモリの効率的な確保が出来る。 でも、メソッドを共有領域に持つと各ユーザからそのメソッドが呼ばれたときに同じメモリをさすメソッドが使用される。 つまり、違うユーザがパラメタ違いで同じメソッドを使用すると、処理の途中でパラメタが書き換わってしまう可能性があるかと思います。 これって問題ないのでしょうか? Sumple public static boolean check(String str){ if(str==null){ return false; } int num = Integer.parseInt(str); if(num < 0){ retrun true; } else { retrun false; } } こんなメソッドがあり、パラメタが「2」の人と「-10」の人が同時にアクセスすると結果が変わりそうな気がします。 よろしくお願いします。

  • staticなフィールドをstaticじゃないメソッドで(改)

    いつもお世話になっています。よろしくお願いします。 JavaからOracleへの接続は成功しています。 キーボードからの入力に対し、 データベースから検索し、合致するものを表示するプログラムを作成中です。 何が問題か分からないので、出来る限りのことを書きたいと思います。 ソースを短くまとめると、 Public class Sql { private static String nr; //キーボード入力を受ける private static Statement stmt; public static void main(String args[]) { Sql banana = new Sql(); // インスタンス生成 BufferedReader nrnr = new BufferedReader(new InputStreamReader(System.in)); nr = nrnr.readLine(); banana.kensaku(); // 検索メソッドの呼び出しです。 } private void kensaku() { ResultSet rset = stmt.executeQuery("select * from empjv where nama_kana like 'nr%'"); } } ソースを書くと長くなりますが、問題部分が分からないので、申し訳ありません。 キーボード入力をnrに受けているのですが、 メソッドでまったく検索して来ません。 ためしに、'nr%'→'ヤマ%'と書いてコンパイル、実行してみると、 ヤマウチ ヤマムラ ヤマモト などなどデータベースから合致するものを表示して来ます。 それで、問題はnrにあると思ったのですが。 フィールドの宣言が悪いのか、キーボードからの読み込みが悪いのか、 メソッド内での使い方が悪いのか。。。 さっぱり分からなくて困っています。 どうか、よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう