前期绑定和后期绑定

程序绑定的概念:
绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定

静态绑定
在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。例如:C。
针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定

动态绑定
后期绑定:在运行时根据具体对象的类型进行绑定。
若一种语言实现了后期绑定,同时必 须提供一些机制,可在运行期间判断对象的类型,并分别调用适当的方法。也就是说,编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确 的方法主体。不同的语言对后期绑定的实现方法是有所区别的。但我们至少可以这样认为:它们都要在对象中安插某些特殊类型的信息。

动态绑定的过程
虚拟机提取对象的实际类型的方法表;
虚拟机搜索方法签名;
调用方法。

关于动态绑定JVM运行的具体过程,我不太明白,以后懂了再不上。

附上参考连接:http://www.cnblogs.com/yyyyy5101/archive/2011/08/02/2125324.html

时间: 2024-12-21 12:31:59

前期绑定和后期绑定的相关文章

vb小菜一枚--------早期绑定和后期绑定

早期绑定和后期绑定 Visual Studio 2005 其他版本 将对象分配给对象变量时,Visual Basic 编译器会执行一个名为 binding 的进程.如果将对象分配给声明为特定对象类型的变量,则该对象为“早期绑定”.早期绑定对象允许编译器在应用程序执行前分配内存以及执行其他优化.例如,下面的代码片段将一个变量声明为 FileStream 类型: VB ' Create a variable to hold a new object. Dim FS As System.IO.File

.Net中的早期绑定和后期绑定(二)

上篇介绍了.Net中绑定的故事背景,在文章的末尾引出了"早期绑定和后期绑定",那么本文就针对.Net中的绑定做一个简单的介绍. 早期绑定 早期绑定:如果在编译时 .Net 能够知道属性或方法所属的对象,就可以预先查找该成员在类型库中的 DispID 或 vtable 地址.这样就无须在运行时调用 GetIDsOfNames.当显式声明了变量的类时,例如 As Class,该变量就只能存放该类的对象的引用..Net 就可以为该变量调用的所有属性和方法使用早期绑定. 后期绑定 在.Net中

.Net中的早期绑定和后期绑定(一)

"绑定"一词在生活是非常常见,像手机绑定.邮箱绑定等等.在.Net中也存在着"绑定",比如说类型的绑定.在进行机房重构的过程中遇到一个特别有意思的现象:B层调用工厂层和接口使其与D层解耦,因此在B层类中的方法都写了这样的语句,以UserBLL类为例: Public Function Login(enUser As Entity.UserEntity) As DataTable '实例化工厂类CreateUser Dim createuser As New Facto

前期绑定、后期绑定

  前期绑定:在程序运行前进行绑定,有编译器和连接程序实现,又叫静态绑定.比如static 方法和final方法,注意这里也包括private方法,因为它也是隐式final的. (在编译时能确定的类型) 后期绑定:在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动态绑定,或者运行时绑定.除了前期绑定外的所有方法都属于后期绑定. (在运行时才能确定的类型)

js中的前期绑定,后期绑定以及问题

javascript 的函数在执行期间才会确定他的context,也就是说this在此时被赋值. 但是你常常遇到这种情况 function process(){ this.name = "hello"; document.onclick = function(){ alert(this.name); } } var  p = new process(); ------------------------------------- 上面这个 程序执行之后,你在页面上"点击&qu

Java前期(静态)绑定和后期(动态)绑定

Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现.例如:C.针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定:后期绑

关于JAVA中的前期绑定 后期绑定(动态绑定)

前期绑定,在程序执行前根据编译时类型绑定,调用开销较小,如C语言只有前期绑定这种方法调用. 后期绑定,是指在运行时根据对象的类型进行绑定,又叫动态绑定或运行时绑定.实现后期绑定,需要某种机制支持,以便在运行时能判断对象的类型,调用开销比前期绑定大. Java中的static方法和final方法(private属于final方法,详细的解释见<Java编程思想>)属于前期绑定,子类无法重写final方法,成员变量(包括静态及非静态)也属于前期绑定.除了static方法和final方法(priva

什么样的局域网需要IP-MAC绑定?IP-MAC绑定的好处。

1. 为什么要进行IP-mac绑定? IP-MAC绑定是网络管理的一个重要手段,在局域网内启用IP-MAC绑定,可以给您带来如下好处: 只有通过绑定的设备才可以接入网络,从而有效的防止了私接设备. 大部分上网和流控策略都是基于IP地址的,需要绑定IP和MAC才可以更好的应用上网策略. 实现有效的上网记录和上网统计.如果不绑定,那么记录统计不能有效的定位到具体用户. 节省IP资源,防止IP盗用. 减少ARP攻击,杜绝IP地址冲突,从而提高网络的稳定性. 所以,对于企业的办公局域网来说,IP-MAC

ng1中 如何用双向绑定 实现单向绑定的初始时不显示双括号效果?

ng1中 如何用双向绑定 实现单向绑定(ng-bind就可以不显示{{}})的初始时不显示双括号效果? AngularJS 实例 页面加载时防止应用闪烁: <div ng-app=""> <p ng-cloak>{{ 5 + 5 }}</p> </div> 尝试一下 » 定义和用法 ng-cloak 指令用于在 AngularJS 应用在加载时防止 AngularJS 代码未加载完而出现的问题. AngularJS 应用在加载时,文档可能