动手动脑1
CatchWho.java运行结果:
CatchWho2.java运行结果:
EmbedeFinally.java运行结果:
finally语句块一定会执行吗?
SystemExitAndFinally.java运行结果:
只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行。如果在try语句块之前返回(return)或者抛出异常,try对应的finally语句块就不会执行。
动手动脑2
如何跟踪异常的传播路径?
- 当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。
- 可使用printStackTrace 和 getMessage方法了解异常发生的情况:
- printStackTrace:打印方法调用堆栈。
- 每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。
PrintExpressionStack.java运行结果:
动手动脑3
回答问题
. 左边的程序运行结果是什么?
2. 你如何解释会得到这样的输出?
在调用的时候,对象是子类的,就调用子类的方法,对象是父类的就调用父类的方法。
3. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?
1当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。这个特性实际上就是面向对象“多态”特性的具体表现。
2如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
3如果子类被当作父类使用,则通过子类访问的字段是父类的.