zoukankan      html  css  js  c++  java
  • Java有关异常处理的小程序

     1.Aboutexception程序

    代码:

    import javax.swing.*;
    
    class AboutException {
    
       public static void main(String[] a)
    
       {
    
         int i=1, j=0, k;     //infinity正无穷
    
        // k=i/j;
    
         
    
    try //监控
    
    {
    
    k = i/j;    // Causes division-by-zero exception
    
    //throw new Exception("Hello.Exception!");
    
    }
    
    catch ( ArithmeticException e)
    
    {
    
    System.out.println("被0除.  "+ e.getMessage());
    
    }
    
    catch (Exception e)
    
    {
    
    if (e instanceof ArithmeticException)
    
    System.out.println("被0除");
    
    else
    
    {  
    
    System.out.println(e.getMessage());
    
    }
    
    }
    
    finally               
    
         {
    
          JOptionPane.showConfirmDialog(null,"OK");
    
         } 
    
      }
    
    }

    运行结果:

     

    修改后(删除出现错误的语句)

     

    Finally必定运行。

    2.若将1中int类型改为double,输出结果为infinity而非异常,因为javac在编译时将int语句生成为idiv字节码指令,而double则生成ddiv字节码指令,JVM在具体实现这两个指令时,采用了不同的处理策略,导致两段代码运行时得到不同的结果。

    3.阅读代码catchwho.Java,写出运行结果

    public class CatchWho { 
        public static void main(String[] args) { 
            try { 
                    try { 
                        throw new ArrayIndexOutOfBoundsException(); 
                    } 
                    catch(ArrayIndexOutOfBoundsException e) { 
                           System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch"); 
                    }
     
                throw new ArithmeticException(); 
            } 
            catch(ArithmeticException e) { 
                System.out.println("发生ArithmeticException"); 
            } 
            catch(ArrayIndexOutOfBoundsException e) { 
               System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
            } 
        } 
    }

    运行结果:

     

    4.运行catchwho2并写出结果:

    public class CatchWho2 { 
        public static void main(String[] args) { 
            try {
                    try { 
                        throw new ArrayIndexOutOfBoundsException(); 
                    } 
                    catch(ArithmeticException e) { 
                        System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch"); 
                    }
                throw new ArithmeticException(); 
            } 
            catch(ArithmeticException e) { 
                System.out.println("发生ArithmeticException"); 
            } //不允许累积错误
            catch(ArrayIndexOutOfBoundsException e) { 
                System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch"); 
            } 
        } 
    }

    运行结果:

    5.EmbedFinally.java

    代码:

    public class EmbededFinally {
    
     
    
    public static void main(String args[]) {        
    
    int result;        
    
    try {            
    
    System.out.println("in Level 1");           
    
      try {               
    
    System.out.println("in Level 2");
    
                       // result=100/0;  //Level 2
    
      try {                 
    
      System.out.println("in Level 3");                     
    
      result=100/0;  //Level 3                
    
    }                 
    
    catch (Exception e) {                    
    
    System.out.println("Level 3:" + e.getClass().toString());                
    
    }
    
                        
    
    finally {
    
                        
    
    System.out.println("In Level 3 finally");
    
                    
    
    }               
    
    // result=100/0;  //Level 2           
    
    }
    
                
    
    catch (Exception e) {
    
                   
    
      System.out.println("Level 2:" + e.getClass().toString());
    
               
    
      }
    
      finally {
    
                    
    
    System.out.println("In Level 2 finally");
    
               
    
     }
    
                 
    
    // result = 100 / 0;  //level 1
    
            
    
    }
    
            
    
    catch (Exception e) {
    
                
    
    System.out.println("Level 1:" + e.getClass().toString());        
    
    }
    
            
    
    finally {             
    
    System.out.println("In Level 1 finally");
    
     
    
    }  
    
    }
    
    }

    运行截图:

     

    Finally方法必定运行。

    总结:当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

    6.通过SystemExitAndFinally.java示例程序验证finally语句块是否一定会执行。

    代码:

    public class SystemExitAndFinally {
    
        
    
    public static void main(String[] args)
    
        {       
    
    try{          
    
    System.out.println("in main");           
    
    throw new Exception("Exception is thrown in main");
    
                 //System.exit(0);
    
    }
    
            
    
    catch(Exception e)
    
            {           
    
    System.out.println(e.getMessage());           
    
    System.exit(0);        
    
    }
    
            
    
    finally        
    
    {
    
    System.out.println("in finally");
    
    }    
    
    }
    
    }

    运行结果截图:

     

    由此,finally语句块一定会执行。

    7.编写一个程序,此程序在运行时要求用户输入一个整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

    代码;

    package boke1125;
    
     
    
    import java.io.BufferedReader;
    
    import java.io.IOException;
    
    import java.io.InputStreamReader;
    
    import java.util.Scanner;
    
     
    
    public class Grade {
    
     
    
    public static void main(String[] args)  {
    
    while(true){
    
    //判断整数//判断成绩等级
    
     try {
    
     BufferedReader buf = new BufferedReader(
    
                    new InputStreamReader(System.in));   
    
                 //抛出受控的异常
    
            System.out.println("请输入考试成绩:(正整数)");   
    
                int grade = Integer.parseInt(buf.readLine());
    
                       //有可能引发运行时异常
    
                System.out.println("成绩为:  "+grade);
    
       
    
       if(grade<0||grade>100){
    
     MyException1 e1=new MyException1("成绩应在0~100之间!");
    
       throw e1;
    
       }
    
       if(grade>=0&&grade<60){
    
       System.out.println("你处于不及格水平");
    
       break;
    
       }
    
       else if(grade>=60&&grade<70){
    
       System.out.println("你处于及格水平");
    
       break;
    
       }
    
       else if(grade>=70&&grade<80){
    
       System.out.println("你处于中等水平");
    
       break;
    
       }
    
       else if(grade>=80&&grade<90){
    
       System.out.println("你处于良好水平");
    
       break;
    
       }
    
       else if(grade>=90&&grade<=100){
    
       System.out.println("你处于优秀水平");
    
       break;
    
       }
    
     }
    
            //以下异常处理语句块是必须的,否则无法通过编译
    
     catch(MyException1 e1) {
    
                System.out.println(e1);
    
            }   
    
      
    
     catch(IOException e) {
    
                System.out.println("I/O错误");
    
            }
    
      //以下异常处理语句块可以省略,不影响编译,但在运行时出错
    
            catch(NumberFormatException e) {
    
                System.out.println("成绩必须为整数");
    
            }
    
    }
    
    }
    
     
    
    }
    
     
    
    class MyException1 extends Exception{          
    
    public MyException1(String str){
    
    super(str);
    
    }
    
    }

    运行结果截图:

  • 相关阅读:
    北风设计模式课程---13、享元模式
    北风设计模式课程---观察者模式2
    北风设计模式课程---观察者模式
    北风设计模式课程---12、观察者模式
    Linux下yum订购具体解释
    不黑诺基亚,他们觉得萌萌达
    System.Threading.ThreadStateException
    SRS微信号和QQ组
    hibernate它 10.many2many单向
    UML 简单的总结
  • 原文地址:https://www.cnblogs.com/chen160340/p/6099468.html
Copyright © 2011-2022 走看看