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'; } }