从java虚拟机层次理解this和static关键字
2017-03-05 20:32
260 查看
在《java编程思想》第5章 5.4 讲this关键字的时候,我注意到一句话
——“如果有同一个类型的两个对象,分别是a和b。你可能想知道,如何才能让着两个对象都能调用peel()方法呢”
当时看到这句话不知道它为什么会这么问,当时觉得理所当然的每个对象自然会调用自己对象内部所对应的方法,但是其实java虚拟机 的内部并非如此,所以才有如此一问。
java虚拟机的内部结构以及运行方式不再赘述。以后会编辑把关于java虚拟机的一些文章加在这里
java的对象是存在于堆(heap)中的,但是其实对象内容中并不包含如上面代码中的peel这种方法,因为对于多个对象来说放置相同的方法在每个对象里面是十分浪费的,java虚拟机的设计者从开始并没有打算这样放置,这个是我个人以前一直有的一个错误概念。
这个方法在被编译后应该以指令的形式被保存在内存中,当对象调用时会将自身引用带入这个方法中,这个方法会利用此引用取得此对象里面的其它的域或者其它方法的调用。
static的方法或者static的域,其实就是没有this引用的方法和不依赖于this就可以存在的域,这种方法以及域的存储显然不应该和非静态的东西在一个地方。他们在类被加载的时候就被初始化了,并不等待对象在堆栈上被初始化出来,更不需要它的引用。
——“如果有同一个类型的两个对象,分别是a和b。你可能想知道,如何才能让着两个对象都能调用peel()方法呢”
Class Banana{ void peel (int i){/*....*/} }
当时看到这句话不知道它为什么会这么问,当时觉得理所当然的每个对象自然会调用自己对象内部所对应的方法,但是其实java虚拟机 的内部并非如此,所以才有如此一问。
java虚拟机的内部结构以及运行方式不再赘述。以后会编辑把关于java虚拟机的一些文章加在这里
java的对象是存在于堆(heap)中的,但是其实对象内容中并不包含如上面代码中的peel这种方法,因为对于多个对象来说放置相同的方法在每个对象里面是十分浪费的,java虚拟机的设计者从开始并没有打算这样放置,这个是我个人以前一直有的一个错误概念。
这个方法在被编译后应该以指令的形式被保存在内存中,当对象调用时会将自身引用带入这个方法中,这个方法会利用此引用取得此对象里面的其它的域或者其它方法的调用。
static的方法或者static的域,其实就是没有this引用的方法和不依赖于this就可以存在的域,这种方法以及域的存储显然不应该和非静态的东西在一个地方。他们在类被加载的时候就被初始化了,并不等待对象在堆栈上被初始化出来,更不需要它的引用。
相关文章推荐
- 本人对this super static 关键字的理解
- 【Java基础】java中常用关键字理解this、static、final、volatile理解
- Java中This ,Static,对象,对象的引用 等关键字的理解
- 黑马程序员——Java之this和static关键字解析
- 理解PHP5中static和const关键字的区别
- 面向对象中的构造方法以及关键字static的理解
- 7. JavaSE-构造函数 & this & static关键字
- 理解C++中static关键字
- 面向对象——OOP(三)(关键字之this、super、package、import、Static、final)
- final、static、this、continue与break关键字的使用
- 【Java基础】static关键字的理解
- 智渔课堂官方免费教程十:Java基础之关键字static和this
- 个人对this关键字理解
- Javascript之this关键字的深入理解
- 构造代码快、this的应用、static关键字、main函数
- JavaScript中嵌套函数的this关键字的理解
- java夯实基础系列:深入理解static、final关键字
- 理解Java中的final和static关键字
- php中$this、static、final、const、self 等几个关键字的用法
- this super static final关键字