易截截图软件、单文件、免安装、纯绿色、仅160KB

JAVA动态绑定的内部实现机制

JAVA动态绑定的内部实现机制
  JAVA虚拟机调用一个类方法时,它会基于对象引用的类型(通常在编译时可知)来选择所调用的方法。相反,当虚拟机调用一个实例方法时,它会基于对象实际的类型(只能在运行时得知)来选择所调用的方法,这就是动态绑定,是多态的一种。动态绑定为解决实际的业务问题提供了很大的灵活性,是一种非常优美的机制。
1 JAVA对象模型
  JAVA虚拟机规范并没有规定JAVA对象在堆里是如何表示的。对象的内部表示也影响着整个堆以及垃圾收集器的设计,它由虚拟机的实现者决定。
  JAVA对象中包含的基本数据由它所属的类及其所有超类声明的实例变量组成。只要有一个对象引用,虚拟机就必须能够快速地定位对象实例的数据。另外,它也必须能通过该对象引用访问相应的类数据(存储于方法区的类型信息),因此在对象中通常会有一个指向方法区的指针。当程序在运行时需要转换某个对象引用为另外一种类型时,虚拟机必须要检查这种转换是否被允许,被转换的对象是否的确是被引用的对象或者它的超类型。当程序在执行instanceof操作时,虚拟机也进行了同样的检查。所以虚拟机都需要查看被引用的对象的类数据。
  不管虚拟机的实现使用什么样的对象表示法,很可能每个对象都有一个方法表因为方法表加快了调用实例方法时的效率。但是JAVA虚拟机规范并未要求必须使用方法表,所以并不是所有实现中都会使用它。
  下面是一种JAVA对象的内存表示:
 
JAVA对象内存模型
  方法数据存放在类的方法区中,包含一个方法的具体实现的字节码二进制。方法指针直接指向这个方法在内存中的起始位置,通过方法指针就可以找到这个方法。
2 动态绑定内部机制
  方法表是一个指向方法区中的方法指针的数组。方法表中不包含static、private等静态绑定的方法,仅仅包含那些需要动态绑定的实例方法。
  在方法表中,来自超类的方法出现在来自子类的方法之前,并且排列方法指针的顺序和方法在class文件中出现的顺序相同,这种排列顺序的例外情况是,被子类的方法覆盖的方法出现在超类中该方法第一次出现的地方。
  例如有超类Base和子类Derive:
public class Base
{
public Base()
{
}

public void test()
{
System.out.println( "int Base" );
}

public void print()
{
}
}
public class Derive extends Base
{
public Derive()
{
}
public void


相关文档:

Java数据导出到excel和word

这里只能从显示数据的jsp页面上导出当前页面的数据,这些数据可以从数据库读出,显示到jsp页面,然后加一段话就可把当前页面数据保存到excel里面!
如从后台过来数据显示到  showUser.jsp
然后加链接到 showExcel.jsp就可以了,在这个页面只多了几行字,其他的都不会显示包括页面!但这个页面上的数据跟showUser.js ......

Java中的拷贝

Java对对象和基本的数据类型的处理是不一样的。对基本的数据类型类似于C/C++中的方法(值传递)。在Java中用对象的作为入口参数的传递则缺省为"引用传递",也就是说仅仅传递了对象的一个"引用",这个"引用"的概念同C语言中的指针引用是一样的。当函数体内部对输入变量改变时,实质上就是在对 ......

Java中serialVersionUID的解释


<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体" ......

Java学习心得

计算机专业毕业两年了,终于找到学习的感觉了,后悔当时在学校时的无知和狂妄!!!
现在我对Java web编程有了兴趣,我写了自己的用户登录小程序,已经上传到我的CSDN空间了,欢迎大家来访问!!!
讨论之后,欢迎来信,共同提高!!!
联系方式:243093502@@qq.com ......

Java中Underlying input stream returned zero bytes

异常 Underlying input stream returned zero bytes 解决办法
系统环境
jdk1.5
hibernate 3.0
sql server 2000
ms jdbc driver
将一个varchar类型的字段改为text后,就出现
[Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes 的异常了。
从网上搜集资料来看,由于jdbc的bug ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号