为什么是";这";Java中的关键字final?

为什么是";这";Java中的关键字final?,java,final,Java,Final,这似乎是一件几乎没有人意识到的事情,但Java中的“此引用”是最终的。在正常编程的日子里,我想我可以通过在自己的类中重新定义this引用来重新定义整个实例: public void method() { this = new MyObject("arg1", arg2, arg3); //it throws a compile error } 为什么此引用在Java中是最终的?此不是可以赋值的变量。它是一个内置表达式,返回当前正在执行的方法的上下文对象 重新分配这个可能对一些不错的黑客

这似乎是一件几乎没有人意识到的事情,但Java中的“此引用”是最终的。在正常编程的日子里,我想我可以通过在自己的类中重新定义this引用来重新定义整个实例:

public void method() {
    this = new MyObject("arg1", arg2, arg3); //it throws a compile error
}

为什么此引用在Java中是最终的?

不是可以赋值的变量。它是一个内置表达式,返回当前正在执行的方法的上下文对象


重新分配
这个
可能对一些不错的黑客有用,但它会把所有事情搞砸。

错误地思考
这个
这个
只是java中引用当前实例的一个关键字(不是变量),它是一个编译限制,该关键字(不仅是
这个
)不能初始化

从理论角度来看,我觉得这个问题很有趣

从技术角度来看,这是行不通的,因为在Java中,我们通过value()传递引用,并且不能交换出代码中其他部分包含对该对象引用的对象——也就是说,真正的交换方法在Java中是不可能的(见链接文章)

虽然理论上可以重新分配
,但对该对象的所有其他引用都不会改变,也不会使操作变得毫无意义


你能实现的最接近的东西是复制构造函数。

问题不在于
是一个
最终的
参考-它本身根本不是一个参考
是一个关键字,它“表示引用实例方法或默认方法的对象的值”()


此外,在变量可以重新分配的意义上重新分配它是没有意义的。请记住,重新指定引用只会更改该引用,而不会更改可能指向同一对象的其他引用。因此,重新分配
this
不仅是疯狂的,而且是无用的。

使用
this
关键字提供对其类中当前对象的引用。通常,它用于澄清与类成员具有相同标识符的局部变量的范围问题。例如

public void function (int param) {
   this.param = param   
}

将其重新分配给另一个对象超出了分配给键盘的任务范围。您想要做的(重新分配引用)可以在上层上下文上实现,即创建对象的上下文(以及对对象的引用已分配).

以防止人们编写此类代码。
似乎几乎没有人意识到这一点
每个用Java编写实际程序的人都会意识到这一点。final只是关于引用,而不是关于引用对象的内容。'this'是关键字不可变的,您不能为关键字分配某些内容。就这些+1不能在java中实例化关键字句号