Java之异常--7.1.1异常的处理

阅读更多

package com.aowin.define1;

import java.io.IOException;
import java.util.InputMismatchException;
import java.util.Scanner;

//程序中的问题分为两类
//Error类:错误,JVM生成并抛出的,程序员不需处理
//Exception类:异常,程序中的问题,需要我们程序员处理
//Throwable类是程序中所有问题的超类
//异常的分类(两类)
//1.运行期异常:程序运行时可能产生的异常,可以处理,也可以不处理,如果程序员不处理,交给系统默认的异常处理程序处理,但这样会导致程序中断,所以最好还是处理下
//2.编译期异常:编译时表现为语法错误,必须处理,否则编译通不过
//RuntimeException类是所有运行期异常的超类
//Exception类是所有异常的超类
//异常的处理(重点)
//处理方式1:通过try catch语句捕获异常
/*
    try{被监视的程序代码}
    catch(异常类型1  标识符){异常处理代码}
    catch(异常类型 2 标识符){异常处理代码}
    ...
    finally{
        不管异常是否发生都会执行的代码(一般用于释放资源,例如关闭文件等),除非JVM退出
    }
    
*/
//可以接多个catch子句,只要有一个匹配上了,执行完其中的异常处理代码,整个try catch就结束了
//可以捕获父类异常,但必须放在最后,也可以直接捕获父类异常,但这不推荐
//处理方式2:声明异常,将异常交给调用自己的方法处理,通过throws关键字将异常抛出去,可以抛出多个异常,异常类名中间用,隔开
/*
 *         public void 方法名(参数列表) throws  异常类名1,异常类名2...{}
 * 
 */

public class ExceptionTest {
    
    public static void main(String[] args) {
        try {
            int a=100;
            
            Scanner scan = new Scanner(System.in);
            System.out.println("请输入一个整数作为除数:");
            int b = scan.nextInt();
            
            int c = a/b;
            
            System.out.println("c="+c);
            //return;  //退出方法
            System.exit(0);  //退出JVM   参数0表示正常退出
        } 
        catch(InputMismatchException e){
            System.err.println("输出不匹配");
        }
        
        catch (ArithmeticException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
            System.err.println("除数不能为0"); 
        } 
        finally{
            System.out.println("不管异常是否发生,我都会被执行!"); 
        }
                
        
        //getInt();        
        
        //常见的异常
        //String[] arr=new String[10];
        //空指针异常
        //System.out.println(arr[0].length());   
        //数组越界异常
        //System.out.println(arr[10]);
        //字符串索引越界
        //System.out.println("hello".charAt(9)); 
        //类型转换异常
        //Object obj = new String("hello");
        //Integer i =(Integer)obj;
        
        /*try {
            getInt2();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        
        System.out.println("----------");
    }
    
    
    public static void getInt(){
        try {
            byte[] buf = new byte[1024];
            System.in.read(buf);
            String s = new String(buf);  //通过byte数组新建一个新的String
            s = s.trim();        //去掉字符串前后的空白符
            int i = Integer.parseInt(s);   //将数字字符串转换成整型数
            System.out.println("i="+i);
        }        
        catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
        catch (IOException e) { 
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
    //异常处理方式2:声明异常
    public static void getInt2() throws IOException,NumberFormatException {
    
            byte[] buf = new byte[1024];
            System.in.read(buf);
            String s = new String(buf);  //通过byte数组新建一个新的String
            s = s.trim();        //去掉字符串前后的空白符
            int i = Integer.parseInt(s);   //将数字字符串转换成整型数
            System.out.println("i="+i);    
        
    }

}
 

转载于:https://my.oschina.net/Watto/blog/873796

你可能感兴趣的:(Java之异常--7.1.1异常的处理)