java 方法调用绑定

将一个方法调用同一个方法主体关联起来被称作绑定。若在程序执行前进行绑定(由编译器和连接器实现),叫做前期绑定。读者可能从来没有听说过这个术语,因为它在面向过程语言中不需要选择就默认的绑定方式。例如C语言有一种方法调用,那就是前期绑定。后期绑定也叫做动态绑定或是运行时绑定,它的含义是在运行时根据对象的类型进行绑定。如果一种语言想实现后期绑定,那就必须具有某种机制,以便在运行时能判断出对象的类型,从而调用恰当的方法。也就是说,编译器一直不知道对象的类型,但是方法调用机制能够找到正确的方法体,并加以调用。后期绑定机制随编程语言的不同而不同,但是只要想一下就会知道,不管怎样都必须在对象中安置某种“类型信息”。

Java中除了static方法和final方法(private方法属于final方法)之外,其他的方法都是后期绑定。这意味着通常情况下,我们不必判定是否应该进行后期绑定,因为他会自动发生。有时候,将某个方法声明为final,可以用来防止他人覆盖该方法。但是更重要的一点或许是:这样做可以有效的关闭“后期绑定”,或者说是告诉编译器不需要动态绑定。这样,编译器就能够为以final方法调用生成更有效的代码。然而,大多数情况下,这样做对程序的性能不会有什么改观。所以,最好根据设计来决定是否使用final,而不是根据试图提高性能的目的来使用final。

时间: 2024-10-14 11:22:50

java 方法调用绑定的相关文章

Java 方法调用

在调用方法时,程序的执行流程会进入方法的内部,当执行到方法内部的return语句或执行完方法内部的代码以后,则返回到调用该方法的位置继续向下执行. 方法调用的语法分为以下两种: 1.一个类内部的方法调用:指调用以及被调用的方法都在一个类的内部. 2.不同类之间的方法调用:指调用以及被调用的方法位于不同的类内部. 一个类内部方法调用语法 在进行方法调用时,调用的语法格式和static修饰符有关,所以按照一个方法在声明时是否有static修饰分为两类: (1)有static修饰的称作静态方法(2)没

Java方法调用中的别名处理

将一个对象传递到方法内部时,也会产生别名现象.//: PassObject.java// Passing objects to methods can be a bit tricky62class Letter {char c;}public class PassObject {static void f(Letter y) {y.c = 'z';}public static void main(String[] args) {Letter x = new Letter();x.c = 'a';

java方法调用中参数传递的方式

1 package org.awt; 2 3 import java.awt.Graphics; 4 import java.applet.Applet; 5 6 7 public class test{ 8 9 float ptValue; 10 11 public void changeInt(int value) 12 { 13 value=55;//1 14 int val=value;//2 15 System.out.print(value); 16 //这里理解为型參,pt.cha

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序.一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法.一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法.通常我们称这为分布式对象应用程序. 3.1 RMI的工作方式 分布式对象应用程序需要做的事情: l 查找(定位)远程对象. 应用程序可以使用各种不同的机制取得远程对象的引用.比如应用程序可以通过 RMI 提供的简单

【解惑】Java方法参数是引用调用还是值调用?

最近找实习,在笔试时候做了下面这道题:求下面代码的输出结果. public class MyClass { static void aMethod(StringBuffer sf1,StringBuffer sf2){ sf1.append(sf2); sf2=sf1; } public static void main(String[] args){ StringBuffer sf1=new StringBuffer("A"); StringBuffer sf2=new String

循环语句,跳转语句,方法调用

1)循环语句while,do/while,for 格式:while(布尔表达式){循环体语句}//先验循环,可执行0次或n次,若布尔表达式第一次为false,永不执行循环体语句 do{循环体语句}while(布尔表达式)://后验循环,可执行一次或n次,且至少执行一次 for(初始化:布尔表达式:变量变化的方式){循环体语句}//初始化只执行一次,且可以留白,但是分号必须要有(重点掌握) 2)跳转语句break,continue break:跳出本层循环,一旦遇见,break之后的代码通通不执行

JAVA方法和本地方法(转载)

转载自:http://blog.sina.com.cn/s/blog_5b9b4abe01016zw0.html JAVA中有两种方法:JAVA方法和本地方法 JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中 本地方法是由其它语言编写的,编译成和处理器相关的机器代码 本地方法保存在动态链接库中,即.dll(windows系统)文件中,格式是各个平台专有的 JAVA方法是与平台无关的,但是本地方法不是 运行中的JAVA方法调用本地方法时,虚拟机装载包含这个本地方法的动态库的,并

JVM 方法调用之解析

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还没有涉及到方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍最频繁的操作,但Class文件的编译过程不包含传统编译中的连接步骤,一切方法调用在Class文件里存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于之前说的直接引用).这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法调用过程变得相对复杂起来,需要在类加载期间,甚至到了运行期间才能确定目标方

多态方法调用的解析和分派

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作,Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于之前说的直接引用).这个特性给Java带来了更强大的动态扩展能力,但也使得Java方法调用过程变得相对复杂起来,需要在类加载期间,甚至到运行期间才能确定目标方法