Discussion:
[問題] JAVA如何設定全域變數
(时间太久无法回复)
飄落的櫻花
2006-10-14 19:57:28 UTC
Permalink
小弟想設一個變數給兩個類別用
如下
int a;
class A{}

public class B{
public static void main(){}


}

如果是C的話這樣寫是可以過

可是換到JAVA就會出現錯誤訊息

請問我要怎設定才能讓變數a給A.B兩個類別使用

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.13.147.14
好累想睡覺
2006-10-15 08:46:58 UTC
Permalink
※ 引述《del680202 (飄落的櫻花)》之銘言:
: 小弟想設一個變數給兩個類別用
: 如下
: int a;
: class A{}
: public class B{
: public static void main(){}
: }
: 如果是C的話這樣寫是可以過
: 可是換到JAVA就會出現錯誤訊息
: 請問我要怎設定才能讓變數a給A.B兩個類別使用
你的問題應該是要建立一個變數 給兩個不同的類別使用吧
如果是這樣的話 我會用繼承來解決 先設定一個父類別儲存要共用的變數

程式碼如下 :
public class test
{
public static void main(String [] args)
{
B b = new B() ;
C c = new C() ;

b.i = 5 ;

//雖然是 b 的變數 i 被改變
//但是 c 方面的變數 i 也會是一樣的值
System.out.println(b.i) ;
System.out.println(c.i) ;
}
}

class A
{
//共用的變數 i 並且設為 static
public static int i=0 ;
}

class B extends A
{
}

class C extends A
{
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.118.131
!H45
2006-10-15 20:30:03 UTC
Permalink
※ 引述《aeifkz (好累想睡覺)》之銘言:
: 你的問題應該是要建立一個變數 給兩個不同的類別使用吧
: 如果是這樣的話 我會用繼承來解決 先設定一個父類別儲存要共用的變數
: 程式碼如下 :
: public class test
: {
: public static void main(String [] args)
: {
: B b = new B() ;
: C c = new C() ;
: b.i = 5 ;
: //雖然是 b 的變數 i 被改變
: //但是 c 方面的變數 i 也會是一樣的值
: System.out.println(b.i) ;
: System.out.println(c.i) ;
: }
: }
: class A
: {
: //共用的變數 i 並且設為 static
: public static int i=0 ;
: }
: class B extends A
: {
: }
: class C extends A
: {
: }

bad style +1

誰知道 b.i, c.i 實際上是相同的靜態成員變數呢?

這樣的困擾將造成維護上的困難






--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.85
c'est la vie
2006-10-15 22:51:41 UTC
Permalink
假設需求是讓兩個類別的實體能一起使用同一個變數
由於基本型別無法做到call by reference, 所以使用wrapper
個人覺得在非多執行緒的情況下
實在能不用static變數就不要用
在main function中定義一個變數其實就夠用了, 不是嗎?
我覺得比較安全的做法如下


public class Class1 {
public Class1(MyInt integer) {
this.integer = integer;
this.integer.setInteger(100);
}

private final MyInt integer;

public static void main(String[] args) {
final MyInt integer = new MyInt(0);
Class1 c1 = new Class1(integer);
Class2 c2 = new Class2(integer);
}
}

class Class2 {
public Class2(MyInt integer) {
this.integer = integer;
this.integer.setInteger(200);
}

private final MyInt integer;
}

class MyInt {
public MyInt(int integer) {
this.integer = integer;
}

private int integer;

public int getInteger() {
return integer;
}

public void setInteger(int integer) {
this.integer = integer;
}
}


※ 引述《***@bbs.wretch.cc (暑假作業真多..泣)》之銘言:
: 全域變數應該第一個想到的是static吧,
: class B {
: static int i=0;
: }
: public class A{
: public static void main(String[] args){
: B.i = +2;
: System.out.println(B.i);
: }
: }
: 這樣是不是也可行呢,而且static variable是放在記憶體中Global的區塊喔
: ※ 引述《***@bbs.sayya.org (foolish)》之銘言:
: > 目標雖然達成了。但這實在是一個bad style

--
And I don't think that I'll see her again,
But we shared a moment that will last till the end.
You're beautiful. You're beautiful.
You're beautiful, it's true.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.197.139
※ 編輯: webberhan 來自: 220.130.197.139 (10/16 14:46)
※ 編輯: webberhan 來自: 220.130.197.139 (10/16 14:51)
累嗎
2006-10-18 13:47:58 UTC
Permalink
Post by 飄落的櫻花
小弟想設一個變數給兩個類別用
如下
int a;
class A{}
public class B{
public static void main(){}
}
如果是C的話這樣寫是可以過
可是換到JAVA就會出現錯誤訊息
請問我要怎設定才能讓變數a給A.B兩個類別使用
在java中並沒有所謂的全域變數
若真的要說有
也只是靜態變數...或runtime property

換句話說.java一切都以class為底,在class外的只能是套件宣告跟引入或註解

因此,class之間有他們的一套相互存取的方式存在
例如
1.共同的public variables(當然要看相對的關係來決定封裝字)
2.共同的static public variables(這樣就不用建實體了)


class A(){
public static int intStatic=1;
public int intNonStatic=2;
}


class B(){
public static int intStatic=3;
public int intNonStatic=4;
}

public class C(){
public static void main(String para[]){
//可以直接呼叫A跟B的Static variables
System.out.println(A.intStatic);
System.out.println(B.intStatic);

//建立實體後才可呼叫NonStatic variables
A a=new A();
B b=new B();
System.out.println(a.intNonStatic);
System.out.println(b.intNonStatic);
}

}

有錯還請不吝指教
--
 ◢◣ ︵︵ █▔◣ █▔█ █▔▔ █▔█ █▆▉ █ █▔█ █◣█ █▔● 
◢◤█◣◢◣ ︵︵ █ █ █▁◤ █▁▁ █▁█ ▉▉▉ █ █▁█ █◥█ █ █ 
夢之大地 逼逼ㄟ四 █▁◤ █ █ █▁▁ █ █ ▉▉▉ █▁ █ █ █ █ █▁◤ 
※ Origin: <bbs.ccns.ncku.edu.tw> ◆ From: 210.64.134.128 
继续阅读narkive:
Loading...