黑马程序员------异常总结

------- android培训java培训、期待与您交流! ----------

异常处理的基本语法:
   try{
   //可能会出现异常的代码
   }catch(异常类型名称   变量名){
   //可以将catch中的代码称为:异常处理程序
   //如果try中的代码发生异常,那么虚拟机会执行catch中的代码
   }
  执行顺序:
   1.执行try中的代码;
   2.如果try中的代码没有异常,不会执行catch中的代码,会继续执行"try...catch"语句的后续代码;
   3.如果try中的代码出现了异常,会立即执行catch中的代码。如果catch中的代码执行完毕,会执行"try...catch"语句的后续代码;

public class Demo {
	public static void main(String[] args) {
		int a = 10;
		int b = 0;
		try{
			System.out.println("a / b : " + (a / b));
			System.out.println("try中的后续代码......");
		}catch(ArithmeticException e){
			System.out.println("不好,发生异常了,这里是catch中的代码,会被执行!");
		}
		System.out.println("程序结束");
	}
}
异常分类:

Throwable(类):
   |--Error:表示错误。我们不用处理;
   |--Exception:表示异常
   |--RuntimeException:运行时异常:编译时可以不处理,运行时会抛出的异常;
   |--除RuntimeException类型的其它异常:非运行时异常:编译期就要处理的异常,否则编译不通过。尤其是一个方法内,如果产生了一个"非运行时异常",调用方 必须去处理这个异常,否则不能通过编译。

finally关键字的特点及作用
 
  1.finally关键字,用于"异常处理"的语句中。
  2.它一般用于try后或try...catch后;
  3.特点:在finally语句块中的代码,无论是否出现异常,都会被执行;
   一般操作一个文件包括三个流程:打开文件、读写文件、关闭输入输出流;

try{
  			System.out.println(”打开文件");
  			System.out.println(”读取文件");//出现异常
  			
  			return 一个值;
  		}catch{
  			System.out.println("异常处理");
  		}finally{
  			System.out.println(”关闭文件");//这个操作不论是否出现异常都会被执行
  		}
  4.无论是否发生异常,finally中的语句肯定会被执行:
   执行顺序:
    无异常:try --> finally
    有异常:try --> catch  --> finally


自定义异常:
  
  1.我们知道一个方法只能返回一个值。
  2.假如一个方法接收一个"年龄"值,方法内会进行运行。
    形参:int类型
    可能接收的值:所有int范围内的值;
    如果接收到一个负数,我们的方法怎么做,可以告知调用者?
  3.抛出一个"自定义异常";
  4.怎样自定义异常:
   1).定义一个类,继承自Exception或它的某个子类;
   2).提供一个默认的构造方法,或者一个带一个String类型的构造方法,以指定"异常信息";
   3).使用时,在某个方法内直接throw 一个自定义异常对象就可以。
  注意:如果一个类继承自Exception,按"非运行时异常"规则处理;
  如果我们想自定义一个"运行时异常",继承自RuntimeException或它的子类即可。

lass AgeException extends Exception {
	//提供构造方法,接收异常信息
	public AgeException(String info){
		super(info);
	}
}

class Student{
	private int age;
	
	public void setAge(int age) throws AgeException{
		if(age < 15 || age > 50){
			//不接收这样的年龄,怎样告知调用者
			//抛出异常;
			//抛出什么类型的异常?类库中的异常类肯定是不行了,因为没有代表这种异常的类;
			//就需要我们自定义一个异常类:
			throw new AgeException("年龄必须在15到50之间!");
		}
		this.age = age;
	}
}
public class Demo {
	public static void main(String[] args) {
		Student stu = new Student();
		try {
			stu.setAge(-200);
		} catch (AgeException e) {
			System.out.println("调用setAge()方法出现异常,异常信息:" + e.getMessage());
		}
	}
	
}

在继承关系时异常的声明:

一.父类方法没有声明异常:
   子类:1.可以不声明抛出异常;
   2.可以抛出"运行时异常";
   3.不能抛出"非运行时异常";
二.父类方法声明抛出"运行时异常":
   子类:1.可以不声明抛出异常;
   2.可以抛出任何的"运行时异常";
   3.不能抛出"非运行时异常"
三.父类方法声明抛出"非运行时异常":
   子类:1.可以不声明抛出异常;
   2.可以抛出任何的"运行时异常";
   3.可以抛出跟父类相同的"非运行时异常",但不能抛出其它的"非运行时异常"


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值