美文网首页
9.7 如何在Java中进行静态类型检查?

9.7 如何在Java中进行静态类型检查?

作者: 尧字节 | 来源:发表于2017-12-31 08:58 被阅读22次

来自Wiki:

静态类型检查是基于对程序源代码的分析来验证程序的类型安全性的过程。

动态类型检查是在运行时验证程序的类型安全性的过程

Java在编译时使用静态类型检查来分析程序,以证明没有类型错误。 基本的想法是永远不要让坏事发生在运行时。 通过理解下面的例子,你应该很好地理解静态类型检查在Java中是如何工作的。

代码例子

假设我们有下面的类,A和B。

class A {
    A me() {
        return this;
    }
 
    public void doA() {
        System.out.println("Do A");
    }
}
 
class B extends A {
    public void doB() {
        System.out.println("Do B");
    }
}

首先,“new B().me()”返回什么? 一个A对象或一个B对象?
me()方法被声明为返回一个A,所以在编译期间,编译器只会看到它返回一个A对象。 但是,它在运行时实际上返回一个B对象,因为B继承了A的方法并返回它(自己)。

如何静态类型检查工作?

即使对象被调用是一个B对象,下面的行将是非法的。 问题是它的引用类型是A.编译器在编译期间不知道它的实际类型,所以它把对象视为类型A.

//illegal
new B().me().doB();

所以只能调用下面的方法。

//legal
new B().me().doA();

但是,我们可以将对象转换为B类型,如下所示:

((B) new B().me()).doB();

如果添加下面的C类,

class C extends A{
    public void doBad() {
        System.out.println("Do C");
    }
}

那么下面的语句是合法的,可以通过静态类型检查:

//legal
((C) new B().me()).doBad();

编译器不知道它是实时的,但是运行时会抛出一个转换异常,因为B不能被转换成C:

相关文章

  • 9.7 如何在Java中进行静态类型检查?

    来自Wiki: 静态类型检查是基于对程序源代码的分析来验证程序的类型安全性的过程。 动态类型检查是在运行时验证程序...

  • [C++11阅读][3-2-1]auto类型推导(上)

    静态类型、动态类型 C/C++是静态类型语言,在编译时进行类型检查。后来一些新兴的语言,比如Python、Java...

  • 说说如何在 Java 中执行 JavaScript 脚本

    Java 是强类型的静态语言,即所有的代码在运行之前都必须先进行严格的类型检查并编译为 JVM 字节码。这样做虽然...

  • 23:说说 C++,Java,JavaScript 这三种语言的

    从静态类型还是动态类型来看 静态类型,编译的时候就能够知道每个变量的类型,编程的时候也需要给定类型,如 Java ...

  • 语言类型实例

    无类型: 汇编弱类型、静态类型 : C/C++弱类型、动态类型检查: Perl/PHP强类型、静态类型检查 :Ja...

  • auto

    静态类型和类型检查。对于所谓的静态类型,类型检查主要发生在编译阶段;而对于动态类型,类型检查主要发生在运行阶段。这...

  • 类型检查

    Ø 静态检查:类型types 动态检查:值values Ø Java和许多其他编程语言中的一个点是 它的原始...

  • 编程语言里函数方法类型检查的重要性

    importance of type checking and evaluation 静态类型检查和动态类型检查:...

  • Screeps 使用 TypeScript 进行静态类型检查

    前言 作为使用 javascript 作为基础语言的游戏,screeps 自然支持使用 typescript(简称...

  • clojure spec

    clojure是一门动态类型的语言,在类型检查方面并没有c++/java 这种静态类型语言好用,所以多个模块之间进...

网友评论

      本文标题:9.7 如何在Java中进行静态类型检查?

      本文链接:https://www.haomeiwen.com/subject/rwsogxtx.html