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);

}

}

 

运行结果截图:

 

posted @ 2016-11-24 21:05  暖心系  阅读(421)  评论(0编辑  收藏  举报