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

静态绑定与动态绑定

    博客分类:
  • Java
阅读更多
一.定义

1.方法绑定:一个方法被调用时该方法关联其方法体的过程。
2.静态绑定:在面向过程的中又称为前期绑定在程序编译时进行了绑定,即在还没运行时,就已经加载到内存。
3.动态绑定:在面向过程中称为后期绑定(运行时绑定)在运行时就进行绑定,根据实际情况有选择的进行绑定。


二.优越性

         动态绑定灵活性相对静态绑定来说要高,因为它在运行之前可以进行选择性的绑定,很多时候优点就是缺点,正是因为选择性的绑定,所以动态绑定的执行效率要低些(因为,绑定对象,还要进行编译)。

三.静态绑定实例
//父类
public class Person {
	
	protected String attribute="人的特性";

}

//子类
public class Male extends Person {

	protected String attribute = "男人的特性";

	
}
//测试

public class Tester {

public static void main(String[] args) {

		Person p = new Male();

		System.out.println("" + p.attribute);
	}


}





输出结果:人的属性

可以看出子类的对象调用到的是父类的成员变量。所以必须明确,动态绑定针对的范畴只是对象的方法。


static 块静态加载:

public class StaticTest {

	static {

		System.out.println("没有主方法我照样执行");
	}
}


运行结果:
没有主方法我照样执行java.lang.NoSuchMethodError: main
Exception in thread "main" 


java中的变量都是静态绑定的;
构造方法 以及private,static,final类方法的调用都是静态绑定的。

四.动态绑定实例

//父类
public class Person {
  
  public void  show(){
     System.out.println("人的特性");
  }
}
//子类
public class Male extends Person{

   public void show(){

    System.out.println("男人的特性");
}
}
//测试
public  class Tester{

public static void main(String [] args){
            
        Person p = new Male();
        p.show();
    }
}


运行结果:男人的特性

上面当创建一个Male类对象,通过继承的关系向上转型立即赋值给Person类的对象,貌似调用的是Person中的show();,然而从输出的结果看调用的却是Male类中的show();这就是动态绑定的结果,它能在运行时找到实际最适合类型的方法进行调用


分享到:
评论
1 楼 My*Love 2010-08-05  
不错,理解ing

