/*
* 自定义异常类
* sun提供了很多的异常类给我们用于描述程序中各种的不正常情况,但是sun给我提供异常类还不足以描述我们现实生活中所有不正常情况,那么这时候我们就需要自定义异常类。
*
* 需求: 模拟feiQ上线的时候,如果没有插上网线,那么就抛出一个没有插上网线的异常,如果已经插上了网上,那么就正常显示好友列表。
*
* 自定义异常类的步骤: 自定义一个类继承Exception即可。
*
* */
class NoIpException extends Exception{ //自定义了一个没有网线的异常类了。 public NoIpException(String message){ super(message); //调用了Exception一个参数的构造函数。 } } public class Exception_03 { public static void main(String[] args) { // TODO Auto-generated method stub String ip = "192.168.10.100"; ip = null; try{ feiQ(ip); // 如果调用了一个声明抛出异常类型的方法,那么调用者必须要处理。 }catch(NoIpException e){ e.printStackTrace(); System.out.println("马上插上网线!"); } } public static void feiQ(String ip) throws NoIpException{ if(ip==null){ throw new NoIpException("没有插网线啊,小白!"); } System.out.println("正常显示好友列表.."); } }
需求:模拟你去吃木桶饭,如果带钱少于了10块,那么就抛出一个没有带够钱的异常对象,如果带够了,那么就可以吃上香喷喷的地沟油木桶饭.
//定义没钱的异常 class NoMoneyException extends Exception { public NoMoneyException(String message){ super(message); } } class Demo3 { public static void main(String[] args) { //System.out.println("Hello World!"); try{ eat(9); }catch(NoMoneyException e){ e.printStackTrace(); System.out.println("跟我洗碗一个月!!"); } } public static void eat(int money) throws NoMoneyException{ if(money<10){ throw new NoMoneyException("吃霸王餐"); } System.out.println("吃上了香喷喷的地沟油木桶饭!!"); } }
异常体系:
--------| Throwable 所有错误或者异常的父类
--------------| Error (错误)
--------------| Exception ( 异常 ) 异常一般都通过代码处理
------------------| 运行时异常: 如果一个方法内部抛出了一个运行时异常,那么方法上 可以声明也可以不 声明,调用者可以以处理也可以不处理。
------------------| 编译时异常(非运行时异常、受检异常): 如果一个方法内部抛出了一个编译时异常对象,那么方法上就必须要声明,而且调用者也必须要处理。
运行时异常: RuntimeException以及RuntimeException子类 都是属于运行时异常。
编译时异常: 除了运行时异常就是编译异常。
疑问: 为什么java编译器会如此严格要求编译时异常,对运行时异常如此宽松?
运行时异常都是可以通过程序员良好的编程习惯去避免,所以java编译器就没有严格要求处理运行时异常。
*/ import java.security.acl.*; class Demo4 { public static void main(String[] args) throws InterruptedException { int[] arr = null; div(4,0,arr); Object o = new Object(); o.wait(); } public static void div(int a , int b ,int[] arr) { if(b==0){ return; } int c = a/b; System.out.println("c = "+c); if(arr!=null){ System.out.println("数组的长度: "+arr.length); } } }