异常

 什么是异常:

写/执行程序中,遇到异常,需要异常抛出来说明代码出现了问题,抛给使用者,处理异常。

异常是Java应用程序抛出和处理的非常严重,它可以分为Checked异常和运行时异常

Checked异常必须捕获或者声明抛出,否则无法编译成功,运行时异常不要求捕获或者声明抛出

Java中的异常处理通过五个关键字来实现;

try   catch  finally throw  throws 


1.异常处理机制::::::是专门  应对  异常出现后,如何解决该异常的一种手段。

throw:扔 抛出异常  throw new Exception("Msg");
throws:  声明异常

2.try catch中有return的情况
catch中有return,但是return以分号结束  ,finally先执行   回到return

3.在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定
有一个机制,就是异常上抛的机制。作用:为了工具的使用方,可以感知到这个异常。

4.try { 可能出现异常的代码}
  catch(){}
  finally{
  }
  throws
  throw new Exception();

 

package cn.javaoppday01;

import java.util.Scanner;

import org.apache.log4j.Logger;

public class Test {
    private static Logger logger=Logger.getLogger(Test.class.getName());
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //处理方式1:---if 逻辑
        Scanner input =new Scanner(System.in);
        System.out.println("请输入第一个数");        
        if(input.hasNextInt()==true){            
            int num1 =input.nextInt();
            System.out.println("请输入二个数");
            int num2 =input.nextInt();
            if (num2==0){
                System.out.println("除数不能为零,程序退出");
                logger.error("除数不能为零,程序退出");
                System.exit(1);
            
        }else{
            int jg =num1/num2;
            System.out.println(jg);
            }
        }else{
                System.out.println("你输入的不是整数,程序退出");
                System.exit(1);
            }
            
        }
        
        
    }
程序中的异常

运行的结果:

请输入第一个数
12
请输入二个数
0
除数不能为零,程序退出
log4j:WARN No appenders could be found for logger (cn.javaoppday01.Test).
log4j:WARN Please initialize the log4j system properly.
package cn.javaoppday01;

import java.util.Scanner;

public class Text11 {

    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        System.out.println("请输入被除数");
        int num1 =input.nextInt();
        System.out.println("请输入除数");
        int num2=0;
        if (input.hasNextInt()){
            num2 =input.nextInt();
            if (0==num2){
                System.err.println("输入的除数为0,程序退出");
                System.exit(1);
            }else{
                System.out.println(String.format("%d/%d=%d",num1,num2,num1/num2));                
            }
            
            
        }else{
            System.out.println("输入的除数不是整数 ,退出程序");
        System.exit(1);
        }
        input.close();
    }

}
程序中的异常2
请输入被除数
12
请输入除数
0
输入的除数为0,程序退出

 

2.使用异常机制

    异常处理机制,是专门应对异常出现后,如何解决该异常的一种手段
    异常是指程序在运行过程中所发生的不正常的时间,它会中断正在运行的程序
    Java编程语言使用异常处理机制为程序提供了错误处理机制
   异常处理关键字
     捕获异常
   try(试一试):执行可能产生异常的代码
   catch(抓住,捕获):捕获异常
   finally(最终):无论是否发生异常,代码总能执行
    

 注:在真实开发中,如果我们定制了工具类,工具类中有特别复杂的方法,需要各种断定,这个时候,工具类的方法一定有一个机制,就是异常上抛的机制,作用:为了工具的使用房,可以感知到这个异常

throws 和throw的区别

package cn.javaoppday01;

import java.util.InputMismatchException;
import java.util.Scanner;
//throws声明异常,能给调用者处理,调用者必须进行try。。catch
//位置:方法后面进行声明异常,多个异常使用逗号隔开
public class Text8Throws1 {

    public static void divid() throws InputMismatchException,ArithmeticException,Exception {
        Scanner input =new Scanner(System.in);
        System.out.println("请输入第一个数");    
        int num1 =input.nextInt();
        System.out.println("请输入二个数");
        int num2 =input.nextInt();
        int jg =num1/num2;
        System.out.println(jg);

    }
    public static void main(String[] args) {
        //调用者必须处理
        try {
            divid();
        } catch (InputMismatchException e) {
            System.err.println("输入不匹配");
            e.printStackTrace();
        } catch (ArithmeticException e) {
            System.err.println("除数不能为0");
            e.printStackTrace();
        } catch (Exception e) {
            System.err.println(e.getMessage());
            e.printStackTrace();
        }
        
    }

}
throws
package cn.javaoppday01;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Text9Thows2 {

    public static void main(String[] args)throws InputMismatchException,ArithmeticException,Exception {
        divid();

    }
    public static void divid() throws InputMismatchException,ArithmeticException,Exception {
        Scanner input =new Scanner(System.in);
        System.out.println("请输入第一个数");    
        int num1 =input.nextInt();
        System.out.println("请输入二个数");
        int num2 =input.nextInt();
        int jg =num1/num2;
        System.out.println(jg);

    }

}
throws

声明异常:
   throws(抛出):声明方法可能要抛出的各种异常
     抛出异常: 
   throw(抛出):手动抛出异常

   throws声明异常,抛给调用者,调用必须进行try...catch
   位置:方法名后面进行 声明异常,多个异常使用逗号隔开
    //声明异常,多个异常用逗号隔开
  只要有throws,强制要求方法调度方法必须 手段1:try catch 2.继续向上抛
 public static void a() throws 异常类型{
     //可能出现异常的代码
 }
   throw:手动抛出异常
       throw new Exception("异常");

异常的分类:

printStactTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程
  ex.getMessage();
    返回异常信息描述的字符串
  ex.printStactTrace();
  异常堆栈信息
  显示具体异常类型
  显示产生异常的具体位置


当异常类型不匹配时,程序之间中断

打印自定义处理信息:
 System.err.println(“自定义信息”);

 

posted @ 2018-03-08 12:37  秋风伊人  阅读(163)  评论(0编辑  收藏  举报