java的异常学习

异常 Exception 

代码示例

//异常处理函数。
public class TestDemo {
    public static void main(String args[]) {
        System.out.println("1. 除法计算开始。");
        try {
            System.out.println("2. 除法计算:" + (10/ 0));	// 此处产生异常
            // 异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行
            System.out.println("发生异常后,这个不应该执行");
        } catch (Exception e) {								// 处理所有异常类型
            e.printStackTrace();
        } finally {
            System.out.println("### 不管是否出现异常我都执行!") ;
        }
        System.out.println("3. 除法计算结束。");
    }
}

//运行结果:
1. 除法计算开始。
java.lang.ArithmeticException: / by zero
	at com.interview.javabasic.throwable.TestDemo.main(TestDemo.java:8)
### 不管是否出现异常我都执行!
3. 除法计算结束。

java的异常继承关系:

//异常继承关系
java.lang.Object
  |- java.lang.Throwable
         |- java.lang.Error
         |- java.lang.Exception

可以发现,所以异常都是 Throwable 的子类,Throwable 只有两个子类:
(1)Exception:指的时程序运行中产生的异常,用户可以通过程序处理;
(2)Error:指的时jvm错误,那么用户不能够进行处理;

// Throwable 类,
public class Throwable extends Object implements Serializable

RuntimeException 类;

//继承关系:
java.lang.Object
   java.lang.Throwable
      java.lang.Exception
         java.lang.RuntimeException

//定义:
public class RuntimeException extends Exception

//常见的子类:
ArithmeticException,ClassCastException,NullPointerException,等:


//使用 RuntimeException 定义的异常表示这些异常可能时一些简单的问题,可以不需要强制性进行异常处理。

自定义异常类

自定义的异常类一般继承:Exception 或者 RuntimeExcetion 这两个类;代码示例:

//自定义异常
class CustomException extends Exception {			// 此异常类要强制处理
    public CustomException(String msg) {
        super(msg);					 // 调用父类构造
    }
}

public class AddExceptionDemo {
    public void throwAddException() throws CustomException{
        throw new CustomException("数值传递的过大!");
    }
    public static void main(String args[]) {
        AddExceptionDemo addExceptionDemo = new AddExceptionDemo();
        try {
            addExceptionDemo.throwAddException();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


//运行的结果:
com.interview.javabasic.throwable.AddException: 数值传递的过大!
	at com.interview.javabasic.throwable.AddExceptionDemo.throwAddException(AddExceptionDemo.java:11)
	at com.interview.javabasic.throwable.AddExceptionDemo.main(AddExceptionDemo.java:16)

//异常处理的流程:
public class ExceptionHandleMechanism {
    public static int doWork (){
        try {
            int i = 10/0;
            System.out.println("i="+1);
        } catch (ArithmeticException e){
            System.out.println("ArithmeticException" + e);
            System.out.println("xxxxxxxxxx");
            return returnTo0();  
        } catch (Exception e){
            System.out.println("Exception" + e);
            return returnTo1();
        } finally {
            System.out.println("finally"); // 在返回之前执行。
        //    return returnTo2();
        }
        return returnTo2();
    }
	
	public static int returnTo0(){
		System.out.println("to0");
		return 0;
	}
	
	public static int returnTo1(){
		System.out.println("to1");
		return 1;
	}
	
	public static int returnTo2(){
		System.out.println("to2");
		return 2;
	}
 
    public static void main(String[] args) {
        System.out.println("执行后的值为:" + doWork());
        System.out.println("Mission Complete!");
    }
}

//运行的结果:
ArithmeticExceptionjava.lang.ArithmeticException: / by zero
xxxxxxxxxx
to0
finally
执行后的值为:0
Mission Complete!

try...catch 的性能

// 性能比较
public class ExceptionPerformance {
    public static void testException(String[] array){
        try{
            System.out.println(array[0]);
        } catch (NullPointerException e){
            System.out.println("array cannot be null");
        }
    }
    public static void testIf(String[] array){
        if(array != null){
            System.out.println(array[0]);
        } else {
            System.out.println("array cannot be null");
        }
    }

    public static void main(String[] args) {
        long start = System.nanoTime();
        testException(null); // cost:715200
        //testIf(null);  // cost:590700
        System.out.println("cost:"+(System.nanoTime()-start));
    }
}

//运行结果
可以看出,if 的性能要比 try...catch 的性能要好一些。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值