• 带有编译时和运行时的简记


    编译时类型和运行时类型

    java引用变量有两个类型:一个是编译时类型,一个是运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。

    举个例子:

      person p = new Women() #其中Women类继承于person类。

      假设p的属性修饰符为public,那访问属性时得到的是Person类的属性还是Women类的属性?方法调用又是哪个类?、

      答案:会得到Person类的属性,调用Women类的方法。为什么会这样呢?这里就需要知道什么是编译时类型和运行时类型,Java程序状态会分为编译和运行这两种状态,编译时,JVM会在栈中静态创建基本数据变量,和引用数据变量的引用,回到刚刚那句代码,显然,p这个引用就是在编译时创建的,那么,p的编译时类型就是Person了,当运行这句java代码时,JVM在堆中为p新建一块内存,对应new Women()这句代码,所以p的运行时类型就是Women(栈和堆:栈中存放的是一些引用和一些变量,而堆内存中存放的是对象,所以编译时期可以理解为堆内存中还没有为该对象创建内存,只是在栈中创建了一些基本类型的变量和引用,所以编译时类型就是指在new该对象之前被加载到栈中的属性或方法。而运行时类型,是指new了一个对象出来,在堆中为该对象分配了内存,此时的运行时类型也就是堆中对象的属性或方法了。)


    编译时异常和运行时异常

      编译时异常需要我们手动的进行捕捉处理,即我们用try...catch块进行捕捉处理。举例子说就是想找你的文件,数据进行编译都找不到,不主动捕捉就发现不了,一直似死机状态。如:FileNotFoundException。

      运行时异常只有在编译运行时才会出现,不需要我们手动处理,如:NullPointerException(空指针异常)、ClassCastException(类型转换异常)、IndexOutOfBoundsException(数组下标越界异常)换句话说就是程序可以编译,只是输出的时候发生异常。

  • 相关阅读:
    cron表达式详解(转载)
    Swagger 3.0使用教程(转载)
    springboot整合shiro-对密码进行MD5并加盐处理(十五)(转载)
    redis排序
    引用和指针的区别?
    测试策略
    主键、外键的作用,索引的优点与不足?
    您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
    UI测试测什么
    数据库,数据库管理系统,数据库系统三者的区别和练习?
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/11996440.html
Copyright © 2020-2023  润新知