Re: [問題] 物件的屬性與其方法的局部變數釐清

看板java作者 (愚人)時間18年前 (2007/08/02 21:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《Egriawei (下課中)》之銘言: : 基本上我已經看過書也compile過程式了 : 不過對於自己歸納的結論還是有點疑惑 : 想請各位不吝指證 : =============================================== : class Base { : private int num,num2,num3; : void setNum(int num) { : num2 = this.num; : num3 = num; : this.num = num; : } : void showData() { : System.out.println("num:" + num); : System.out.println("num2:" + num2); : System.out.println("num3:" + num3); : } : } : class test { : public static void main(String[] args){ : Base b1 = new Base(); : b1.showData(); : b1.setNum(10); : b1.showData(); : } : } : ============================================= : 以下是我的結論,想請問有無錯誤或不足 : 1.以Base類別宣告b1物件後 : b1物件宣告了int型態的num,num2,num3變數並有起始其值,為0 : 所以第一次呼叫showData方法時三個變數印出來都是0 [全域變數會在建構物件時自動初始化] : 2.而呼叫setNum方法並傳入10後,因傳入參數與物件屬性同名皆為num : 所以要以this來區分,首行this.num還是0而不是傳入參數num的10 : this.num其值複製一份給num2,num2是0 this 就是不參考目前的 block 中有什麼變數可以用 直接將 scope 提升到物件的{field, method} 如果沒有 this 就會在同一個 block --> {} 中先找有沒有人宣告 如果沒有, 再外往別的 {} 找 最後會找到 class 的那個 block 如果找不到 compiler 會哀嚎 :) : 3.方法次行num複製給num3,結果是用傳入參數的num值去複製 : 同理第三行傳入參數複製給b1的num屬性 : 結果第二次印出來num3跟num都是10 唔, 用複製真不習慣, 希望您可以改用 assign 同意的翻譯 : 我想確認的就是 : 方法中一旦傳入的參數名稱與物件屬性同名 : java是不是優先認定其代表的是傳入參數的值或參考? : 如果是,那麼如果僅是同名但變數型態卻不同 : 接收傳入參數的變數,其型態是否也是要跟傳入參數一樣? : 而這種時候依變數型態而異this.num = num可能就會有問題了是嗎? 型態要一樣, java 是強型態語言 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.80.216
文章代碼(AID): #16iTZesT (java)
文章代碼(AID): #16iTZesT (java)