小白的JAVA学习笔记(九)---异常处理(try/catch/finally,ducking)

 在编写程序的过程中不可能是一帆风顺的,我们可能会调用一些有风险的方法,也就是这些方法可能会发生异常。当我们知道调用某个方法有一定的可能性发生异常时,我们可以提前做好准备来处理问题程序。那我们怎么知道哪些方法会抛出异常呢?通过看方法声明,声明中有throws语句即会抛出异常。

一、异常处理的两种方式

1、try-catch语句块

package package_1;

import java.util.Scanner;

class Dog{
	void take() throws Exception{
		int size;
		Scanner s=new Scanner(System.in);
		System.out.println("input size:");
		size=s.nextInt();
		if(size>3) {
			throw new Exception();
		}
	}
}
public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Dog d=new Dog();
        try {
        	d.take();
        }catch(Exception ex) {
        	System.out.println("too big");
        	ex.printStackTrace();
        }
	}

}

 下面根据上面的代码进行讲解:

  • JAVA中输出为包含在java.lang包中的System.out.println(x)函数,输入为包含在java.util包中的Scanner类中的函数,调用时记得import
  • 异常是Exception类的对象
  • 在可能出现异常的方法名()后加上throws语句,在方法内写明抛出异常的条件,创建并抛出异常,异常也是对象,即创建并抛出Exception类的对象!
  • try块中存放有风险的程序块,catch块中存放异常状况的处理程序
  • catch的参数是Exception类型的引用变量
  • 方法可以抓住其他方法所抛出的异常,异常总是被丢回给调用方
  • 如果有抛出异常,必须使用throw来声明

 

2、duck

package package_1;

import java.util.Scanner;

class Dog{
	void take() throws Exception{
		int size;
		Scanner s=new Scanner(System.in);
		System.out.println("input size:");
		size=s.nextInt();
		if(size>3) {
			throw new Exception();
		}
	}
}
class Cat{
	void take1() throws Exception{
		Dog d=new Dog();
		d.take();
	}
}
public class A {

	public static void main(String[] args) throws Exception  {
		// TODO Auto-generated method stub
        Cat c=new Cat();
        c.take1();

}
}

 

下面根据上面的代码进行讲解:

  • duck还是需要用throws语句声明异常,但是方法块里不再需要创建并抛出对象
  • duck在测试用的main()后也要声明异常

 

 

二、多重异常、

1、一个方法可以抛出多个异常,但该方法的声明也必须含有全部可能的检查异常。

2、异常作为对象,也存在多态,如果有两个或两个以上异常具有相同父类,可以声明父类即可

3、可以以异常的父类来声明会抛出的对象,也可以以所抛出异常的父类来catch异常

4、可以根据异常种类的不同,在catch块中补充不同代码

5、catch块不像重载的方法会自动选择最合适,最符合的项目,使用catch时,JAVA虚拟机只会从头开始往下找到第一个符合范围的异常处理块,所以异常处理范围小的catch语句块应放在异常处理范围大的catch语句块上面。如果第一个catch就是catch(Exception ex),其后的所有catch都不会被用到!!

 

三、try/catch/finally 语句处理

1、处理规则

  • catch/finally不能没有try
  • try不能没有catch/finally
  • try和catch之间不能有程序
  • 只带有finally的try必须声明异常

2、finally块是无论如何都会执行的语句,用来存放不管是否有异常都得执行的语句

3、如果try语句成功了,流程会跳过catch块,直接移动到finally块,当finally块完成,再执行其余部分

4、如果try语句失败了,try语句块中失败的语句下所有的语句不再执行,抛出异常,马上移动到catch语句块,catch语句块完成后,执行finally语句块,finally完成后,执行其余部分

5、如果try或catch语句块中有return语句,finally语句块仍然会执行!!流程会先跳到finally语句块执行完后再回到return指令

                                                                                                                                    BY  ZJQ

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值