本帖最后由 传奇查 于 2015-11-18 17:12 编辑
前篇~~~~~请点击上面↑↑↑↑↑↑
对你有用就给个鼓励奖吧~
异常的捕捉:
- package cn.fuxi.exception;
- /**
- * 异常处理的捕捉形式:
- * 可以对异常经行针对性处理的方式.
- *
- * 具体的格式是:
- * try{
- * //需要被检查异常的代码
- * } catch(异常类名 变量)//{该变量用于接收发生的异常对象
- * //处理异常的代码.
- * } finally{
- * //一定会执行的代码.
- * }
- *
- * P.S.finally代码块只有一种情况不会被执行,就是在之前执行了System.exit(0)//退出虚拟机
- *
- * 处理过程:
- * try中检测到异常会将异常对象传递给catch,catch捕获到异常经行处理.
- * finally里通常用来关闭资源.比如:数据库资源,IO资源等.
- * 需要注意:try是一个独立的代码块,其中定义的变量只有在该变量块中有效.
- * 如果try以外继续使用,需要在try外建立引用,在try中对其经行初始化.IO,Socket就会遇到.
- */
- class FuShuIndexException4 extends RuntimeException{
- FuShuIndexException4(){}
- FuShuIndexException4(String msg){
- super(msg);
- }
- }
- class Demo4{
- public static int method(int[] arr,int index){
- if(arr == null){
- throw new NullPointerException("没有任何数组实体");
- }
- if(index < 0){
- throw new FuShuIndexException4("数组的角标是负数咯~~");
- }
- return arr[index];
- }
- }
- public class ExceptionDemo4 {
- public static void main(String[] args) {
- int[] arr = new int[6];
- try{
- int num = Demo4.method(arr, -30);
- System.out.println("num: "+ num);
- }catch(NullPointerException e){
- System.out.println(e);
- }catch(FuShuIndexException4 e){
- System.out.println("message: "+ e.getMessage());
- System.out.println("String: "+ e);
- e.printStackTrace();//jvm 默认的异常处理机制就是调用异常对象的这个方法
- System.out.println("负数角标异常!!!!");
- }catch(Exception e){//Exception的catch放在最后,是为了先处理有针对性的异常
- System.out.println("e");
- }
- System.out.println("over");
- }
- }
复制代码 运行结果:
message: 数组的角标是负数咯~~
String: cn.fuxi.exception.FuShuIndexException4: 数组的角标是负数咯~~
cn.fuxi.exception.FuShuIndexException4: 数组的角标是负数咯~~
at cn.fuxi.exception.Demo4.method(ExceptionDemo4.java:35)
at cn.fuxi.exception.ExceptionDemo4.main(ExceptionDemo4.java:44)
负数角标异常!!!!
over
异常处理方式:
- package cn.fuxi.exception;
- /**
- * 异常处理的原则:
- * 1.函数内容如果抛出需要检测的异常,那么函数上必须要声明.
- * 否则,必须在函数内用try/catch捕捉,否则编译失败
- *
- * 2.如果调用到了声明异常的函数,要么try/catch,要么throws,否则编译失败.
- *
- * 3.什么时候catch,什么时候throws呢?
- * 功能内容可以解决,用catch.
- * 解决不了,用throws告诉调用者,由调用者解决.
- *
- * 4.一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性处理.
- * 内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个.
- *
- * try catch finally 代码块组合特点
- * 1.try catch finally
- * 2.try catch(多个):当没有资源需要释放时,可以不用定义finally.
- * 3.try finally:异常无法直接catch处理,但是资源必须关闭.
- */
- class Demo5{
- public int show(int index){
- if(index <0){
- throw new ArrayIndexOutOfBoundsException("越界啦!!");
- }
- int[] arr = new int[3];
- return arr[index];
- }
- }
- public class ExceptionDemo5 {
- public static void main(String[] args) {
- Demo5 d5 = new Demo5();
- try{
- int num =d5.show(-4);
- System.out.println("num = "+ num);
- } catch(ArrayIndexOutOfBoundsException e){
- System.out.println(e.toString());
- System.out.println(e.getMessage());
- System.out.println(e.getStackTrace());
- System.exit(0);
- }finally{//通常用于关闭(释放)资源
- System.out.println("finally");//由于前面执行了System.exit(0);故不会执行finally
- }
- System.out.println("over");
- }
- }
复制代码 运行结果:
java.lang.ArrayIndexOutOfBoundsException: 越界啦!!
越界啦!!
[Ljava.lang.StackTraceElement;@4e823618
案列:
- package cn.fuxi.exception;
- /**
- * 老师用电脑上课.
- *
- * 问题领域中涉及两个对象.
- * 毕老师,电脑
- *
- * 分析其中的问题
- * 比如:电脑蓝屏,冒烟等.
- *
- * 异常注意事项:
- * 1.RuntimeException以及其子类如果在函数中被throw抛出,可以不用在函数上声明.
- * 2.子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常,或者该异常的子类
- * 3.如果父类抛出多个异常,那么子类只能抛出父类异常的子集.
- * 简单说:子类覆盖父类只能抛出父类的异常,或者子类的子集.
- */
- class LanPingException extends Exception{
- LanPingException(String msg){
- super(msg);
- }
- }
- class MaoYanException extends Exception{
- MaoYanException(String msg){
- super(msg);
- }
- }
- class NoPlanException extends Exception{
- NoPlanException(String msg){
- super(msg);
- }
- }
- class Computer{
- private int state = 1;//0,2
- public void run() throws LanPingException, MaoYanException{
- if(state == 1){
- throw new LanPingException("电脑蓝屏啦!");
- }
- if(state == 2){
- throw new MaoYanException("电脑冒烟啦!");
- }
- System.out.println("电脑正常运行");
- }
- public void reset(){
- state =0;
- System.out.println("电脑重启");
- }
- }
- class Teacher{
- private String name;
- private Computer comp;
-
- Teacher(String name){
- this.name = name;
- comp = new Computer();
- }
- public void prelect() throws NoPlanException{
- try{
- comp.run();
- System.out.println(name + "讲课");
- }catch(LanPingException e){
- System.out.println(e.toString());
- comp.reset();
- prelect();
- }catch(MaoYanException e){
- System.out.println(e.toString());
- test();//对电脑经行维修
- throw new NoPlanException("课程进度无法完成,原因是:"+e.getMessage());
- }
- }
- public void test(){
- System.out.println("大家自习");
- }
- }
- public class ExceptionDemo6 {
- public static void main(String[] args) {
- Teacher t = new Teacher("有熊老师");
- try {
- t.prelect();
- } catch (NoPlanException e) {
- System.out.println(e.toString()+"...");
- System.out.println("换烈山老师");
- }
- }
- }
复制代码
运行结果:
cn.fuxi.exception.LanPingException: 电脑蓝屏啦!
电脑重启
电脑正常运行
有熊老师讲课
对你有用就给个鼓励奖吧~
|
|