Discussion:
[問題] JAVA的call by value
(时间太久无法回复)
ldg
2007-03-24 14:05:19 UTC
Permalink
小弟我想要做一個問題

class student{
static void print(){
...
}
static number;
public static void main(String[] args){
student[] s=new student[3];
int i;
for(i=0;i<3;i++){
s[i]=new student();
s[i].number=i;
}
student.print();
}
}

我希望可以印出每個student的number

但是不是設計instance method

而是希望利用一個static method

將整個s[]的num排版並印出來

在C語言的話是將s或&s傳入

但是在JAVA小弟不甚熟悉

可以幫小弟我開個頭嗎?

或是指導比較正確的想法

拜託了 謝謝

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.192.211.79
※ 編輯: ldg 來自: 210.192.211.79 (03/24 22:05)
不告訴你..
2007-03-24 14:23:26 UTC
Permalink
※ 引述《ldg (ldg)》之銘言:
: class student{
: static void print(){
: ...
: }
: static number;
: public static void main(String[] args){
: student[] s=new student[3];
: int i;
: for(i=0;i<3;i++){
: s[i]=new student();
: s[i].number=i;
: }
: student.print();
: }
: }
小弟我剛學java不久 ,說錯請見諒喔..
請高手指教了.
第一行應該要加 public,
student.print(); 這行的意思是?
如果要使用print(),應該是用s[] 來呼叫才是
你的程式碼 並沒有叫做student的實體.

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.104.93.250
ldg
2007-03-24 14:42:01 UTC
Permalink
抱歉小弟還有一個問題沒有搞懂

先謝過各位這麼熱心指點

class student{
int num;
static void A(){
...
}
public static void main(String[] args){
student[] s=new student[3];
int i;
for(i=0;i<3;i++)
s[i]=new student();
...
}
}

請問有沒有方法

可以讓A這個method

在不改變其參數(傳入值)的條件下

讓這個method可以處理s[]

有點像是在

public static student[] s=new student[3];

(當然這是錯的)

那有方法可以達到這種概念嗎?

抱歉問題有點多

但是希望起頭時就接觸正確的資訊

以養成OO的正確習慣

謝謝指點了

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.192.211.79
骨頭
2007-03-24 14:48:17 UTC
Permalink
※ 引述《drinks (不告訴你..)》之銘言:
: ※ 引述《ldg (ldg)》之銘言:
: : class student{
: : static void print(){
: : ...
: : }
: : student.print();
: : }
: : }
: 小弟我剛學java不久 ,說錯請見諒喔..
: 請高手指教了.
: 第一行應該要加 public,

同物件內引用 加不加都無所謂
要看他有沒有要發布給外部class決定要不要加public

: student.print(); 這行的意思是?
: 如果要使用print(),應該是用s[] 來呼叫才是
: 你的程式碼 並沒有叫做student的實體.

print是static方法
由類別所擁有 而非instance所擁有 (你指的物件實體)


--
建議你先看完修飾字的章節,這部份的概念很基本。

--
 String temp="relax"; | Life just like programing
 while(buringlife) String.forgot(temp); | to be right or wrong
 while(sleeping) brain.setMemoryOut(); | need not to say
 stack.push(life.running); | the compiler will
 stack.push(scouting.buck()); | answer your life
 stack.push(bowling.practice()); | Bone everything

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68
骨頭
2007-03-24 14:53:05 UTC
Permalink
※ 引述《ldg (ldg)》之銘言:
: 抱歉小弟還有一個問題沒有搞懂
: 先謝過各位這麼熱心指點
: class student{
: int num;
: static void A(){
: ...
: }
: public static void main(String[] args){
: student[] s=new student[3];
: int i;
: for(i=0;i<3;i++)
: s[i]=new student();
: ...
: }
: }
: 請問有沒有方法
: 可以讓A這個method
: 在不改變其參數(傳入值)的條件下
: 讓這個method可以處理s[]
: 有點像是在
: public static student[] s=new student[3];
: (當然這是錯的)
: 那有方法可以達到這種概念嗎?
: 抱歉問題有點多
: 但是希望起頭時就接觸正確的資訊
: 以養成OO的正確習慣
: 謝謝指點了

static當然可以用。(扣除掉語意問題,它沒有絕對的錯誤。)


不過站在oo的角度來看,與其處理s[],
應該讓student自己處理自己。

就像底下的作法這樣,如果你給予每個student不同的num值,
可以展示的更清楚點。


: class student{
: int num;
: void printmyself(){
: System.out.println("hi, I'am "+num);
: }
: public static void main(String[] args){
: student[] s=new student[3];
: int i;
: for(i=0;i<3;i++)
: s[i]=new student();
: ...
for(i=0;i<3;i++) s[i].printmyself();
: }
: }

--
I am a person, and I am always thinking .
Thinking in love , Thinking in life ,
Thinking in why , Thinking in worth.
I can't believe any of what ,
I am just thinking then thinking ,
but worst of all , most of mine is thinking not actioning...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.27.68

Loading...