`

Java学习 之 编译时类型和运行时类型

阅读更多

    Java中的许多对象(一般都是具有父子类关系的父类对象)在运行时都会出现两种类型:编译时类型和运行时类型,例如:Person person = new Student();这行代码将会生成一个person变量,该变量的编译时类型是Person,运行时类型是Student。

    说明一下编译时类型和运行时类型:

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

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

分享到:
评论
1 楼 zhangshaoru 2012-04-26  
“与方法不同的是,对象的属性则不具备多态性。通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时类所定义的属性,而不是它运行时所定义的属性。”

这句不对吧,静态方法也跟对象属性一样,系统总是访问它编译时类所定义的静态方法,而不是运行时定义的

相关推荐

    java编译和运行

    Java 编译与运行是Java开发中的基础...总结起来,Java的编译和运行过程涉及到JVM、JDK和JRE的使用,以及环境变量的配置。了解这些基础知识对于学习和使用Java编程至关重要,同时也为更深入的Java开发奠定了坚实的基础。

    java绿色反编译工具

    这种类型的软件对用户来说非常友好,因为它们可以在任何安装了Java运行环境的计算机上运行,而不会影响系统的其他部分。 使用Java反编译工具时,开发者通常会打开一个.jar文件或单个.class文件,然后工具会尝试解析...

    java反编译工具

    总的来说,Java反编译工具是开发者和研究人员的重要资源,它们帮助我们理解运行时环境中的代码,尤其是在没有源代码的情况下。jd-gui作为其中的一员,以其易于使用的界面和可靠的反编译效果,成为了许多人的首选。在...

    java现代编译原理.rar_java 编译_现代编译原理_编译_编译原理_编译原理 java

    通过深入学习编译过程,我们可以更好地了解程序的运行机制,从而做出更明智的设计决策和性能优化。《Java现代编译原理》一书可能涵盖了这些主题,并提供了实用的案例和指导,对于深化Java编程知识是极好的资源。

    gui java反编译工具

    总的来说,Java反编译工具是开发者研究和学习Java代码的重要工具,`jd-gui.exe`作为一款GUI工具,简化了这个过程,使得开发者可以更加便捷地理解和调试Java程序。然而,出于版权和道德考虑,未经许可的反编译可能...

    Editplus 配置java编译运行

    初学者更适合使用文本编辑软件来学习Java,对Java有一定认识后推荐使用Eclipse,对那些要求开发效率的程序员当然首选就是JBuilder。  对于文本编辑软件我推荐EditPlus,EditPlus是很多程序员非常熟悉的编辑工具,...

    Android-Android中编译时注解实际运行Demo仿照ButterKnife来写的

    在Android开发中,注解(Annotation)是一种强大的元数据,可以为代码添加额外的信息,而这些信息可以在编译时或运行时被解析和利用。ButterKnife是一款著名的Android视图绑定库,它通过注解简化了UI元素的绑定,...

    java反编译专家java反编译专家java反编译专家java反编译专家java反编译专家

    4. **类型推断**:基于字节码的运行时信息,推断变量和表达式的类型。 5. **语法构造恢复**:根据分析结果重构Java语法树,形成类似于源代码的结构。 需要注意的是,反编译的目的是为了学习和研究,不应用于非法的...

    编译原理java版

    9. **泛型与类型擦除**:Java的泛型是一种在编译时用于增强类型安全的特性,但在运行时会被类型擦除。这意味着编译后的字节码并不包含泛型信息,但编译器会进行相应的类型检查和转换。 10. **反射**:Java的反射...

    java程序的编译及运行共6页.pdf.zip

    Java程序的编译和运行过程是学习Java编程的基础,也是理解其工作原理的关键。 一、Java程序的编译 在Java中,源代码文件通常以`.java`为扩展名,这些文件包含了Java类的定义。编译Java程序的步骤如下: 1. **编写...

    java编译实验包

    通过实践这些命令和分析提供的示例代码,你将能更好地理解Java的编译和运行机制,并且能够独立地在命令行环境中编写、编译和运行Java程序。这将为你的Java编程之旅打下坚实的基础。记得在实践中不断尝试和调试,以...

    现代编译原理java版

    10. **泛型和类型擦除**:Java中的泛型在编译时是如何被处理的,以及类型擦除的概念。 通过学习《现代编译原理Java版》,读者不仅可以深入了解编译器的工作原理,还能掌握如何针对Java平台进行编译器设计,这对于...

    java 泛型类的类型识别示例

    这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时ClassCastException的可能性。本示例将探讨如何在Java中实现泛型类的类型识别。 首先,我们来理解什么是类型识别(Runtime Type ...

    很强大的java反编译程序

    Java反编译是将已编译的字节码文件(.class)转换回源代码(.java)的过程,这对于理解二进制库的功能、逆向工程或学习代码实现很有帮助。标题提到的“很强大的java反编译程序”通常指的是能够高效且方便地完成这一...

    java入门教程:数据类型_运行时常量池.docx

    Java编程语言的基础知识中,数据类型和运行时常量池(Runtime Constant Pool)是两个关键概念。数据类型决定了变量可以存储的值的种类和大小,而运行时常量池则是Java虚拟机(JVM)内存模型中的一个重要组成部分。 ...

    Java反编译软件,jd-gui

    6. **版权和法律问题**:在反编译他人的代码时,务必遵守版权法,只用于合法的学习和研究目的。 总的来说,JD-GUI作为一个直观且易于使用的Java反编译工具,对于开发者来说是一个宝贵的资源,能够帮助他们更好地...

    熟悉Java程序的编辑、编译和运行环境.doc

    #### 一、Java 程序的编辑、编译和运行环境 ##### 实验目的概述 本次实验旨在帮助学习者掌握Java程序的基本开发流程,包括但不限于环境配置、基本语法理解以及简单程序的设计与实现。通过实践操作加深对Java语言的...

    class编译成JAVA文件

    它的反编译结果被认为是最接近原始源代码的,特别是在处理复杂类型和泛型时。 然而,反编译他人 `.class` 文件的行为可能存在法律风险。如果这些文件受版权保护,未经许可的反编译可能侵犯了原作者的知识产权。因此...

    java反编译软件(能够反编译class文件为java格式文件)

    - **学习和教育**:查看已编译的库的内部实现,有助于学习和理解Java编程。 - **调试**:在没有源代码的情况下,反编译可以帮助定位问题。 5. **反编译的限制**:反编译不总是能完全恢复原始源代码,因为某些信息...

Global site tag (gtag.js) - Google Analytics