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