异常

一、异常的体系结构

java.lang.Throwable
1.Error: 错误 程序不进行处理
2.Exception: 异常 在程序开发时,要对这些异常进行处理
①.编译时异常 :在编译期间出现的异常
②.运行时异常 :在运行期间出现的异常
当执行一个程序时,如果出现异常,那么异常之后的代码就不会执行。

二、如何处理Exception异常

处理异常的方式:抓抛模型
1.抛:当执行程序时,一旦出现异常,就会生成一个对应异常类型的对,并将对象抛出

①.抛的类型:自动抛和手动抛
②.此异常的对象将来是交给方法的调用者

2.抓:抓住程序中跑出来的异常对象。

异常处理的方式:

 1.try-catch-finally
  try{
  	// 可能会发生异常的代码
  }catch(Exception e1){
  	// 处理方式一
  }catch(Exceptio e2){
  	// 处理方式二
  }finally{
  	// 一定要执行的代码
  }

①.try代码块里面的声明的变量,是局部变量,作用域是在代码块中

②.finally是可选的,如果加了finally,不论是否出现异常,都会执行finally中的代码

③.catch语句是用来处理异常
getMessage(); printStrackTrace():打印异常信息(程序出错的位置信息及原因)

④.catch代码块可以有多个,try中抛出的异常对象是从上往下去匹配catch中的异常类型,一旦满足就执行catch中的代码。执行完毕就跳出所有的catch。

⑤.如果catch中多个异常类型是并列关系,不需要考虑顺序问题。
如果catch中多个异常类型有继承关系,子类需要在父类异常对象的上面,否则会出现编译错误

⑥.try-catch是可以嵌套多层。

提示:

1.对于运行时异常,可以不用显示的进行异常处理。
2.对于编译时异常,必须要显示的进行异常处理。

// 常见的异常
// 1.数组下表越界的异常ArrayIndexOutOfBoundsException
  @Test
    public void test2() {

	try {
	    int[] numbers = new int[5];
	    System.out.println(numbers[5]);

	} catch (ArrayIndexOutOfBoundsException e) {
	    e.printStackTrace();
	}
    }


    // 2.算术异常 ArithmeticException
    @Test
    public void test3() {
	try {
	    int i = 10;
	    System.out.println(i / 0);
	} catch (ArithmeticException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
    }


    // 3.类型转换异常ClassCastExceptio
    @Test
    public void test4() {
	try {
	    Object date = new Date();
	    String string = (String) date;
	} catch (ClassCastException e) {
	    System.out.println(e.getMessage());
	} catch (NullPointerException e) {
	    // TODO: handle exception
	}

    }


    // 4.空指针异常 NullPointerException
    @Test
    public void test5(){
	try{
	    String[] names=null;
	    System.out.println(names[0]);  
	}catch(NullPointerException e){
	    e.printStackTrace();
	}
	
    }


    // 5.编译时异常
    @Test
    public void test6(){
	 FileInputStream fs = null;
	try {
	   fs = new FileInputStream(new File("hello.txt"));
	    
	} catch (FileNotFoundException e) {
	  System.out.println(e.getMessage());
	} finally {
	    try {
		fs.close();
	    } catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	    }	    
	}
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值