首页 新闻 会员 周边

java问题

0
悬赏园豆:5 [已解决问题] 解决于 2017-12-06 00:11

定义类的时,在类的方法中,用 “类名.this.成员” 和直接用 “this.成员” ,本质上不同在什么地方?

以下两种第一种会出错第二种就不会了。

梦再笑的主页 梦再笑 | 初学一级 | 园豆:55
提问于:2016-12-05 23:14
< >
分享
最佳答案
0

java没有语法书吗?

收获园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2016-12-06 09:00

有,那本书上也有一些错的,就不敢全信了,有时候就去试试其他写法,或者网上搜搜。书上确实没有这么写过,我只是想写上去看看会怎么样~ 结果就报错了~!

梦再笑 | 园豆:55 (初学一级) | 2016-12-06 13:24

@梦再笑: ..语法书上没写的多了,语法的意思就是告诉你能怎么写.没写的就是不能....不要想这样思维广

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-06 13:30

@吴瑞祥: 恩, 但是我上次在网上查有人说 Test1.i和this.i 几乎是一样的~! Test1.this也表示的是一个域,你能稍微给我解释下这个是什么吗? 两个到底有哪些不一样了?

梦再笑 | 园豆:55 (初学一级) | 2016-12-06 13:34

@梦再笑: 首先this是关键字.而且你说的表示一个域.我都没听说过是什么意思...

Test1.i和this.i 几乎是一样的和(Test1.i和Test1.this.i )也完全没有关系..

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-06 13:45

@吴瑞祥: 不是。。。。。  我打错字了~!

梦再笑 | 园豆:55 (初学一级) | 2016-12-06 13:46

@梦再笑: 别太纠结了.类名能点出来的是静态字段.this能点出来的是实例字段.

类名能点出静态字段.很显然this并不是静态的.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-12-06 13:48

@吴瑞祥:  恩, 但是我上次在网上查有人说在Test1类中 Test1.this.i和this.i 几乎是一样的~! Test1.this也表示的是一个域(这个域是一个变量对应的作用域),你能稍微给我解释下这个是什么吗? 两个到底有哪些不一样了?

也就是想下面这样这俩都能对i进行操作,而且是同一个i。

梦再笑 | 园豆:55 (初学一级) | 2016-12-06 13:48
其他回答(2)
0

第一个  Test1.this.i   这是个很明显的错误,

  Test.i 是用在类属性,也就是使用的static声明的变量。

this是默认的一个当前类的一个对象,是引用类型的

忘记夏末的蓝天 | 园豆:202 (菜鸟二级) | 2016-12-05 23:45

在外部类成员中是可以 用Test.this.i 的 而且也指向了对象中成员变量i(我上面写的是常量)

这样就没错,也就是说Test1.this.i 是可以操作该类生成对象里面的属性的。

支持(0) 反对(0) 梦再笑 | 园豆:55 (初学一级) | 2016-12-06 13:28

@梦再笑:我刚刚看Java语法书时看到一个关于这个的内容,Test1.this.i是非静态内部类里对外部类的实例属性的访问

支持(0) 反对(0) 忘记夏末的蓝天 | 园豆:202 (菜鸟二级) | 2016-12-07 10:44

@忘记夏末的蓝天: 恩,语法书上确实是这样说的。但是你在一个任意一个非静态类中这样用一下试试看~!比如在外部类中 你试试看。几乎和this功能差不多。 我印象中有人说 在外部类中 this.i 和 类名.this.i 功能上是一样的。我就尝试用 类名.this.i去初始化了一下非静态常量(这个常量定义时没有初始化,是在构造中用问题中两种形式初始化的),结果就报错了。但是this.i 就可以初始化非静态常量。就说明这两个还是有差别的。我就想了解下到底是什么差别呢?

支持(0) 反对(0) 梦再笑 | 园豆:55 (初学一级) | 2016-12-08 00:37
0

变量i是final的,所以初始化的时候或者构造的时候必须赋值;且只能赋值一次;

 

this.i = 8; 这样在构造里进行赋值是可以的.

但是Test1.this.id = 8;这个你编译的时候就会报错,说白了就不允许你这样对final的变量赋值

、熙和 | 园豆:1508 (小虾三级) | 2016-12-12 13:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册