###前提・実現したいこと
javaのプログラムで、static変数を持つクラスについて、その変数を初期化する動作をプログラム中で1回だけされるようにしたい。
###該当のソースコード
java
1 public class Main{ 2 public static void main(String[] args){ 3 Sabu sabu1 = new Sabu(); 4 System.out.println(sabu1.getX(3)); 5 sabu1.setX(3,6); 6 Sabu sabu2 = new Sabu(); 7 System.out.println(sabu2.getX(3)); 8 } 9} 10 11 12public class Sabu{ 13 private static int[] x = new int[5]; 14 public Sabu(){ 15 //初めてこのクラスのインスタンスが生成されたときだけこの初期化を行いたい。 16 Sabu.x[0] = 5; 17 Sabu.x[1] = 4; 18 Sabu.x[2] = 3; 19 Sabu.x[3] = 7; 20 Sabu.x[4] = 10; 21 } 22 public int getX(int i){ 23 return this.x[i]; 24 } 25 public void setX(int i,int n){ 26 this.x[i] = n; 27 } 28}
###質問
たとえば、上記のようなプログラムがあったときに、
Sabuクラスの持つstatic変数xが、それぞれ5,4,3,7,10に初期化されると言う動作が、Mainメソッド内で最初にSabuインスタンスが作られた時だけに呼ばれて、
2回目にSabuインスタンスが作られた時には5,4,3,7,10に初期化されないようにしたいと言うことです。
今の状態で実行すると、
7
7
という結果になりますが、
求めるのは、
7
6
となることです。
###試したこと
Sabuクラスに、たとえば、
java
1public static void setUp(){ 2 Sabu.x[0] = 5; 3 Sabu.x[1] = 4; 4 Sabu.x[2] = 3; 5 Sabu.x[3] = 7; 6 Sabu.x[4] = 10; 7}
というメソッドを作り、
メインメソッドの最初にSabu.setUp()という行を足せば、確かに目的の動作はしますが、
これだと、Sabuクラスの持つ変数の初期化をMainクラスに任せてしまっていることになり、自分が求めているものとは違います。
もちろん、同様に、メインクラス内に変数初期化メソッドを作るのも自分が求めていることとは違います。
自分が求めている動作は、
Sabuクラスのインスタンスが初めて作られた時のみ実行されるような書き方などが知りたいです。
static変数が配列でなければ、変数宣言の時に
private static int x = 6;
とやればいいだけなのですが、
配列の場合、どうすればいいのでしょうか?
長くなってしまいましたがどうかよろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。