首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java — 静态绑定动态绑定

绑定:一个方法的调用与方法所在的类关联起来。java中的绑定分为静态绑定动态绑定,又被称作前期绑定和后期绑定。...静态绑定:(final、static、private)在程序执行前已经被绑定,也就是说在编译过程中就已经知道这个方法哪个类的方法,此时由编译器获取其他连接程序实现。...动态绑定:在运行根据具体对象的类型进行绑定。...(覆盖),虽然子类对象可以调用,但是调用的都是父类中的final方法(因此可以看出当类中的方法声明为final的时候,一是为了防止方法被覆盖,而是为了有效关闭java动态绑定);   static:static...2.动态绑定 调用的方法依赖于隐式参数的实际类型,并且在运行时实现动态绑定

3.4K90

Java中的静态绑定动态绑定

这里首先我们将确定这种调用何种方法实现或者变量的操作叫做绑定。 在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。...而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。 静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。...验证 光看表象无法证明进行了静态绑定,使用javap发编译一下即可验证。...验证 使用javap不能直接验证动态绑定,然后如果证明没有进行静态绑定,那么就说明进行了动态绑定。...所以,有些实际可以静态绑定的,考虑到安全和一致性,就索性都进行了动态绑定。 得到的优化启示? 由于动态绑定需要在运行时确定执行哪个版本的方法实现或者变量,比起静态绑定起来要耗时。

1.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

Java中的静态绑定动态绑定

这里首先我们将确定这种调用何种方法实现或 者变量的操作叫做绑定。 在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。...而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。 静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。...验证 光看表象无法证明进行了静态绑定,使用javap发编译一下即可验证。...验证 使用javap不能直接验证动态绑定,然后如果证明没有进行静态绑定,那么就说明进行了动态绑定。...所以,有些实际可以静态绑定的,考虑到安全和一致性,就索性都进行了动态绑定。 得到的优化启示? 由于动态绑定需要在运行时确定执行哪个版本的方法实现或者变量,比起静态绑定起来要耗时。

2K10

Java中的静态绑定动态绑定

这里首先我们将确定这种调用何种方法实现或 者变量的操作叫做绑定。 在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定。另一种就是动态绑定,亦称为后期绑定。...而虚方法(可以被子类重写的方法)则会根据运行时的对象进行动态绑定。 静态绑定使用类信息来完成,而动态绑定则需要使用对象信息来完成。...验证 光看表象无法证明进行了静态绑定,使用javap发编译一下即可验证。...验证 使用javap不能直接验证动态绑定,然后如果证明没有进行静态绑定,那么就说明进行了动态绑定。...所以,有些实际可以静态绑定的,考虑到安全和一致性,就索性都进行了动态绑定。 得到的优化启示? 由于动态绑定需要在运行时确定执行哪个版本的方法实现或者变量,比起静态绑定起来要耗时。

1.5K30

Java动态绑定与静态绑定之胡思乱想

