JavaSE异常类

来源:互联网 发布:儒道数据分析地址 编辑:程序博客网 时间:2024/06/08 11:29
package com.shuhuadream.www;//异常/* * Throwable常用的方法: * toString()当前异常对象的完整类名 * getMessage()返回的是创建Throwable传入的字符串信息 * printStackTrace()打印异常的栈信息 * */public class Demo08 {public static void main(String[] args){/*//创建一个Throwable对象Throwable t = new Throwable("头晕,感冒");String info = t.toString();String m = t.getMessage();t.printStackTrace();System.out.println(info); //java.lang.Throwable 包名+类名System.out.println(m); */test();}public static void test(){Throwable t = new Throwable();t.printStackTrace();}}
/* * 异常的体系 * ----------|Throwable 所有异常或者错误类的超类 * ------------|Error 错误错误一般是jvm或者是硬件引发的问题,所以我们一般不会通过代码去处理错误的。 * ------------|Exception 异常是需要通过代码去处理 *  * 如何区分错误与异常: * 如果程序出现了不正常的信息,如果不正常信息出现了Error结尾的就是错误, * 如果是以Exception结尾的,那么肯定是一个异常 * */
package com.shuhuadream.www;/* * 异常的处理: *  * 方式一:捕获处理 * 格式:try{ *   可能发生异常的代码 *  }catch(捕获的异常类型 变量名){ *  处理异常的代码。。。 *  } *  * 捕获处理注意的细节: * 1.经过异常处理之后,那么try-catch块外面的代码可以正常执行 * 2.如果try块中出了异常的代码,那么在try块中出现异常代码后面的代码是不会执行了。 * 3.一个try块后面可以捕获多种异常类型 *  *  方式二:抛出异常 * */public class Demo10 {public static void main(String[] args){int[] arr = null;div(4,2,arr);}public static void div(int a,int b,int[] arr){int c = 0;try{c = a/b;System.out.println("数组的长度为:"+arr.length);}catch(ArithmeticException e){System.out.println("toString="+e.toString());}catch(NullPointerException e){System.out.println("出现了空指针异常。。");}System.out.println("c="+c);}}
package com.shuhuadream.www;/* * 异常的处理方式---抛出处理 *  * 抛出处理(throw throws) *  * 抛出处理要注意的细节: * 1.如果一个方法的内部抛出一个异常,一定要在这个方法上声明抛出 * 2.如果调用了一个声明抛出的异常,那么调用者必须要处理 * 3.如果一个方法内部抛出了异常对象,那么throw语句后面的代码就不会再执行了 * (一个方法遇到了throw关键字,该方法也会马上停止执行的) * 4.在一种情况下,只能抛出一种异常对象 *  * throw 和 throws两个关键字 * 1.throw关键字是用于方法内部的,throws是用于方法声明上的 * 2.throw关键字是用于方法内部抛出一个异常对象的,throws关键字是用于在方法声明上声明抛出异常类型的 * 3.throw关键字后面只能有一个异常对象,throws后面一次可以声明抛出多种类型的异常 *  * 何时使用抛出处理?何时使用捕获处理?原则是什么? * 如果需要通知调用者,代码出了问题,那么这时候就使用抛出处理 * 如果代码是直接与用户打交道遇到了异常千万不要再抛,再抛的话,就直接给了用户,这个时候就应该使用捕获处理 *  * */public class Demo11 {public static void main(String[] args) {try{int arr[] = null;div(4,0,arr);}catch(Exception e){System.out.println("出现异常!!");e.printStackTrace();}}public static void div(int a,int b,int[] arr) throws Exception{if(b==0){throw new Exception();//抛出一个异常对象}else if(arr==null){throw new NullPointerException();}int c = a/b;System.out.println("c="+c);}}
package com.shuhuadream.www;//自定义异常类/* *  */public class Demo01 {public static void main(String[] args) {String ip = "192.168.10.100";ip = null;try {feiQ(ip);//调用} catch (NoIpException e) {e.printStackTrace();}}//使用异常类public static void feiQ(String ip) throws NoIpException{if(ip==null){throw new NoIpException("没有插网线");}else{System.out.println("正常显示好友");}}}//自定义一个异常类class NoIpException extends Exception{public NoIpException(String message){super(message);}}

package com.shuhuadream.www;/* * 需求:模拟你去吃木桶饭,如果带钱少于10元,就抛出一个没有带够钱的异常对象, * 如果钱带够了,那么就可以吃上香喷喷的地沟油木桶饭 */public class Demo03 {public static void main(String[] args){int money = 11;try {eatWoodenRice(money);} catch (noMoneyException e) {e.printStackTrace();}}public static void eatWoodenRice(int money) throws noMoneyException{if(money<10){throw new noMoneyException("钱不够");}else{System.out.println("你可以吃上香喷喷的地沟油木桶饭!");}}}//定义异常类class noMoneyException extends Exception{public noMoneyException(String message){super(message);}}

package com.shuhuadream.www;//运行时异常,编译时异常/*异常体系:--------| Throwable  所有错误或者异常的父类--------------| Error(错误)--------------| Exception(异常) 异常一般都通过代码处理 ------------------| 运行时异常: 如果一个方法内部抛出了一个运行时异常,那么方法上 可以声明也可以不 声明,调用者可以以处理也可以不处理。------------------| 编译时异常(非运行时异常、受检异常):  如果一个方法内部抛出了一个编译时异常对象,那么方法上就必须要声明,而且调用者也必须要处理。运行时异常: RuntimeException以及RuntimeException子类 都是属于运行时异常。编译时异常: 除了运行时异常就是编译异常。疑问: 为什么java编译器会如此严格要求编译时异常,对运行时异常如此宽松?运行时异常都是可以通过程序员良好的编程习惯去避免,所以java编译器就没有严格要求处理运行时异常。*/public class Demo04 {public static void main(String[] args){div(4,0);}public static void div(int a,int b){if(b==0){throw new ArithmeticException();//抛出算法异常}int c = a/b;System.out.println("c="+c);}}