java - Java 中的 'this' : How does it work?

标签 java

我知道“this”在 Java 中充当引用。我们只能在类成员内部使用它。

我要问的是...因为它在类的成员中使用,这意味着它必须是实例变量或参数。

假设,如果它是一个方法的参数,但它是在 block 中工作的。 block 不包含任何参数和所有...您能解释一下它是什么吗...它是如何在 java 中定义的?它是如何被 JVM 使用的。

最佳答案

从语言学的角度来看,this既不是局部变量也不是参数。从语法上讲,它是一个关键字。从语义上讲,它是一种明确表达“当前对象”的方式;见 JLS 15.8.3 。例如:

  • this.<attributeName> 显式引用当前对象的实例级属性。
  • <methodName>(this) 调用方法,将对当前对象的引用作为显式参数传递。

this 关键字在 Java 中还有其他用途,并不完全表示“当前对象”:

  • this(<optArgumentList>) 作为构造函数中的第一条语句链接到同一类中的另一个构造函数; JLS 8.8.7
  • 内部类中的 <className>.this 是指当前对象的封闭类的实例; JLS 15.8.4

从实现的角度来看,您可以将“this”引用视为每次调用实例方法时传递的隐藏或隐式参数。实际上,这或多或少就是 JVM 的“invoke*”字节码处理对象引用的方式。您将目标对象引用压入“opstack”,后跟每个参数值,然后执行“invoke...”指令。 (查看 here 了解详细信息。)

关于java - Java 中的 'this' : How does it work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3413184/

相关文章:

java - 如何防止具体类的实例化?

java - 如何确保 java 中并发列表的元素(在列表循环后添加)得到正确处理?

java - 简单的 Java 正则表达式匹配器不工作

java - 如何使用编辑字段更新sql表?

java - 在fragment中使用google map 支持fragment

java - 托管 Bean 何时创建以及 Bean 的属性何时创建?

java - 单击 Canvas 后 KeyListener 停止工作

java - libgdx freetype 依赖与 Maven 原型(prototype)

java - 为什么 *const_n JVM 指令只定义了这样的常量范围?

java - 在java中将Object[]数组转换为List