参考链接: Java 静态绑定动态绑定 Java动态绑定与静态绑定之胡思乱想   之所以写这篇博客,是因为写代码过程中遇到了很奇怪的现象,我觉得只能通过动态绑定与静态绑定来解释,于是,就学习了一下动态绑定与静态绑定的实现原理...Java动态绑定与静态绑定的实现原理  关于实现原理,规范且准确的解释,在这里可以找到。  下面我想用自己的话概括一下,从而使自己更好的理解。 ...静态绑定实现原理:当初次调用一个使用静态绑定的方法时,java字节码层面去调用常量池中的某一个常量表,这个常量表描述了这个方法的具体信息(包括详细的类名,函数名称,返回值,存在CONSTANT_Methodref_info...5.你前面都在说方法,那你知道变量静态连接还是动态连接的吗?  答:先说答案,变量采用的静态连接。这正是开篇讲的写程序时遇到的困扰我的问题,也正是由于此,我才想到了要学习静态绑定动态绑定。...这当时给我造成了极大的困扰,实际,这个现象可以用动态绑定与静态绑定的知识来解答,那就是:属性采取的静态绑定!而sayHello()这个方法采用了动态绑定

1K40

缺省参数编译期间绑定的,而不是动态绑定

" << number<<endl; } }; int main() { B b; A &a = b; a.Fun(); return 0; } //虚函数动态绑定...=>B,非A,缺省实参编译时候确定的=>10,非20  输出:B::Fun with number 10 条款38:   决不要重新定义继承而来的缺省参数值  本条款的理由就变得非常明显:虚函数动态绑定而缺省参数值静态绑定的...这意味着你最终可能调用的一个定义在派生类,但使用了基类中的缺省参数值的虚函数.  为什么C++坚持这种有违常规的做法呢?答案和运行效率有关。...如果缺省参数值被动态绑定,编译器就必须想办法为虚函数在运行时确定合适的缺省值,这将比现在采用的在编译阶段确定缺省值的机制更慢更复杂。...做出这种选择想求得速度上的提高和实现上的简便,所以大家现在才能感受得到程序运行的高效;当然,如果忽视了本条款的建议,就会带来混乱。

95960

【解惑】Java动态绑定机制的内幕

参考链接: Java中的动态方法Dispatch和运行时多态 在Java方法调用的过程中,JVM如何知道调用的哪个类的方法源代码? 这里面到底有什么内幕呢?...这篇文章我们就将揭露JVM方法调用的静态(static binding) 和动态绑定机制(auto binding) 。   ...★ 动态绑定机制     Java代码     package hr.test;   //被调用的父类   class Father{       public void f1(){           ...这种在程序运行过程中,通过动态创建的对象的方法表来定位方法的方式,我们叫做 动态绑定机制 。         上面的过程很清楚的反映出在方法覆盖的多态调用的情况下,JVM如何定位到准确的方法的。...;         }   }    附带一个基础面试题可以用来理解动态绑定机制 结合上面所说的 分析一下你自己了解动态绑定的程度  import java.util.ArrayList; import

51920

动态绑定和静态绑定

Java动态/静态绑定是比较偏门的知识点之一,可能你不经常听到,但是关于他们的应用,有Java开发经验的朋友应该看一眼就明白。 静态绑定 先说静态绑定。...所谓静态绑定,既是说方法的实现在编译期就已经确定了的。这么一说,马上能想到的就是静态方法。 没错,只有静态方法属于静态绑定,或者称之为前期绑定。而对象方法则是在运行期绑定的。...动态绑定 对于动态绑定,或者叫运行期绑定,说的在编译期不知道实现的哪个具体的对象,直到运行期才能确定。 让我们来举个例子。...the static method public void drink(){ System.out.println("this is Water"); } } 非常简单的一个例子,用的我们经常见到的工厂模式...而在编译期时不知道的。可以用这个例子来理解动态绑定的意义所在。

1.7K30

动态绑定与静态绑定

在编译期确定的。 2、对象的动态类型:目前所指对象的类型。在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。...的类型D* 12 C* pC = new C(); 13 pB = pC;//pB的动态类型可以更改的,现在它的动态类型C* 3、静态绑定绑定对象的静态类型,某特性(比如函数)依赖于对象的静态类型...4、动态绑定绑定对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。...因为vfun一个虚函数,它动态绑定的,也就是说它绑定对象的动态类型,pB和pD虽然静态类型不同,但是他们同时指向一个对象,他们的动态类型相同的,都是D*,所以,他们的调用的同一个函数:D::vfun...至于那些事动态绑定,那些事静态绑定,有篇文章总结的非常好: 我总结了一句话:只有虚函数才使用的动态绑定,其他的全部静态绑定。目前我还没有发现不适用这句话的,如果有错误,希望你可以指出来。

2.4K30

jQuery 动态绑定

