作者qrtt1 (愚人)
站内java
标题Re: [问题] 物件的属性与其方法的局部变数厘清
时间Thu Aug 2 21:15:19 2007
※ 引述《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