课程作业六

(1) 下列语句哪一个将引起编译错误 ? 为什么 ? 哪一个会引 起运行时错误 ? 为什么 ?
m=d;
d=m;
d=(Dog)m;
d=c;
c=(Cat)m;
先进行自我判断,得出结论后,运行 TestCast.java 例代码,看看你的判断是否正确
回答:会,其中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 语句块一定会执行吗?
请通过 SystemExitAndFinally.java 示例程序回答上述 问题
 
不会,因为遇见System.exit(0);会直接退出系统。
(5)源代码:
package test;

import javax.swing.JOptionPane;


public class Shuru {
    double num;
    public void input(){
         try{
               String str=JOptionPane.showInputDialog("请输入成绩:");
               num=Double.parseDouble(str);
                       }
         catch(NumberFormatException e){
                        JOptionPane.showMessageDialog(null,  "输入的不是数字!",null,
                                 JOptionPane.PLAIN_MESSAGE);
                        input();
                    }
         finally{
             JOptionPane.showMessageDialog(null,  "ok!",null,
                     JOptionPane.PLAIN_MESSAGE);
         }
                   
       }
   public static void main(String args[]){
       Shuru a=new Shuru(); 
           
       while(true){
             a.input(); 
       if(a.num<=100&&a.num>=90){
           JOptionPane.showMessageDialog(null,  "成绩优秀!",null,
                     JOptionPane.PLAIN_MESSAGE);break;
       }
       else if(a.num<=89&&a.num>=80){
           JOptionPane.showMessageDialog(null,  "成绩良好!",null,
                     JOptionPane.PLAIN_MESSAGE);break;
       }
       else if(a.num<=79&&a.num>=70){
           JOptionPane.showMessageDialog(null,  "成绩中等!",null,
                     JOptionPane.PLAIN_MESSAGE);break;
       }
       else if(a.num<=69&&a.num>=60){
           JOptionPane.showMessageDialog(null,  "成绩及格!",null,
                     JOptionPane.PLAIN_MESSAGE);break;
       }
       else if(a.num<=59&&a.num>=0){
           JOptionPane.showMessageDialog(null,  "成绩不及格!",null,
                     JOptionPane.PLAIN_MESSAGE);break;
       }
       else{
           JOptionPane.showMessageDialog(null,  "输入数字超出范围!",null,
                     JOptionPane.PLAIN_MESSAGE);
       }
     }
   }
}

设计思想:定义input方法,输入判断看看是不是数字,如果不是则递归输入,进入主函数后,while循环判断其是不是超出输入范围,并且判断成绩类型。

程序流程图:课程作业六_第1张图片



 

你可能感兴趣的:(课程作业六)