资讯专栏INFORMATION COLUMN

编译时和运行时

yhaolpz / 2684人阅读

摘要:的引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,会出现所谓的多态。

Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。

引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法,因此,编写Java代码时,引用变量只能调用声明该变量所用类里包含的方法。与方法不同的是,对象的属性则不具备多态性。通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时类所定义的属性,而不是它运行时所定义的属性。

所谓的编译期,就是将Java代码编译成.class文件的过程,该过程只涉及到语法句法的正确与否,不涉及内存方面及执行方面的检查。
所谓的运行期,就是Java虚拟机执行.class文件的过程。该过程会涉及到内存调用。实际类型检查等方面。

关于动态绑定,在调用该引用实例的方法的时候,会优先去调用该实例引用的运行时方法,也就是实际类型的方法。而在调用该引用实例的成员变量的时候,会优先去调用该实例应用的编译时的成员变量,也就是声明的类型的成员变量。对于,调用引用实例的方法,在编译时,是调用声明类型的成员方法(多态的实现原理),也就是所谓的编译时类型的方法,而到了运行时,调用的是实际的类型的成员方法,也就是所谓的运行时类型的方法。而对于调用引用实例的成员变量,在编译时,即是调用声明类型的成员变量,在运行时更是调用声明类型的成员变量,也就时说,对于调用引用实例的成员变量,无论是编译时还是运行时,均是调用编译时类型的成员变量。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66105.html

相关文章

  • Go 1.17 发布,主要更新了工具链、运行库的实现

    摘要:主要更新在工具链运行时和库的实现方面。类型的表达式现在可以被转换为数组指针类型。特别是,正确使用的现有程序仍然有效,而新程序在使用或时仍然必须遵循规则。请注意,从到数组指针的新转换是类型转换在运行时可能发生恐慌的第一种情况。 .markdown-body{color:#595959;font-size:15px;font-family:-apple-system,system-ui...

    longmon 评论0 收藏0
  • JavaScript如何工作:引擎,运行调用堆栈的概述

    摘要:如果我们进入一个函数,我们在堆栈的顶部。看看下面的代码当引擎开始执行此代码时,调用堆栈将为空。之后,步骤如下调用堆栈中的每个条目称为堆栈帧。这正是抛出异常时构造堆栈跟踪的方式当异常发生时,它基本上是调用堆栈的状态。 随着JavaScript越来越受欢迎,团队正在利用这个技术栈在多个层次- 前端,后端,混合应用程序,嵌入式设备等等提供支持。 这篇文章旨在成为系列中第一个旨在深入挖掘Jav...

    wwolf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<