`
gp562
  • 浏览: 10578 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

泛型 ,动态绑定,静态绑定

阅读更多

一、泛型  http://www.aqee.net/java-generics-quick-tutorial/

    简单点讲,泛型能节省某些java类型转换(casting)上的操作。泛型的主要好处就是让编译器保存参数的类型信息,执行类型检查,执行类型转换操作,编译器保证了这些类型转换的绝对无误。

    相对于程序员来记住对象类型执行类型转换(这可能会导致程序运行失败),而利用泛型,编译器能够帮助程序员在编译时强制进行大量的类型检查,发现其中的错误。

    在使用java泛型时,自动封转(Autoboxing)和自动拆装(Autounboxing)这两个特征会被自动用,而封装和解封装会带来性能上的损失。

 

二、动态绑定,静态绑定http://blog.sina.com.cn/s/blog_600046120100wdza.html

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

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

    动态绑定(后期绑定):在运行时根据具体对象的类型进行绑定,若有一种语言实现了后期绑定,同时必须提供一些机制,可在运行期间判断对象类型,并分别调用适当的方法。也就是说编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体。

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

    在java中,几乎所有的方法都是动态绑定的,在运行时动态绑定方法是属于子类还是基类的。但是也有特殊,针对static和final方法,由于不能被继承,因此在编译时就可以确定他们的值,private声明的方法和成员变量不能被子类继承,所有的private方法都被隐式的final的(由此我们可以知道,将方法声明为final类型意一是为了防止方法被覆盖,二是为了有效的关闭java中的动态绑定)。java中的后期绑定是由JVM实现的。

   java中的向上转型或者说多态是借助于动态绑定实现的。

   比如:Parent p = new Children();其具体编译细节如下:

  1. 编译器检查对象的声明类型和方法名。假设我们调用x.f(args)方法,并且x已经被声明为C类的对象那么编译器会列举出C类众所的方法名为f的方法和从C类的超类继承过来的f方法。
  2. 接下来编译器检查方法调用中提供的参数类型。如果所有名称为f的方法中有一个参数类型和调用的方法的参数类型最为匹配,那么久调用这个方法,这个过程叫做“重载解析”。
  3. 当程序运行并且使用动态绑定调用方法时,虚拟机必须调用同x所指向的对象的实际类型所匹配的方法版本。假设实际类型为D(C的子类),如果D类定义了f,那么该方法被调用否则就在D的超类中搜寻方法f,以此类推。

注意,在处理java的成员变量时,并不是采用动态绑定,而是一般意义上的静态绑定。所以在向上转型的情况下,对象的方法可以找到子类,而对象的属性还是父类。
 

 

 

分享到:
评论
2 楼 静夜独窗 2014-10-13  
“程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主题)关联起来”,读了十遍也没懂啊,用实例代码解释呗。“方法的调用与方法所在的类关联起来“,想象不出代码情景呢,求 帮助
1 楼 静夜独窗 2014-10-13  
瞪的很大眼睛的同学,能说一下什么是绑定吗

相关推荐

    泛型集合(动态添加按纽)

    动态添加按钮可以让应用更具灵活性,可以根据需要创建任意数量的按钮,而不是在设计时静态定义所有按钮。 1. 事件处理:每个按钮通常都需要关联一个或多个事件处理程序,比如点击事件。动态添加按钮时,我们需要...

    iPhone编程的多态、动态类型和动态绑定

    Swift同样支持动态绑定,但不如Objective-C普遍,因为Swift更倾向于静态绑定以提高性能和代码安全性。 在实际开发中,多态、动态类型和动态绑定的应用非常广泛。例如,使用协议可以创建灵活的组件系统,让不同类型...

    Java的动态绑定与双分派_动力节点Java学院整理

    理解动态绑定、静态绑定和双分派的概念对于深入掌握Java的面向对象编程至关重要。它们不仅影响代码的可读性、可维护性,还关系到性能和设计模式的运用。在实际开发中,合理利用这些特性可以编写出更加灵活和高效的...

    C#2.0的泛型编程

    在泛型类中定义静态成员时需要注意,因为静态成员与类型绑定,而不是实例。这意味着如果类中有多个实例,它们会共享相同的静态成员。 #### 七、泛型方法 除了泛型类之外,C#还支持泛型方法。这种方法可以独立于类...

    asp.net实现利用反射,泛型,静态方法快速获取表单值到Model的方法

    总之,通过结合反射、泛型和静态方法,我们可以创建一个高效、灵活的工具,用于处理ASP.NET应用程序中常见的从表单到Model的数据绑定任务。这种方法减少了重复代码,提高了代码可维护性,并降低了出错的可能性。在...

    求职宝典-Java 基础面试题

    Java 基础面试题涵盖了诸如动态绑定、静态绑定、多态、语法糖等多个核心概念。动态绑定,也称为后期绑定,是指在运行时根据对象的实际类型决定调用哪个方法。例如,在`Father son = new Son(); son.drinkMilk();`...

    解析C++中的虚拟函数及其静态类型和动态类型

    虚拟函数是C++语言引入的一个很重要的特性,它提供了“动态绑定”机制,正是这一机制使得继承的语义变得相对明晰。 (1)基类抽象了通用的数据及操作,就数据而言,如果该数据成员在各派生类中都需要用到,那么就...

    有关c#的核心操作以及绑定

    - **静态绑定**(早期绑定):编译时就确定了方法调用,适用于非虚方法。编译器知道方法的实现,因此性能较高。 - **动态绑定**(晚期绑定):运行时确定方法调用,主要应用于虚方法或接口实现。这种方式提供了更...

    .Net基础视频教程之10-面向对象多态-2.zip

    8. **虚方法调用与动态绑定**:在.Net中,非静态方法的调用分为静态绑定和动态绑定。静态绑定发生在编译阶段,确定方法的调用;动态绑定则发生在运行时,根据对象的实际类型确定调用的方法。虚方法调用就是典型的...

    c++C++C+++

    3. 动态和静态绑定:C++ 支持动态绑定(运行时绑定)和静态绑定(编译时绑定)。动态绑定通过虚函数实现,增加了代码的灵活性;静态绑定则在编译阶段确定,有利于提高效率。 4. 异常处理:C++ 提供了异常处理机制,...

    Inside the C++ Object Model

    6. **静态与动态绑定**:静态绑定(早期绑定)是在编译时确定的,而动态绑定(晚期绑定)是在运行时根据对象的实际类型确定的。C++中的非虚函数是静态绑定的,而虚函数是动态绑定的。 7. **内存管理**:了解C++对象...

    深度探索C++对象模型

    6. **动态绑定与静态绑定**:静态绑定(也称为早期绑定)发生在编译阶段,而动态绑定(也称为晚期绑定)发生在运行阶段,主要涉及到虚函数的调用。 7. **内存布局**:书中还会详细探讨对象在内存中的布局,包括成员...

    OC与C++的不同之处

    文章中通过实例说明了C++中静态绑定与Objective-C中动态绑定的不同。 C++是一种静态类型语言,意味着变量的类型在编译时就已经确定,编译器会使用类型信息来检查程序中的错误,并为程序生成具体的机器码。C++的多态...

    C#动态填充toolscrip

    首先,"动态填充"通常指的是在运行时动态地生成或修改对象的属性和方法,而不是在编译时静态定义。C# 4.0及更高版本引入了`dynamic`关键字,它允许程序员在编译时不指定具体的类型,而是在运行时解析操作。这样,...

    effectiveC++

    6. **静态与动态绑定**:C++支持静态绑定(编译时绑定)和动态绑定(运行时绑定)。静态绑定适用于非虚函数,而动态绑定适用于虚函数,这是C++多态的基础。 7. **多态与继承**:通过虚函数和抽象类,C++实现了多态...

    详解C++ 多态的两种形式(静态、动态)

    总之,C++的多态性提供了强大的设计工具,静态多态通过编译期的决策提供效率和灵活性,而动态多态则通过运行时的动态绑定实现更高级别的抽象和代码复用。理解并熟练运用这两种多态形式,对于编写高效、可维护的C++...

    C++编程思想(第2版)_第1卷

    4. **静态与动态绑定**:C++支持静态绑定(编译时绑定)和动态绑定(运行时绑定)。静态绑定适用于非虚函数,而动态绑定用于虚函数,使得多态性成为可能。 5. **继承与多态**:C++通过继承机制实现代码复用和层次...

    深度探索C++对象模型.rar

    8. **静态与动态绑定**:C++中的绑定分为静态绑定(编译时绑定)和动态绑定(运行时绑定)。理解这两种绑定的区别和应用场景,可以有效利用C++的特性进行设计。 9. **内存管理**:C++提供了对内存的直接控制,包括...

Global site tag (gtag.js) - Google Analytics