Java中的this是怎么样实现的
一段Java代码public class Main { void fun() { }}javap -verbose 之后code区如下{ public com.lee.Main(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."\u0026lt;init\u0026gt;":()V 4: return LineNumberTable: line 3: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this Lcom/lee/Main; void fun(); descriptor: ()V flags: Code: stack=0, locals=1, args_size=1 0: return LineNumberTable: line 6: 0 LocalVariableTable: Start Length Slot Name Signature 0 1 0 this Lcom/lee/Main;}注意其中的args_size这个参数,他代表方法的参数数量。第一个方法是自动生成的构造方法,第二个为自定义的fun方法。fun方法并没有参数,但是args_size为1。这个参数就是带入的对象引用。也就是说对于Main类的对象main,调用fun方法 写作main.fun()。事实上相当于fun(main),所以this就相当于本地变量表中的第一个空位(注意构造方法中的aload_0)。这也是为什么static方法中不能用this。
■网友
谁调用他,this指带的就是谁
推荐阅读
- 鄂温克冬季马赛-30℃极寒开赛:寒冬中的火热派对
- 大雪@大雪腌肉 适当进补 今日大雪
- |电商事业中的“闪光少年”
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 经观汽车|日系车企中的“异类”?东风日产将导入e-POWER技术大干增程式混动 | 经观汽车
- 中年|这些东西,比你想象中的还要大得多!
- Java工程师和C++工程师在工作上有啥区别哪个更适合自身发展
- 请问杨毅微博中的这两人是谁
- 某些公司招聘要求中的精通mysql是啥程度
