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

来自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:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,231评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,092评论 19 139
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 5,078评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 4,798评论 0 4
  • 不防晒不仅黑得快,还老得快。 紫外线分为三种,UVA,UVB和UVC. UVC完全臭氧吸收。 UVB导致晒伤。 U...
    CharlotteLuu阅读 3,051评论 0 0

友情链接更多精彩内容