• ベストアンサー

staticな有効範囲の配列の作り方(Java)

ブロック内(ローカル)以外でも使える配列をつくるにはどうすればいいでしょうか? Javaは配列を宣言、生成する必要がありますが、同じ配列を(同じクラスの)複数のメソッドで使うたびに毎回宣言、生成しないほうがコスト削減になると思いましたので。 宣言、生成する位置、それぞれに何かキーワード(static?)をつけるのが条件と思われますがどうでしょうか。 今回はint型の要素数2の配列aを使います

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 同一クラス内でよければ、フィールド変数と呼ばれるところに宣言すればよいです。 public class Test { //ここがクラス内から参照できる宣言 private int[] a = { 10, 20 } public void a() { // ここだとローカル変数 int[] b = new int[2]; System.out.println ( a[0] ); } public void b() { System.out.println ( a[0] ); } } こうすれば、A,Bともにaの参照が可能です。 staticはまた別の話になります。

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

その他の回答 (2)

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.3

No.1 の補足について private/public は、カプセル化という哲学(中略)なので、さして意味がありません。 マルチスレッド云々は、デバッグ困難な同期処理を(中略)なので、必要になるまで考えずとも良いです。 this は、メソッド内から変数を特定するための書き方で、お決まりすぎて省略可能な程です。 というわけで、本質的な回答としては class こうすれば複数のメソッドで同じ配列オブジェクトを使いまわせます { int[] a = new int[2]; void 書く(){ a[0] = 1; } void 読む(){ 表示(a[0]); } } obj = new こうすれば複数のメソッドで同じ配列オブジェクトを使いまわせます(); obj.書く(); obj.読む();

studenteacher
質問者

お礼

二人以上にありがとうポイントを差し上げられるのなら差し上げたいところでした。

全文を見る
すると、全ての回答が全文表示されます。
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.1

class 一般的な共有のしかた { private int[] a = new int[2]; public void 書く(){ this.a[0] = 1; } public void 読む(){ 表示(this.a[0]); } public void 書いて読む(){ this.書く(); this.読む(); } } class マルチスレッドでも安全な共有のしかた・ちょっとダサいのが難点 { public void 書く(int[] a){ a[0] = 1; } public void 読む(int[] a){ 表示(a[0]); } public void 書いて読む(){ int[] a = new int[2]; this.書く(a); this.読む(a); } }

studenteacher
質問者

補足

こちら側の都合で申し訳ないですが、まだ文法の知識(特にクラス)がかなり未熟なので 「private, public, 'this.', マルチスレッド」の言葉の意味をまだよく理解できていません。 漠然と「非公開にする」「公開する」「このクラスの」「複数の処理の並行」といった意味であるとだけは分かりますが...

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

関連するQ&A

  • javaの配列

    javaの配列なんですが、配列の全要素一気にメソッドを実行させることができますか? 例えば、 Turtle[] hm = new Turtle[3]; for(int i = 0; i < 3; i++){ hm[i] = new Turtle(); } と配列を生成し、fd(int s)←[sピクセル前進]というメソッドを配列の全部の要素を順番ごとにではなく全部同時に実行させたい場合、コードはどのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • 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宣言について

    現在、c言語とDXライブラリを使ってゲームを製作しています。 http://okwave.jp/qa/q8270456.html 前回、このような質問をさせていただき、原因らしき箇所を突き止める所までいきました。 と言いますのも、配列の要素を指定する箇所(分かり辛かったらすいません。要素数ではありません)に、static宣言された変数を入れるとなぜかプログラムが強制終了されてしまうのです。 加えて、DXライブラリのGetColor関数にも返ってきた色をStatic宣言された変数に格納すると、何故か指定された色と違う色が出てしまうことが分かりました。 なんとか、その関数が終わる度に値を格納したかったので、色々試しました。 直接Static宣言されていない変数を間に噛ませてみたり、同じcpp内にわざわざ別の関数を用意して、そちらでStatic宣言し、値を返してみたり、と色々とやったのですが上手くいきませんでした。 ****************************************** int hairetu[20]; Static int z = 0; int x = z-1+1 hairetu[x] = zahyouX; (static宣言された変数zでhairetu[]の[]内を指定しようとするとダメ) (上記のように意味のない計算をさせてstatic宣言されていない変数を間にかませてもダメ) ****************************************** 結局の所、別のcppを用意して、ただ一つのStatic変数を+1していくだけの関数をくみ上げた所、上手くいったのですが・・・。何故このような事が起きるのでしょうか。 Static宣言された変数の決まりごと、もしくは、このような状態になってしまった原因など、見当がつきましたら教えていただけると有難いです。よろしくお願いします。

  • 【JAVA】配列の要素の平均について

    JAVAで質問となります。 以下のプラグラムを教えていただきたいです。 ____________________ n 個の要素で構成される int 型の配列を引数として受け取り,配列内の全要素の平均値を返すメソッドを作成してください. また,コマンドライン入力に整数値を入力すると,作成したメソッドを使用して,入力した整数値の平均値を求め,結果を標準出力に出力するプログラムを作成してください. このプログラムを作成する際は,以下の要件を満たすように作成してください:  【メソッド】 配列内の全要素の平均値を求めるメソッドは,以下の仕様とする: メソッド名:calcAverage 引数:配列 - int 型の配列 戻り値:平均値 - double 型 内容:引数として受け取った配列のすべての要素の平均値を計算する.  【入力】 整数値のデータは,コマンドライン入力に入力する. その際,各整数値は,半角スペースで区切る.  【出力】 コマンドライン入力に1つ以上の整数値が入力された場合は,それらの平均値を出力する. コマンドライン入力に何も入力されなかった場合は,何も出力しない. 平均値の出力は,全体を左詰めで小数点以下2桁まで出力する. 行の先頭には空白を入れず,行の左端から出力する.

  • 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 変数について 今、C++を勉強しているのですか、static変数がどのように動くのかよくわかりません。 下のプログラムのint a はローカル変数だから、ブロックを抜けたら、初期化されるためstatic変数にして、ブロックを抜けても値を保持するようにすってことはわかるのですが 毎回このブロックに入る度、static int a = 0;を読むことになり、その前に入っていた値はなくなるのではないでしょうか?それとも,static int a と書かれていると,1度しか実行されないから、値が保持され続けるのでしょうか? int add (int x ) { int a = 0; a += x; return a; }

  • 「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
  • javaの乱数生成プログラム-バグを教えてください

    こんにちは。Web上で「重複しない乱数」を作るプログラムをいくつか見まして、どれもこれも何でこんな複雑なステップを踏むのであろう思い、どーだこんなに簡単に作れるじゃん・・・と0-9までの整数で乱数を生成するプログラムを書いてみたんです。これならAPI調べなくたって基本を身につけていれば誰でも書けると・・・けど、生成する乱数の数が100個とか200個とかなら問題ないんですが、例えば9桁の乱数を10000個作るように設定しても7500個くらいしかListに入りません。原因がどこにあるかお教えいただけますでしょうか。なにとぞよろしくお願いします。 import java.util.ArrayList; import java.util.List; public class RandomExec { static int idLength=9; //乱数の桁数を指定 static int elmSize=100; //生成する乱数の個数を指定 static List<String> list = new ArrayList<String>(); //乱数を格納するリスト public static void main(String[] args) { addList(); //生成された乱数を要素に持つリスト list を取得 //要素をひとつずつコンソール出力 for(String s : list){ System.out.println(s); } } //リストに入れるための乱数を生成するメソッド public static String addId(){ int[] id=new int[idLength]; //int配列idを宣言(要素数=乱数の桁数) String s=""; String str; //配列にMath.random()で取得した要素を入れる for(int i=0; i<idLength; i++){ int n=(int)(Math.random()*10); id[i]=n; } //指定した桁数(この場合は9個)の数字から成るString s を得るため //int型配列idの要素をStringに変換し、すべての要素を連結する for(int n : id){ str = String.valueOf(n); s+=str; } return s; //生成されたStringを返す(下のaddList()メソッドに返しています) } //addIdメソッドで作った要素候補をチェックし、重複がなければListに加えるメソッド //List list の要素数が変数elmSizeで指定した乱数の数と同じになるまで繰り返す public static void addList(){ while(list.size()<elmSize){ //addIdメソッドでlistの要素候補strを取得 String str = addId(); //listに候補と同じ文字列を持つ要素が存在しなければlistに加える if(!list.contains(str)) list.add(str); } } }

    • ベストアンサー
    • Java
  • (クラス関連)staticキーワードの利用価値が分かりません。

    PHP4または5(どちらかというと、PHP5)の環境で作業をしています。 現在、クラスの扱い方の勉強をしていて、 少しずつ分かるようになってきてはいるのですが、 staticキーワードを使った静的メンバ、静的メソッドの考え方、利用価値が いまいちよく分かりません。 インスタンスすることにより、オブジェクトを生成し、 そこからクラス内のメンバ(プロパティ)や、メソッドを操作するのとは異なる!、 という仕様は分かるのですが、 「それが一体、なんなのょ。(笑)」 と思えてなりません。 どなたか、staticマスターがいらっしゃいましたら、 私の疑問を一刀両断して下さい。 お願い致します。

    • ベストアンサー
    • PHP