• ベストアンサー

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

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

noname#106387
noname#106387
  • Java
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.2

staticなフィールドをstaticでないメソッドから見ることは普通に可能です。 ただしstaticなフィールドは仮想マシンに1つしか存在しないので、 1つ変更すると同じクラスすべてに影響します。 ---例--- class Hoge {   private static String nr;   public static void main(String[] args) {     Hoge hg1 = new Hoge();     Hoge hg2 = new Hoge();     hg1.nr = "fuga";     hg2.method();   }   private void method() {     System.out.println(nr);   } } ---結果--- > java Hoge fuga ------ hg1.rに"fuga"を代入すると、hg2.nrも"fuga"になります。

noname#106387
質問者

お礼

お忙しい中、回答くださってありがとうございました! とても分かりやすい回答をくださったにもかかわらず、 質問する時点で頭が悪いので、問題が解決できませんでした。 それで、質問を変えようと思います。 よろしければ、そちらの質問にも回答をくださると幸いです。 ありがとうございました!

その他の回答 (1)

回答No.1

private void Kensaku() {  nr = "aiueo"; } で、いけるのではないでしょうか? もし、mainとkensakuのメソッドが違うクラスに定義してあるのであれば、 staticフィールドをpublicに変えて「クラス名.フィールド名」で試してみて下さい。

noname#106387
質問者

お礼

お忙しい中、回答くださってありがとうございました! 質問の時点で、自分の思い込みが入っていたので、 問題を解決できませんでした。 それで、新しい質問を書こうと思います。 そちらの方にも回答をくださると幸いです。 ありがとうございました!

関連するQ&A

  • 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
  • mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつ

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

    • ベストアンサー
    • Java
  • メインメソッドのstatic

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

    • ベストアンサー
    • Java
  • 非staticフィールドを参照できない理由とは

     java勉強中です、宜しくお願いします。  下のようなプログラムを書き「Test1」をコメントアウトしたら、 「非staticフィールドをstatic参照できません。」というエラーが 出ました。  「Test1 t」をグローバル変数で定義したのですが、やはりを 「static」からは見れないということでしょうか。  「main」は特別な関数というのは分るのですが、staticフィールドとか クラスオブジェクトしか、main()からは覗けないという設計思想(?) とかはどのようなものなのでしょうか。  逆に覗けるのが可能ならばどのような不都合が生じるのでしょうか。  何かしら非常に不便を感じて使い勝手が悪いという気がして仕方ない のですが、特別にこうしなけらばならないとか、今までの他の言語であ った不具合(ex 隠蔽機能)を更に強化したためとかと言う理由があるの でしょうか。  ========================================================== public class Test1 { Test1 t; void calc() { int a = 2; int b = 3; System.out.println(a+b); } public static void main(String args[]) { /*Test1*/ t = new Test1(); t.calc(); } }

    • ベストアンサー
    • Java
  • Java main関数内でStatic変数使えない

    JavaのStatic変数について質問です。 Main関数の中でStaticな変数を定義しようとしたところ、 final修飾子しか使えませんというエラー文言が出ます。 Main関数内でわざわざStatic変数を使用する必要はないのですが、 出来ないと言われると何故だろうと思ってしまいます。 どなたかご説明いただけないでしょうか? -------------------------------------------------------------------- class Test { public static void main(String[] args) { // 宣言時Staticは使えなく、finalでしか定義できないとエラーが出る Static int test_val = 10; // 表示 System.out.println(test_val); } }

    • ベストアンサー
    • 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と+=の意味を・・・

    いろいろ調べたのですが、staticはクラスフィールドやクラスメソッドの宣言などに使うと書いてありますが、public static void mainとか以外に見たことありませんし使ったこともないんです・・・。 なのでイマイチ理解できません・・・。使い方を教えてください。あと、+=加算代入と書いてありますが、これもよくわかりません・・・。 なんか一語一語「これってどういう意味なんだろう?」とかって思うと調べても漠然とした説明ばかりで理解に苦しみます。 なにかいいアドバイスがあれば教えてください。よろしくお願いします。

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

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

    • ベストアンサー
    • Java
  • [クラス名].[メソッド名].[メソッド名]という書き方。

    javaを勉強している者です。 少しピンと来ない書き方があるのですがそれはタイトルの通りの書き方で、具体的には Main.getMailStore().isNewMail() という書き方です。MailというのがクラスでgetMailStore()というのがそのクラスで宣言されているメソッドで下記のように実装されています。(MailStoreというのはインターフェースとして別のファイルで宣言されています。) private static MailStore _mailStore; public static MailStore getMailStore(){ return _mailStore; } (MailStoreというインターフェースの中にisNewMailというメソッドは宣言されています。) public interface MailStore{ public boolean isNewMail(String uid); } これらだと、最初のMain.getMailStore().isNewMail()というのは、 「まず、MainクラスのgetMailStoreメソッドを呼び出して、そこでreturnされてくるMailStore型のクラスの中の、isNewMailメソッドを呼び出している」というのを一回で書いてしまっている書き方ということで合っているでしょうか?少しピンと来ないので・・(特にreturnされるメソッド(getMailStore)にそのまま.[メソッド]という書き方をのっけるあたりが) よろしくお願いします。

    • ベストアンサー
    • Java
  • メソッド宣言内でクラス名が書かれる理由

    public static void main(String arg[]){ 上記は、メソッド宣言ですが、このメソッド宣言の中に書かれているStringは、「標準クラスの1つ」だと聞いています。(標準クラスの意味さえ僕はわかりませんが、、参考書に書かれてあるのを見てもチンプンカンプン) 何故Stringは標準クラスの1つなのに、メソッド宣言の中に書かれているんですか? 質問1:私の仮説では、メソッドがどこのクラスに属するかを明示するためにメソッド宣言内にStringが書かれていると考えてます。それでよろしいですか? 質問2:メソッド宣言とは本質的にどういうことですか?プログラミング初心者の僕でもわかるように解説お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう