dポイントプレゼントキャンペーン実施中!

一つのクラスの中にある変数の値を、二つの別なクラスから呼び出して、その二つのクラスのどちらから変数を参照しても同じ値が帰ってくるようにしたいのですが、いろいろ調べてもできなかったので質問させていただきますm(_ _)m

// 共有化させたい変数を持つクラス
// Var.java
public class Var{
 public static int i;

 public Var(int i){ this.i = i; }
 public Var(){}

 public static void getI(){
  return i;
 }
}

//クラス1
//Class1.java
public class Class1{
 Var var = new Var(1);
}

//クラス2
//Class2.java
public class Class2{
 Var var = new Var();

 System.out.println(var.getI());
}

とした場合、Class1を実行し、次にClass2を実行すると、クラス1で定義した変数の値である 1 が戻ってくるようにしたいのですが、上記の方法では、Class2を実行すると結果は 0 になってしまいました。
まだまだ習い始めたばかりでいまいちstaticを使い切れていないと思います・・・

たとえば、PrintStreamクラスの
public static final PrintStream out
というのはどこから参照しても同じ結果なのでそのようなやり方で大丈夫だろうと思ったのですが・・・

このような方法では共有化させることはできないのでしょうか?またできないのでしたらほかのやり方がもしあった場合は教えていただきたいと思います。
どうかお願いします。

A 回答 (4件)

Class1 のインスタンス


Var var = new Var(1);
Class2 のインスタンス
Var var = new Var();
これは、それぞれ別物を指しています(だって、自分で new と書いて新しく生成しているじゃないですか!)。

Class1 で値を入れた static 領域を Class2 で参照するには、

public class Class2{
// Var は大文字(クラス名)
 System.out.println(Var.getI());
}

とします。「クラス名.staticメンバ」という書式です。ただし、共有されるためには同じ Java VM 上実行されることが条件です。

※参考
public Var(int i){ this.i = i; }
この書き方は実行はできますが、意味的には正しくありません。staticメンバ は new しないでアクセスされることが前提なので、
Var.setI(i);
Var.i = 1;
というような書き方が良いと思います(new はしません)。
    • good
    • 2
この回答へのお礼

なるほど…。
確かに、明らかにnewと書いているわけですから、別なメモリ空間に同じクラスオブジェクトが生成されるわけなんですねっ~。
よく分かりました!
ありがとうございました。

お礼日時:2003/12/20 20:53

あれ、ryo3って、ダックスフンド飼ってない?


人違いかな?

この回答への補足

犬は飼いたいんですが、飼っていないですねぇ~。
人違いですm(_ _ )m

補足日時:2003/12/20 20:51
    • good
    • 0

そういうことですか。


別のメモリ空間で動いているので共有されていないのでしょう。
    • good
    • 1
この回答へのお礼

Socketを使っている限りメモリ空間が別々になるんですね…。
どうもありがとうございました。

お礼日時:2003/12/20 20:53

ソースが完全ではないのでなんともいえませんが、


ちゃんと書けば結果は1になるはずです。

省略されているところになにか問題があるのかもしれません。

この回答への補足

ローカル間でSocketを用いてクラス1とクラス2をつないでいます。

しかし、同じディレクトリで実行しています。
それが問題なのでしょうか・・・

補足日時:2003/12/13 23:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!