相关推荐

    《剑指offer》Java理解静态绑定与动态绑定.pdf

    Java中的静态绑定与动态绑定是面向对象编程中的两个核心概念,它们关系到程序的编译与运行时行为。理解这两个概念对于写出高效、灵活的代码至关重要。 首先,静态绑定(也称为前期绑定或编译时绑定)是指在编译期间...

    Java 静态绑定与动态绑定深入分析

    Java中的静态绑定与动态绑定是面向对象编程中的关键概念,它们决定了方法调用的方式和时机。静态绑定(也称为早期绑定或编译时绑定)和动态绑定(也称为晚期绑定或运行时绑定)是Java中多态性实现的基石。 **静态...

    Java动态绑定和静态绑定.doc

    总的来说,理解和掌握动态绑定与静态绑定的概念对于编写健壮、可扩展的Java代码至关重要。它们是Java多态性的基础,也是面向对象编程中的关键特性。在实际编程中,开发者应根据需求选择合适的方法绑定类型,以实现既...

    深入理解C++的动态绑定和静态绑定

    在C++编程语言中,动态绑定和静态绑定是两种关键的多态实现方式,它们对于理解和编写高效、灵活的代码至关重要。多态性允许我们通过一个共同的基类接口访问不同派生类的对象,从而提高了代码的重用性和可扩展性。 ...

    Java中的静态绑定和动态绑定Java开发Java经验技巧

    在Java编程语言中,静态绑定和动态绑定是两个至关重要的概念,它们关乎程序的执行效率和灵活性。了解这两个概念对于提升Java开发技能至关重要。 首先,我们来解释一下静态绑定(也称为早期绑定)。静态绑定主要涉及...

    WPF样式静态资源绑定

    二、静态资源与动态资源 在WPF中,资源可以分为静态资源和动态资源。静态资源在应用程序加载时被解析,一旦创建,其值在整个应用程序生命周期中保持不变,适合于那些不需改变的资源。动态资源则可以在运行时更改,...

    ARP静态绑定批处理文件

    标题中的“ARP静态绑定批处理文件”指的是一个用于在局域网环境中实现ARP静态绑定的自动化脚本。ARP(Address Resolution Protocol)是TCP/IP协议栈中的一个重要组件,它用于将IP地址转换为物理(MAC)地址,以便在...

    华为S5720静态DHCP绑定操作

    #### 一、DHCP与静态绑定概述 在现代网络管理中,动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)是一种自动化分配IP地址和其他网络参数的技术。对于拥有大量终端设备的企业网络而言,手动配置每个...

    理解Java中的静态绑定和动态绑定

    在Java编程语言中,静态绑定和动态绑定是两种不同的方法调用机制,它们与面向对象编程密切相关。这两种绑定方式决定了程序在运行时如何选择和执行特定的方法。 静态绑定(早期绑定),也称为编译时绑定,是指在程序...

    Java中的静态绑定和动态绑定

    一个Java程序的执行要经过编译和执行(解释)这两个...  静态绑定发生在编译时期,动态绑定发生在运行时  使用private或static或final修饰的变量或者方法,使用静态绑定。而虚方法(可以被子类重写的方法)则会根

    ARP静态绑定批处理文件脚本

    - 静态绑定可能会阻止动态IP分配,如果你的网络环境使用DHCP服务,需谨慎操作,以免造成网络配置混乱。 - 当网络设备的IP地址发生变化时,原有的静态绑定会失效,需要及时更新批处理文件并重新执行。 总之,ARP静态...

    吕鑫:【C++语法与数据结构第22天】【第3堂课】动态绑定与静态绑定(面试题)

    1、讲解和演示动态绑定与静态绑定的概念与原理; 2、讲解和演示虚析构函数的概念与原理,并讲解为什么构造函数不能使用虚函数的原因;

    深入理解C++的动态绑定与静态绑定的应用详解

    C++是一种强大的面向对象编程语言,它支持两种主要的绑定机制:静态绑定和动态绑定,这两种绑定机制在实现多态性方面起着关键作用。本文将深入探讨这两种绑定方式及其应用。 首先,我们要理解对象的静态类型和动态...

    WPF绑定静态变量的示例代码

    在WPF中,我们可能会遇到需要将控件与这样的全局状态关联的情况,这时绑定到静态变量就变得很有用。 在WPF中,数据绑定是通过`{Binding}`标记扩展或代码-behind来实现的。绑定到静态变量的步骤如下: 1. **定义...

    WPF绑定静态变量的示例代码(二)加上IValueConverter

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中绑定静态变量,并通过使用IValueConverter接口来实现动态更新控件的显示。WPF是.NET Framework的一部分,它为构建丰富的桌面应用程序提供了...

    C++中的静态绑定和动态绑定

    C++在面向对象编程中,存在着静态绑定和动态绑定的定义,本节即是主要讲述这两点区分。  我是在一个类的继承体系中分析的,因此下面所说的对象一般是指一个类的实例。  首先我们需要明确几个名词定义:  静态...

    Win7静态绑定网关MAC防止arp攻击

    在Windows 7系统中,传统的`arp -s`命令无法直接将IP地址与MAC地址进行静态绑定。这是因为Windows 7的安全策略禁止使用该命令来添加已经绑定的地址。因此,我们需要使用更高级的命令行工具——`netsh`来实现这一功能...

    Java方法的动态绑定与静态绑定

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

    详解PHP后期静态绑定分析与应用

    总结起来,PHP 后期静态绑定是面向对象编程中一个强大的工具,它使得静态方法和属性在继承链中的行为更加灵活,能够根据实际调用场景动态改变解析的目标类。理解并熟练掌握这一特性,对于编写复杂的面向对象代码和...

Global site tag (gtag.js) - Google Analytics