多态与异常处理课后作业
2015-11-15 11:15
190 查看
(1)下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?
m=d;
d=m;
d=(Dog)m;
d=c;
c=(Cat)m;
回答:其中d=m出现错误是因为,基类赋值给子类必须进行强制类型转换;d=c出错是因为,子类之间不能赋值。
(2)动手动脑:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识
出现系统提示的除0错误。去掉try外侧的k=i/j代码,则提示catch住的错误。
java异常处理机制:
1.把可能会发生错误的代码放进try语句块中。
2.当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。
catch语句块中的代码用于处理错误。
3.当异常发生时,程序控制流程由try语句块跳转到catch语句块。
4.不管是否有异常发生,finally语句块中的语句始终保证被执行。
5.如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。
finally的功能:
1.资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况
2.finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。
3.注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。
(3)请先阅读EmbedFinally.java示例,再运行它,观察其输出并进行总结。
当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
(4)辨析:finally语句块一定会执行吗?
不会,因为遇见System.exit(0);会直接退出系统。
(5)动手动脑
设计思想:定义input函数,判断输入的类型,若正常则执行判断输出结果最后退出系统,若不正常则重复输入直至正常。
程序流程图:
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115111426212-118312607.png)
运行结果:
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180835900-498089630.png)
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180840181-209954362.png)
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180843947-1631519261.png)
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180847790-613408298.png)
m=d;
d=m;
d=(Dog)m;
d=c;
c=(Cat)m;
回答:其中d=m出现错误是因为,基类赋值给子类必须进行强制类型转换;d=c出错是因为,子类之间不能赋值。
(2)动手动脑:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识
出现系统提示的除0错误。去掉try外侧的k=i/j代码,则提示catch住的错误。
java异常处理机制:
1.把可能会发生错误的代码放进try语句块中。
2.当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。
catch语句块中的代码用于处理错误。
3.当异常发生时,程序控制流程由try语句块跳转到catch语句块。
4.不管是否有异常发生,finally语句块中的语句始终保证被执行。
5.如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。
finally的功能:
1.资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况
2.finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。
3.注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。
(3)请先阅读EmbedFinally.java示例,再运行它,观察其输出并进行总结。
当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。
(4)辨析:finally语句块一定会执行吗?
不会,因为遇见System.exit(0);会直接退出系统。
(5)动手动脑
import javax.swing.*; public class Test { public static void input() { while(true) { double i=0; String s=JOptionPane.showInputDialog("输入分数:"); try { i=Double.parseDouble(s); } catch(NumberFormatException e) { JOptionPane.showMessageDialog(null,"输入错误","验证结果:",JOptionPane.PLAIN_MESSAGE ); input(); } finally { JOptionPane.showMessageDialog(null,"OK","验证结果:",JOptionPane.PLAIN_MESSAGE ); } if(0<=i&&i<60) { JOptionPane.showMessageDialog(null,"不及格","验证结果:",JOptionPane.PLAIN_MESSAGE ); System.exit(0); } else if(i>=60&&i<70) { JOptionPane.showMessageDialog(null,"及格","验证结果:",JOptionPane.PLAIN_MESSAGE ); System.exit(0); } else if(i>=70&&i<80) { JOptionPane.showMessageDialog(null,"良好","验证结果:",JOptionPane.PLAIN_MESSAGE ); System.exit(0); } else if(i>=80&&i<=100) { JOptionPane.showMessageDialog(null,"优秀","验证结果:",JOptionPane.PLAIN_MESSAGE ); System.exit(0); } else { JOptionPane.showMessageDialog(null,"超出范围","验证结果:",JOptionPane.PLAIN_MESSAGE ); } } } public static void main(String[] args){ input(); } }
设计思想:定义input函数,判断输入的类型,若正常则执行判断输出结果最后退出系统,若不正常则重复输入直至正常。
程序流程图:
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115111426212-118312607.png)
运行结果:
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180835900-498089630.png)
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180840181-209954362.png)
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180843947-1631519261.png)
![](http://images2015.cnblogs.com/blog/753514/201511/753514-20151115180847790-613408298.png)
![](file:///c:/users/admin/appdata/roaming/360se6/User Data/temp/760845-20151114155839665-1040645673.png)
相关文章推荐
- 匿名内部类-细节
- CSS3 from W3C学习笔记
- 在Matlab中使用mex函数进行C/C++混合编程
- 释放模式-JDK7之后带资源的try构造
- LeetCode OJ:Range Sum Query - Immutable(区域和)
- App的网络性能优化实践
- Matlab C混合编程
- 常见的一些宏定义
- HDU 2151:Worm【dp】
- HttpClient 登录爬取信息
- Dockerize Apache HAWQ [作者:陶征霖]
- BestCoder Round #62 (div.2)Clarke and food (简单贪心)
- list接口和set接口
- Android Studio的使用(一)--显示行号、快速查找方法源
- javascript中this的学习总结
- 带你玩转Visual Studio——命令行编译C/C++程序
- management_studio 开发总结
- linux vim 配置文件(高亮+自动缩进+行号+折叠+优化)
- java_12-24-part one
- java多态与异常处理——动手动脑