• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メソッドの呼び出し方(static参照したくない場合は??))

メソッドの呼び出し方(static参照したくない場合は??)

このQ&Aのポイント
  • Java初心者が非 static メソッドの呼び出し方について困っています。特定のクラスから非 static メソッドを呼び出す方法が分かりません。
  • 共通クラスで非 static メソッドを呼び出したい場合、static参照しない方法が知りたいです。また、共通クラスなので他のクラスを変更できません。
  • Javaの非 static メソッドの呼び出し方が分からず困っています。[クラス名] [小文字クラス名] = new [クラス名].[メソッド名()]; のように書いてもうまく動作しません。

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

  • ベストアンサー
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

static参照しないとは、 「インスタンスを生成して、インスタンス内でメソッドを呼び出せ」 ってことです。 class A{ public int getX(){ return this.x; } } というクラスがあった場合、 int ans = A.getX(); と呼び出すと非static云々のエラーになります。 A a = new A(); int ans = a.getX(); これならOKです。 でも、クラスの考え方が間違っているように思いますので、 共通クラスをstaticメソッドにするかどうか、 あなた一人の問題ではないので、勝手に修正するんじゃなくて、 システム全体の問題として全員で考えた方がいいですよ。

tak315
質問者

お礼

できましたっ(o^▽^o) 本当にありがとうございます! DBのコネクションをとるクラスだったのですが、先輩が、staticはやめたほうがいい、ということだったので…(なぜかは、私はわかっていませんが。)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  •  static 参照するには??

     static 参照するには??  Java初心者です、宜しくお願いします。  下のようなプログラムを書きましたが、「Container gc = getContentPane();」 の箇所で、「型 JFrame の非 static メソッド getContentPane() を static 参照することはできません」とエラーが出ます。 意味がわかりません、またどのように変更してやればよいのでしょうか。 宜しくお願いします。  ======================================================================= class Canvas1 extends JFrame { public void paint(Graphics g) { g.drawRect(150, 150, 50, 50); } } public class SimpleDraw extends JFrame { public static void main(String[] args) { JFrame jf = new JFrame(); JPanel jp = new JPanel(); Container gc = getContentPane(); gc.add(jp); Canvas1 c = new Canvas1; jp.add(c); jf.add(jp); jf.setVisible(true); } }

    • ベストアンサー
    • Java
  • javaのstatic メソッドのthisについて

    javaの『static メソッド』の中では、thisが使用できないようです(下記のコード参照)。 毎度、お世話になります。 Q1) このthisに代わる記述、方法はありますか? static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } 以上、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • 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 methodの引数thisについて

    javaの『static メソッド』の中では、thisが使用できないようです(再質問)。 毎度、お世話になります。 出来れば、下記のコードでthisの部分の変更をお教え頂けないでしょうか? 尚、この場合のthisは、myclsFFTクラスの中の、Thread(this)の引数と なっています(下記のコード参照)。 Q1) このthisに代わる記述、方法はありますか? static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } 以上、宜しくお願い申し上げます。 ========================================== public class myclsFFT extends myDrawClass implements Runnable{ myclsFFT(){ } static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } ...... } ==========================================

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

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

  • クラス変数/メソッドとインスタンス変数/メソッドの見え方について

    Javaの言語仕様(?)についてお教え下さい。 参照変数の型がインスタンスのスーパークラスの型の時、クラス変数/メソッドとインスタンス変数/メソッドの見え方が納得いかずに困っています。 以下のような条件の時です。   ・クラスが2つあり、1つはもう1つのクラスを継承しています。     それぞれを「スーパー」「サブ」と以下で呼びます。   ・インスタンスは"サブ"の型です。   ・上記インスタンスへの参照変数は"スーパー"のクラスの型です。   ・"スーパー"、"サブ"ともに【同名】の「クラス」変数/メソッド、「インスタンス」変数/メソッドがあります。 この場合に、"サブ"のインスタンスを参照している"スーパー"の型の変数を介し、それらにアクセスしたらどれが見えるか?という疑問です。 実験結果では以下のようになりました。           [フィールド]  [メソッド]   [1.static ]  スーパーの   スーパーの   [2.非static]  スーパーの   サブの 納得いかないのは「2.非static」で「フィールド」が、「スーパーの」になるところです。 これも「サブの」になると思っていました。 なぜサブクラスのが見えないのでしょうか? 同名の変数なのでスーパークラスのはサブクラスので隠れされ、サブクラスのが見えると思っていたのですが。 参考書には以下のように書いてありました。   フィールドの場合、参照変数の型のものが見える。   メソッドの場合、インスタンスの型のものが見える。 私には不自然に感じられるのですが、「こういう仕様だから。」と納得するしか無いのでしょうか? 「なぜこうなるか」について説明がある文献、サイトなどありましたらお教えください。 参考までに以下が実験したサンプルコードと結果です。長くて申し訳ありません。 「サンプルコード」 public class Super { static int staticField = 10; int instanceField = 100; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class Sub extends Super { static int staticField = 90; int instanceField = 900; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class TestStatic { public static void main(String[] args) { // インスタンスはSub、参照変数もSub、という状態。 Sub sub = new Sub(); System.out.println( "実験1" ); System.out.println( "1.クラス変数      " + sub.staticField ); System.out.print( "2.クラスメソッド    " ); sub.staticMethod(); System.out.println( "3.インスタンス変数   " + sub.instanceField ); System.out.print( "4.インスタンスメソッド " ); sub.instanceMethod(); // インスタンスはSub、参照変数はSuper、という状態。 Super sup = new Sub(); System.out.println( "実験2" ); System.out.println( "5.クラス変数      " + sup.staticField ); System.out.print( "6.クラスメソッド    " ); sup.staticMethod(); System.out.println( "7.インスタンス変数   " + sup.instanceField ); System.out.print( "8.インスタンスメソッド " ); sup.instanceMethod(); } } 「結果」 実験1 1.クラス変数      90 2.クラスメソッド    staticField = 90 3.インスタンス変数   900 4.インスタンスメソッド instanceField = 900 実験2 5.クラス変数      10 6.クラスメソッド    staticField = 10 7.インスタンス変数   100 8.インスタンスメソッド instanceField = 900 納得が行かないのは7のところです。 以上よろしくお願いいたします。

    • ベストアンサー
    • Java
  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • 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
  • private voidなメソッドはstatic コンテキストですか

    コンパイルエラーで、 「static コンテキストから参照することはできません」 と表示されます。 ソースにstaticという文字は有りません。 private voidなメソッドはstatic コンテキストですか? [Foo.java] import com.nttdocomo.ui.*; public class Foo extends IApplication {  public void start() {   Display.setCurrent(new MyPanel());  } } class MyPanel extends Panel {  private void e() {   Bar.DShow(Dialog.DIALOG_ERROR, "", "");  } } [Bar.java] import com.nttdocomo.ui.*; public class Bar {  public void DShow(int type, String title, String body) {   Dialog d = new Dialog(type, title);   d.setText(body);   d.show();  } }

    • ベストアンサー
    • Java
  • javaのstatic や コンテキスト 意味

    Javaを最近始めました。 以下のエラーメッセージの意味がわかりません。 static でない メソッド XXXXX(java.lang.String) を static コンテキストから参照することはできません。 あと、mainがstaticが付いている理由も知りたいです。

    • ベストアンサー
    • Java