java代码块和this关键字问题

img

img


把代码块中的this关键字去掉就报错了,上网一搜说是非法向前引用,但我现在不明白的是去掉this和加上this有什么不同?

该回答引用NewBing

你好,这是Bing。我可以帮你解答一下。😊


根据搜索结果¹²³,this关键字在Java中代表当前对象的引用,也就是调用该方法的对象。代码块是一段被大括号包围的代码,它可以出现在类中或者方法中。


在你的例子中,代码块出现在类中,也叫做初始化块(initialization block)。初始化块会在构造器之前执行,并且按照它们出现的顺序执行⁴。


当你创建一个Person对象时,初始化块会先执行,并且打印出this.name的值。因为此时还没有给name属性赋值,所以this.name的值是null。


如果你去掉this关键字,就变成了System.out.println(name)。这样就相当于引用了一个还没有声明的变量name,所以会报错非法向前引用(illegal forward reference)。


简单来说,加上this关键字和去掉this关键字的区别是:

  • 加上this关键字:表示引用当前对象的name属性。
  • 去掉this关键字:表示引用当前作用域内的name变量。

希望这能帮助到你。


源: 与必应的对话, 2023/3/21

img