Re: [問題] 物件的屬性與其方法的局部變數釐清
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):