异常

package com.njwb18081.day16;

import java.io.File;
import java.io.FileInputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Scanner;

public class Test01 {
    public static void main(String[] args) {
        /*
         * Throwable可抛出的
                exception异常:需要程序员考虑解决的
                error错误:开发人员不需要考虑error的问题


            exception:编译时异常---执行javac命令的过程中
                          运行时异常 –执行java命令的过程中
         * 
         * exception异常的产生
         */

//      编译时异常
//      DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//      df.parse("1977/07/07 07:07:07");

        //将硬盘的文件读取的java程序中
//      FileInputStream fis=new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\jdk-8u161-windows-x64.exe"));

//      运行时异常
//      String str=null;
//      System.out.println(str.equals("abc"));//空指针异常

//      System.out.println(1/0);//运算异常

//      int[] arr=new int[4];
//      System.out.println(arr[-1]);//数组下标越界异常

//      Scanner sc=new Scanner(System.in);
//      System.out.println("请输入数字:");
//      System.out.println(sc.nextInt());//输入格式不匹配异常    
    }
}
package com.njwb18081.day16;

import java.io.FileInputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.InputMismatchException;
import java.util.Scanner;

public class Test02 {
    public static void main(String[] args) {
        /*
         * 针对于程序出现exception异常进行处理
         * 捕获:自己想办法解决
         *          格式:
         *      try{
         *          可能出现异常的代码:如果这段代码出现异常,try{}中当前代码以下的代码时不执行的
         *      }catch(异常的数据类型 e){
         *          针对于出现当前异常数据类型的异常进行处理
         *      }catch(异常的数据类型 e){
         *          针对于出现当前异常数据类型的异常进行处理
         *      }finally{
         *          无论执行try或者catch都会执行到finally中
         *      }
         *      
         *      catch如果写多个,父类的异常类型不能写在子类的异常类型之前
         * 抛出:自己不解决,扔给别人帮我解决
         */

        Scanner sc=new Scanner(System.in);
        try{
            System.out.println("请输入一个整数的除数:");
            int i=1/sc.nextInt();//可能出现异常的代码
            System.out.println(i);
//          DateFormat df=new SimpleDateFormat("yyyy/MM/dd");
//          df.parse("1999-01-01");


        }catch(ArithmeticException e){
//          针对于出现ArithmeticException的处理
            System.out.println("0不能作为除数");
        }catch (InputMismatchException e) {
            System.out.println("你输入内容不符合规范");
        }catch(Exception e){
            System.out.println(e);//当前异常对象的异常类型和错误信息
            System.out.println(e.getMessage());//错误消息
            e.printStackTrace();//打印异常的堆栈信息
        }finally{
//          无论执行时try还是catch都会执行到finally
            System.out.println("执行结束...");
        }
        System.out.println(4444444);

    }

}
package com.njwb18081.day16;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Test03 {
    public static void main(String[] args) {
        /*
         * 异常抛出:自己不解决,扔给别人帮我解决
         * 如果抛出的异常时runtimeException或者时它子类型,throws后可以不写,会自动抛出
         * 针对方法中出现的异常,如果不想自己处理,可以选择throws将异常抛出
         * 自动抛出:直接在方法上使用throws 异常对象类型,进行当前方法中所出现的异常进行抛出
         * 手动抛出:可以选择针对当前异常类型的抓去,然后通过另一个匿名类对象的异常进行throw
         * 
         */
        Test03 t=new Test03();
        try{
            t.fn();
        }catch (ParseException e) {
            e.printStackTrace();
//          System.out.println(e.getMessage());
        }catch (Exception e) {
            e.printStackTrace();
//          System.out.println(e.getMessage());
            System.out.println("程序执行出错,请稍候....");
        }
        System.out.println("---------------------------");
        try{
            t.fn2();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        System.out.println("---------------------------");
        try {
            t.fn3();
        } catch (Exception e) {
//          .ArithmeticException
            System.out.println(e.getMessage());
        }

    }

    //自动抛出异常
    public void fn() throws ParseException{
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//      df.parse("1977/07/07 07:07:07");
//      int i=1/0;//ArithmeticException(运行时异常) 当前方法throws的位置可以不写,依然会自动抛出到调用当前方法的函数中
    }

    //手动抛出异常
    public void fn2() throws Exception{
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        try{
            df.parse("1977/07/07 07:07:07");
        }catch (ParseException e) {
            throw new Exception("格式转换有问题");
        }
    }

    public void fn3() throws Exception{
        try{
            int i=1/0;
        }catch (ArithmeticException e) {
            throw new Exception("这个方法中出现问题了");
        }
    }   
}
// 自定义异常
package com.njwb18081.day16;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Test03 {
    public static void main(String[] args) {
        /*
         * 异常抛出:自己不解决,扔给别人帮我解决
         * 如果抛出的异常时runtimeException或者时它子类型,throws后可以不写,会自动抛出
         * 针对方法中出现的异常,如果不想自己处理,可以选择throws将异常抛出
         * 自动抛出:直接在方法上使用throws 异常对象类型,进行当前方法中所出现的异常进行抛出
         * 手动抛出:可以选择针对当前异常类型的抓去,然后通过另一个匿名类对象的异常进行throw
         * 
         */
        Test03 t=new Test03();
        try{
            t.fn();
        }catch (ParseException e) {
            e.printStackTrace();
//          System.out.println(e.getMessage());
        }catch (Exception e) {
            e.printStackTrace();
//          System.out.println(e.getMessage());
            System.out.println("程序执行出错,请稍候....");
        }
        System.out.println("---------------------------");
        try{
            t.fn2();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        System.out.println("---------------------------");
        try {
            t.fn3();
        } catch (Exception e) {
//          .ArithmeticException
            System.out.println(e.getMessage());
        }

    }

    //自动抛出异常
    public void fn() throws ParseException{
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//      df.parse("1977/07/07 07:07:07");
//      int i=1/0;//ArithmeticException(运行时异常) 当前方法throws的位置可以不写,依然会自动抛出到调用当前方法的函数中
    }

    //手动抛出异常
    public void fn2() throws Exception{
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        try{
            df.parse("1977/07/07 07:07:07");
        }catch (ParseException e) {
            throw new Exception("格式转换有问题");
        }
    }

    public void fn3() throws Exception{
        try{
            int i=1/0;
        }catch (ArithmeticException e) {
            throw new Exception("这个方法中出现问题了");
        }
    }
}


package com.njwb18081.day16;

public class MyRuntimeExceprion extends RuntimeException {

    public MyRuntimeExceprion() {
        super();
        // TODO Auto-generated constructor stub
    }

    public MyRuntimeExceprion(String message, Throwable cause) {
        super(message, cause);
        // TODO Auto-generated constructor stub
    }

    public MyRuntimeExceprion(String message) {
        super(message);
        // TODO Auto-generated constructor stub
    }

    public MyRuntimeExceprion(Throwable cause) {
        super(cause);
        // TODO Auto-generated constructor stub
    }
}

package com.njwb18081.day16;

public class Test04 {
    public static void main(String[] args) {
        /*
         * 自定义异常对象
         * class 自定义异常名称 extends Exception
         * class 自定义异常名称 extends RuntimeException
         */

        Test04 t=new Test04();
        try {
            t.fn();
        } catch (MyException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("---------------------------");
        try{
            t.fn2();
        }catch (MyRuntimeExceprion e) {
            System.out.println(e.getMessage());
        }catch (Exception e) {
            System.out.println(e);
        }

    }

    public void fn() throws MyException{
        int[] arr=new int[4];
        try{
            System.out.println(arr[-1]);
        }catch(Exception e){
            throw new MyException("程序出错");
        }
    }

    public void fn2(){
        try {
            int i=1/0;
        } catch (Exception e) {
            throw new MyRuntimeExceprion("计算有误");
        }
    } 
}

总结
  • 一张图
  • 五个关键字(try,catch,finally,throws,throw)
  • 先逮小的,后逮大的
  • 异常和重写的关系
  • 自定义异常
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值