异常: 自定义异常: 在java对一些常见的情况进行描述。形成了异常体系, 但是在自定义的项目发生的特定问题,java并没有针对的描述 所以按照java的面向对象思想,也可以对问题进行描述。 1,定义一个类继承Exception。 1.1为了让自定义的类具备可抛性。 1.2为了让自定义的类可以获取Throwable中的方法。 2,如果要给自定义异常定义信息描述。 可以通过构造函数将信息通过super语句向上传递。 class NoException extends Exception { NoException() { super(); } NoException(String message) { super(message); } } class Demo { void show(int x)throws NoException { if(x<0) throw new NoException("错错");//throw new RuntimeException("异常信息"); } } 如果函数内有throw进行异常抛出。那么函数上一定义要有对应的throws标识。 特例情况: 如果函数内容throw抛出的是RuntimeException或其子类。 那么函数上可以不用throws标识。 因为RuntimeException是运行时才会检查的异常。 编译时期不会被检查。 而其他的异常,都是编译时期的被检查的异常。所以必须要标识,否则编译失败。 在自定义异常时,同样也可以继承RuntimeException。 异常处理的规则: 1,调用被throws标识的函数时,需要对该函数进行处理. a,继续抛出。 b,通过try catch finally处理。 2,当调用的功能抛出多个异常时,处理中的如果通过try catch,需要定义多个与之对应的catch进行处理。 多catch出现时,一定要注意,父类的catch向下放。 3,当子类覆盖父类时,只能抛出父类异常的子类,或者异常的子集。 class Fu { void show()throws A,B,C{} } class Zi extends Fu { void show(){} } 特殊:如果被覆盖的方法没有抛出异常。那么子类覆盖时,也不可以抛,但子类中还出现了异常。那么只能trycatch。 4,函数内只要发生了异常,没有被catch,就必须要标识。当然,运行时异常除外。 格式特点: try+catch(多个). try+finally{} try+catch+finally{} 只有catch是对异常的处理。没有catch就是没有处理异常。 finally:该代码块中定义的语句一定会被执行。 什么时候用呢? 当关闭资源时,需要将关闭动作定义在finally当中。 关闭数据库资源,关闭系统资源。 只有一种情况读不到,System.exit(0); void checkUser(String name) { if(name.equals("abc"))//if("abc".equals(name))//if(name!=null && name.equals("abc")) System.out.println("ok"); else System.out.pirntln("no"); } 异常的分层封装: show()throws NoException { try { throw new SQLException(); } catch(Exception e) { throw new NoException("数据操作未成功"); } }