Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

クラス配列について

はじめまして。

Javaソースで、クラス配列に情報を保存しておきたく、
以下のようにソースを書きました。
以下のソースで、コンストラクタでクラス配列で宣言したloginfo[2] にそれぞれ値を入れたのですが、

中の情報をOutputしてみると、
両方とも後にいれたlog_info(0,"S2",24)の
データになってしまいます。

どうにも何故そうなってしまうのかが判りません。

どなたかお分かりになる方がいましたらお願いします。


public class log_info {

   public static int task_id;
   public static String task_name;
   public static int task_line_num;
   public static log_info[] loginfo = new log_info[2];
    
   log_info(){ //コンストラクタ
    task_id = 0;
    task_name = null;
    task_line_num = 0;
    }    

    log_info(int id, String name, int line_num){
    //コンストラクタ2
    task_id = id;
    task_name = name;
    task_line_num = line_num;
    }
    
     public static void taskinfo_init(){

    loginfo[0] = new log_info(0,"S1",12);
    loginfo[1] = new log_info(0,"S2",24);
        
     }
    
}

7

回答

84298

閲覧

7件の回答

評価

0

>中の情報をOutputしてみると、

ここ部分をどうやったのか書いてください。

評価

0

すみません。ソースが見にくくなると思い、例からは
抜いてしまいました。
実際は以下のようにOutputしていました。
コンストラクタを使った後にfor loopで
出力しています。

また、先程は書き忘れてしまいましたが、
loginfo[i].task_nameのtask_name部分等のクラス内の
フィールドを参照しようとすると、
staticにアクセスする必要があります。との警告文が
出てきていました。
staticなアクセスというのはどういった物になるんでしょうか。



public static void taskinfo_init(){

    loginfo[0] = new log_info(0,"S1",12);
    loginfo[1] = new log_info(0,"S2",24);

  for(i=0; i<2; i++){
    System.out.println("Info"+i+"  "+loginfo[i].task_id+ " "+loginfo[i].task_name +" "+ loginfo[i].task_line_num);
    }     
 }

評価

0

staticの意味分かってますか?

評価

0

あ・・・・、そですね。
staticは1クラスで共有する値でした。

ボケた事を聞いてすいません・・・・。

評価

0

そもそも俺のつっこみすら必要なかったか。orz

評価

0

いえいえ、つっこみありがとうございます。

評価

0

ところで、

>loginfo[i].task_id+ " "+loginfo[i].task_name +" "+ loginfo[i].task_line_num

こういうのはtoString()メソッドかなんかで実装すると良いかも。

その前にプロパティがpublicとかgetter/setterなくていいのかとかの話もあるけど。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。