定义类的时,在类的方法中,用 “类名.this.成员” 和直接用 “this.成员” ,本质上不同在什么地方?
以下两种第一种会出错第二种就不会了。
java没有语法书吗?
有,那本书上也有一些错的,就不敢全信了,有时候就去试试其他写法,或者网上搜搜。书上确实没有这么写过,我只是想写上去看看会怎么样~ 结果就报错了~!
@梦再笑: ..语法书上没写的多了,语法的意思就是告诉你能怎么写.没写的就是不能....不要想这样思维广
@吴瑞祥: 恩, 但是我上次在网上查有人说 Test1.i和this.i 几乎是一样的~! Test1.this也表示的是一个域,你能稍微给我解释下这个是什么吗? 两个到底有哪些不一样了?
@梦再笑: 首先this是关键字.而且你说的表示一个域.我都没听说过是什么意思...
Test1.i和this.i 几乎是一样的和(Test1.i和Test1.this.i )也完全没有关系..
@吴瑞祥: 不是。。。。。 我打错字了~!
@梦再笑: 别太纠结了.类名能点出来的是静态字段.this能点出来的是实例字段.
类名能点出静态字段.很显然this并不是静态的.
@吴瑞祥: 恩, 但是我上次在网上查有人说在Test1类中 Test1.this.i和this.i 几乎是一样的~! Test1.this也表示的是一个域(这个域是一个变量对应的作用域),你能稍微给我解释下这个是什么吗? 两个到底有哪些不一样了?
也就是想下面这样这俩都能对i进行操作,而且是同一个i。
第一个 Test1.this.i 这是个很明显的错误,
Test.i 是用在类属性,也就是使用的static声明的变量。
this是默认的一个当前类的一个对象,是引用类型的
在外部类成员中是可以 用Test.this.i 的 而且也指向了对象中成员变量i(我上面写的是常量)
这样就没错,也就是说Test1.this.i 是可以操作该类生成对象里面的属性的。
@梦再笑:我刚刚看Java语法书时看到一个关于这个的内容,Test1.this.i是非静态内部类里对外部类的实例属性的访问
@忘记夏末的蓝天: 恩,语法书上确实是这样说的。但是你在一个任意一个非静态类中这样用一下试试看~!比如在外部类中 你试试看。几乎和this功能差不多。 我印象中有人说 在外部类中 this.i 和 类名.this.i 功能上是一样的。我就尝试用 类名.this.i去初始化了一下非静态常量(这个常量定义时没有初始化,是在构造中用问题中两种形式初始化的),结果就报错了。但是this.i 就可以初始化非静态常量。就说明这两个还是有差别的。我就想了解下到底是什么差别呢?
变量i是final的,所以初始化的时候或者构造的时候必须赋值;且只能赋值一次;
this.i = 8; 这样在构造里进行赋值是可以的.
但是Test1.this.id = 8;这个你编译的时候就会报错,说白了就不允许你这样对final的变量赋值