异常的关键字,以及自定义异常

try catch finally

package com.ffyc.jayapi.day1;
public class ExceptionDemo2 {  
    public static void main(String[] args) {  
        /*            异常处理    
        没有使用异常处理机制时,程序遇到异常,程序终止执行,不太好   
        如果想在程序遇到问题时依旧可以执行,那么需要我们在编写代码时,
        就需要将异常处理机制给预先写好,一旦出现问题,可以按照我们预定的处理机制执行  
        try{ 
        运行时可能出现问题  
        }catch(异常的类型){捕获try中出现的对应类型的异常问题
        处理异常的代码  
        }    
        不要认为异常处理是把有问题的代码处理好了,只是在代码出现问题时依然可任意向用户做出反应 
        */  
        System.out.println("程序开始运行");
        int a = 10;
        int b = 0; 
        try{
            int c = a/b;//当程序运行时出现问题,默认情况下,虚拟机抛出该问题的类的对象 
            System.out.println(c);
        }catch (ArithmeticException ae){ 
            System.out.println("算数异常"); 
        }catch(NumberFormatException ne){ 
            System.out.println("数字格式化异常");
        }catch (Exception e){  
            System.out.println(e.getMessage());//获取到异常原因   
            e.printStackTrace();//打印栈中异常的信息到控制台
            //在catch中,输出实际的异常的信息,以方便程序员调试信息 
            System.out.println("系统忙,请稍后重试");   
        }//父类异常写在子类下面  
        System.out.println("运行结束");   
    }
}
package com.ffyc.jayapi.day1;
//finally代码块不能单独使用,必须结合try{} 或者try{}catch{}
//finally中的代码一定会执行,所以将必须要执行的代码逻辑放在finally{}中
//try{
// }finall{
// }
//或者try{}catch(){}finally{}
public class FinallyDemo { 
    public static void main(String[] args) {  
        try{   
            System.out.println(10/0);
            System.out.println("aaaaaaaaaaaaaaa");
        }catch (NumberFormatException e){   
            System.out.println("系统忙"); 
        }finally {  
            System.out.println("必须要执行的代码"); 
        } 
    }
}

throws

在方法定义时,进行声明的,声明此方法可能会出现某种异常

package com.ffyc.jayapi.day1;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ThrowsDemo { 
    public static void main(String[] args) {
        /* 
        异常处理          
        throws       
        在方法声明时,表示此方法内,可能会出现某种异常,所以在调用此方法时需要注意    
        throw  
        */  
        try {  
            test1();//在调用方法的地方进行处理 
        } catch (ParseException e) { 
            e.printStackTrace();  
        }  
    }  
    /* 
    使用throws关键字,在方法定义处声明方法可能会出现某种异常,  
    出现后自己并没有处理,而是交给方法的调用处,去处理    
    如果throws后面是检查异常/编译期异常,那么在编译期间就必须进行处理
    如果throws后面是运行时异常那门在编译期间可以处理,也可以不处理   
    */  
    public static void  test1() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");   
        simpleDateFormat.parse(""); 
        Integer.parseInt("10");  
    }
}

throw

在方法题内用来抛出一个异常对象

package com.ffyc.jayapi.day1;
public class Throw {  
    public static void main(String[] args) {
        /*   
        throw 在方法体中用来抛出异常对象的,抛出后,方法相当于出现异常  
        */ 
        try {  
            charAt(-1);  
        }catch (StringIndexOutOfBoundsException a){  
            System.out.println(a.getMessage());   
        }
    } 
    public static char charAt(int index)throws StringIndexOutOfBoundsException{   
        if(index<0||index>10){  
            /*        
            throw new 异常类();    
            在方法运行过程中,当不满足某种条件时,主动在程序中抛出异常    
            */ 
            throw new StringIndexOutOfBoundsException("字符串下标越界"+index);
        }   
        return 'a';
    }

在源码中很多使用throws和throw处理异常,而我们的业务代码中经常使用try catch

自定义异常

java语言中提供了许许多多的异常类都是与语法相关的

而实际在业务开发中,有时,我们也需要在某种条件下抛出异常对象的方式进行处理

判断分数

所以,我们可以自定义一个异常类,当满足此类时抛出

例:判断分数

package com.ffyc.jayapi.day1;
public class ScoreExcepion extends Exception { 
    public ScoreExcepion() {
    }    
    public ScoreExcepion(String message) {
        super(message); 
    }
}

package com.ffyc.jayapi.day1;
public class TestScore {  
    public static void main(String[] args) { 
        try {      
            char b = pingfen(96);  
            System.out.println(b);  
        } catch (ScoreExcepion e) { 
            e.printStackTrace();   
            System.out.println(e.getMessage()); 
        }  
    }   
    public static char pingfen(int score) throws ScoreExcepion { 
        if(score<=0||score>100){   
            throw new ScoreExcepion("分数不合法"+score); 
        }       
        if(score>=90&&score<=100){  
            return 'A';  
        }        
        if(score>=80&&score<=90){  
            return 'B';
        }else {   
            return 'C';  
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值