Java程序中的捕获异常 静态变量 执行顺序

183 阅读2分钟

1、捕获异常 在这里插入图片描述

注意点:

在这里插入图片描述 在这里插入图片描述

2、静态变量static

在这里插入图片描述

注意点:

在这里插入图片描述

output: callme a = 8 callme b = 11 Mydemo.a = 8 Mydemo.b = 11 obj1.a = 8 obj1.b = 11

3、执行顺序

这一部分是非常重要同样也是一个难点!在遇到继承+静态+代码块+成员变量赋值+构造方法重载+多态的组合时,我们应该如何确定赋值、代码块、构造方法的执行顺序?代码块有构造代码块、静态代码块,那么问题是不是又更加复杂了? 学习这部分是需要搞清楚JVM虚拟机原理的,但是由于课业时间有限,所以暂时总结出执行顺序的方法,遇到这种问题不再害怕!

在这里插入图片描述

首先在main中new了一个类AnalysisTest,这个类是继承的HelloA,在进入子类的时候会先进入到父类中,而父类中存在静态代码块和构造代码块,所以优先执行静态代码块!然后回到子类中执行静态代码块,再回到父类执行构造代码块和构造方法,最后回到子类执行构造代码块和构造方法。

总结一下,如果没有继承,那么执行的先后顺序是:静态代码块 构造代码块 构造方法,其中main中代码块的执行优先于创建的其他类中的代码块。并且!如果在main中new了多次同一个类,该类中的static代码块只能执行一次!!! 如果有继承,那么顺序满足如下顺序:

在这里插入图片描述

output: static A static B I'm class A HelloA I'm clas B HelloB

再来看一个例子: 在这里插入图片描述

这道题没有构造代码块和静态代码块,所以代码相比上一题更直接些。

  • main方法里是多态,work()调用的是子类的方法
  • 子类构造方法第一句会默认调用super(),即父类的无参构造方法

output: Inside programmer method, num=10, super.num=5