`

java学习之编译时类型和运行时类型 .

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

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

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

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

分享到:
评论

相关推荐

    java编译和运行

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

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

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

    java绿色反编译工具

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

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

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

    Java学习课件.pdf

    根据给定的文件信息,以下是关于Java学习课件的知识点: Java基础知识点: 1. Java虚拟机(JVM):JVM负责将Java源文件(.java)编译为可执行文件(.class)。Java程序运行时,JVM负责解释字节码,将其转换为机器码。 2. ...

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

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

    java反编译工具

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

    java反编译.zip

    Java反编译是将已编译的Java字节码(.class文件)转换回源代码的过程,这在软件开发、逆向工程、调试和学习库内部实现时非常有用。Java的字节码并不直接对应于源代码,因此需要特定的工具来解析它。在这个“java反...

    gui java反编译工具

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

    java编译实验包

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

    java学习文档.pdf

    综上所述,Java学习文档提供了全面的基础知识和详细的入门指南。文档内容不仅涵盖了Java开发环境的搭建和运行机制,还包括了Java语言的基本语法规则和数据类型,以及如何编写和运行一个简单的Java程序。掌握这些知识...

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

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

    Java开发技术大全(500个源代码).

    示例描述:本章学习运行时类型识别。 Candy.java 一个用来测试的简单类 changeFields.java 改变属性值示例 Circle.java 一个用于测试的简单类 DumpMethods.java 使用反射机制来获取类中的方法 getClassName....

    java 反编译工具 反编译.rar

    JD-GUI是一款强大的Java反编译工具,它提供了直观的图形用户界面,使得开发者能够方便地查看和分析`.class`文件中的代码。 JD-GUI的特点和功能包括: 1. **即时查看**:一旦打开JD-GUI,你可以直接拖放`.class`...

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

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

    编译原理java版

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

    class编译成JAVA文件

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

    Java学习路径.pdf

    在Java学习的初期,掌握classpath环境变量和JAVA_HOME环境变量的设置至关重要,它们决定了Java编译和运行时查找类文件的路径。API(Application Programming Interface)是编程者使用Java的重要参考,了解并熟练使用...

    java 泛型类的类型识别示例

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

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

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

Global site tag (gtag.js) - Google Analytics