这是在项目过程中所遇到的一个问题,给 JS 动态生成的元素绑定事件失效,代码如下所示:$(".more-btn").on('click', function() { console.log("peace...and love")};其中,more-btn 按钮通过 layer 模块动态生成的,而我们在按钮上绑定的点击事件却没能生效,这是因为 DOM 节点还没有渲染出来,我们就将点击事件就绑定上了而通过查阅...jQuery 的 API 文档,on() 方法支持给动态元素绑定事件的,即事件委托模式,我们首先要获取需要绑定的 selector 的父级元素或祖先元素,比较简单粗暴的办法就是使用 body 或者...document,然后在你绑定的事件后面跟上你的 selector 即可,代码如下所示:$(document).on('click',".more-btn", function() { console.log

1.9K30

动态绑定机制

动态绑定机制 java动态绑定机制: 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定; 当调用对象属性时,没有动态绑定机制,在哪个类中声明就用哪个类中的属性; 代码示例: package...com.hspedu.poly_.dynamic_; /** * @author gaoqinghui * @date 2022/4/15 15:31 * java动态绑定机制 * 1....当调用对象方法时,该方法会和该对象的内存地址/运行类型绑定 * 2.当调用对象属性时,没有动态绑定机制,哪里声明,哪里使用 */ public class DynamicBinding {...public static void main(String[] args) { //Aa的编译类型,Ba的运行类型 A a = new B(); /...i属性,属性没有动态绑定机制,返回的就是就是B类中定义的i,也就是20,然后返回父类,结果为30; System.out.println(a.sum()); System.out.println

65520

理解静态绑定动态绑定

一个Java 程序要经过编写、编译、运行三个步骤,其中编写代码不在我们讨论的范围之内,那么我们的重点自然就放在了编译 和 运行这两个阶段,由于编译和运行阶段过程相当繁琐,下面就我的理解来进行解释: Java...程序从源文件创建到程序运行要经过两大步骤: 1、编译时期由编译器将源文件编译成字节码的过程 2、字节码文件由Java虚拟机解释执行 绑定 绑定就是一个方法的调用与调用这个方法的类连接在一起的过程被称为绑定...绑定分类 绑定主要分为两种: 静态绑定动态绑定 绑定的其他叫法 静态绑定 == 前期绑定 == 编译时绑定 动态绑定 == 后期绑定 == 运行时绑定 为了方便区分: 下面统一称呼为静态绑定动态绑定...上面的绑定方式称之为动态绑定,因为在你编写 Father son = new Son()的时候,编译器并不知道son对象真正引用的谁,在程序运行时期才知道,这个son一个Father类的对象,但是却指向了...动态绑定和静态绑定的特点 静态绑定 静态绑定在编译时期触发,那么它的主要特点 1、编译期触发,能够提早知道代码错误 2、提高程序运行效率 动态绑定 1、使用动态绑定的前提条件能够提高代码的可用性,使代码更加灵活

1.7K80

Java中的静态绑定动态绑定的区别,讲明白了

Java中的动态绑定Java中重写可以被认为动态绑定的最佳示例,因为父类和子类具有相同的方法 - 也就是说,它不决定要调用的方法。 什么Java中的静态绑定?...什么Java中的动态绑定?...静态绑定的基本要点。动态绑定 在这里,我们将讨论与Java中的静态和动态绑定相关的一些重要问题: 私有,最后和静态个体利用静态权威,而虚拟技术则限制在运行时期间根据运行时对象完成。...Java中的静态绑定使用官方类型数据,而Java限制中的动态绑定使用对象来确定绑定。 使用静态绑定来解决重载方法,同时使用动态绑定(即在运行时)重写方法。...所以,这完全是关于Java中的静态绑定动态绑定。希望你喜欢我们的解释。

1.8K10

浅谈JAVA中静态绑定动态绑定(源自《深入理解Java虚拟机》)

参考链接: Java中的静态绑定动态绑定 静态绑定:又称“前期绑定”,发生在编译期; 主要是方法重载(overload); 在编译阶段,javac编译器会根据参数的静态类型决定使用哪个重载版本。 ...动态绑定:又称“后期绑定”,发生在运行期; 主要是方法重写(override); 在运行阶段,Java虚拟机根据参数的实际类型决定调用哪个重写版本,查找的顺序从子类->父类,直到找到该方法的声明为止;...两者的区别是:静态类型的变化只发生在使用时,变量本身的静态类型不会发生改变,最终的静态类型在编译期可知的;而实际类型的变化的结果在运行期才能确定。 ...(2)动态绑定:  示例:  public class TestDynamicDispatch {     static abstract class Human{         protected...补充:Java语言中方法重写的本质:在运行期确定对象的实际类型。  ———————————我平凡的分割线———————————————————-  欢迎各位大神在下方留言赐教,小树不胜感激。

55220

java | 什么动态代理?

最近在复习 Java 相关,回顾了下代理模式。代理模式在 Java 领域很多地方都有应用,它分为静态代理和动态代理,其中 Spring AOP 就是动态代理的典型例子。..., 必须实现 InvocationHandler 接口,表明该类一个动态代理执行类。...动态代理 由此可见,动态代理一般应用在记录日志等横向业务。 值得注意的: 基于接口类的动态代理模式,必须具备抽象角色、委托类、代理三个基本角色。...与基于接口实现类不同的: CGLib (基于子类的动态代理)使用的方法拦截器 MethodInterceptor ,需要导入 cglib.jar 和 asm.jar 包 基于子类的动态代理,返回的子类对象...基于子类的动态代理 注意到 Me 类中被 protected 修饰的方法 sleep 仍然可以被客户端调用。这在基于接口的动态代理中不被允许的。

55620
领券