异常

一.概述

1、生活中的异常
     生活中不正常的事件。
2、程序中的异常
    程序在运行时出现的错误!
    程序中异常以类的方式表示,当程序中出现异常时,就是产生了某种异常类的对象。
    而异常对象必须进行捕获并处理,如果不捕获,则异常对象由JVM处理。
    而JVM处理异常的方式为:把异常信息输出在控制台,并终止程序。

095909_gY8X_3785125.png

二.异常继承结构

1.异常结构继承结构图

095948_jQ8T_3785125.png
2、异常的分类
1) 运行时异常 :RuntimeException及子类。不强制处理
2)编译异常  :Exception类及非RuntimeException的子类。必须处理,如果不处理则引发编译错误

三.异常处理的第一种方法throws

1、throws关键词的使用:在方法上声明异常,此方法没有处理异常。由调用者处理
语法:
访问修饰符   返回值类型  方法名(参数列表)throws 异常类型,异常类型{方法体}

public class Test{
   public static void main(String[] args) throws FileNotFoundException{
      getIO();
      System.out.println("程序结束");
   }
   public static void getIO() throws FileNotFoundException{
      FileInputStream in = new FileInputStream("d:/a.txt");
   }
}

四.处理异常的第二种方法try catch

1、try catch语法结构

try{

可以会出现异常的代码。

}catch(异常类型  变量名){  //捕获对应类型的异常对象,保证后续代码继续执行。

}
2、try catch的执行顺序

2.1:try中的代码 没有产生异常,则catch不执行,而执行try-catch后的代码100850_8u4o_3785125.png

2. 2 :try中的某行代码产生了异常,则try中的后续代码不再执行,而到对应异常类型的catch执行,执行完catch后,执行try-catch后的代码100850_jLkt_3785125.png

3、try块中带有多个catch时的注意事项
如果多个catch之间的异常类型之间有继承关系,则先子后父。

异常对象:取得异常描述信息:getMessage();取得异常的堆栈信息:printStackTrace();

五.异常的finally语块

1、finally语句块的含义

在try-catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行


2、try,catch,finally三个关键词的执行顺序
101054_mzCC_3785125.png
3、何种情况下不执行finally块

异常处理代码中执行System.exit(1)退出Java虚拟机

六.final,finalize,finally区别

final:java中的关键字,修饰符。
    1)、可以修饰类
    如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。    
    2)、 可以修饰方法
        被声明final的方法,不能被子类重写。
   3)、修饰变量,
        如果将变量或者方法声明为final,可以保证它们在使用中不被改变.  

 2 finally:java的一种异常处理机制。。finally 结构使代码总会执行,而不管有无异常发生。

 3  finalize:Java中的一个方法名。

    Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。
     这个方法是由垃圾收集器在确定这个对象没有被引用时 对这个对象调用的。
     它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。
     finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

七.手动抛异常throws

1、throw 异常对象
当程序中的某个代码产生异常:生成一个异常的对象,并抛出
异常都在代码里产生的,throw new  异常类型();
使用throw关键词抛出异常对象。
1) 可以抛出运行时异常: 可以不处理
2) 抛出编译异常: 必须处理。
2 当方法中抛出异常后要对此异常进行处理
1)、 throws在方法上添加异常的声明。
2) 、try-catch进行异常的捕获。

八.自定义异常(代码开发中常用)

1、自定义异常的语法
访问修饰符   class 类名  extends Exception或其子类{}

/*
*自定义异常类继承自某个异常类
*可以继承运行时异常:异常类可以不处理
*可以继承编译异常:异常类必须处理
*产生自定义异常类型:需要用throw
*/
public class AgeException extends Exception{
   public AgeException(){
      super();
   }
   public AgeException(String message){
      super(message);
   }
}

2 、产生自定义异常一定与throw关键词一起使用

public class Student(){
   private int age;
   public int getAge(){
      return age; 
   }
   public void setAge(int age) throws AgeException{
      if(age >= 18&& age<=50){
	     this.age = age;
	  }else{
	     //产生一个异常对象,手动产生异常对象,并抛出
		 /*
		 *抛出编译异常,则必须捕获或声明
		 */
	     throw new AgeException("年龄必须为18~50之间");
	  }
   }
}

 

转载于:https://my.oschina.net/u/3785125/blog/1632078

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值