Java异常(二)

Java异常处理更新。。。

1.throw

throw:表示也是抛出异常,抛出的一个异常对象 (throw new 异常类名() :匿名对象的方式)
 
 面试题:
         throws和throw的区别?

         throws:也是表示抛出异常,它后面跟的异常类名,并且可以多个异常类名中间逗号开
                 举例:
                     public void show() throws IoException,ClassNotFoundException{...}
                 在方法上抛出,由调用者处理
                 它表示抛出异常的可能性
         throw:抛出的一个异常对象
                 在语句体中抛出的,由语句体进行处理
                 它表示抛出异常的肯定性

2.try...catch...finally
         finally语句体是一定会执行的,除非是Jvm退出了
 
 面试题:
         如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?

         finally中代码是一定会执行的,是在return前

public static void main(String[] args) {
		System.out.println(getInt());
	}

	private static int getInt() {
		int a;
		try {
			a = 10;
			System.out.println(a / 0);
			a = 20;
		} catch (Exception e) {
			a = 30;
			return a;
			/**
			 * try的代码出现问题了,执行catch中的语句,30赋值a, return 30(已经形成了一个回路径)finally代码一定会执行(除非Jvm) a =
			 * 40 ,在fianlly外面 有return a: a记录回路径的那个a,返回30
			 */
		} finally {
			// 除非jvm退出了
			a = 40;

		}
		return a;// 30
	}

上述代码的输出结果为30

分析:try的代码出现问题了,执行catch中的语句,30赋值a, return 30(已经形成了一个回路径)

          finally代码一定会执行(除非Jvm退出) a = 40 ,在fianlly外面,有return a: a记录回路径的那个a,返回30!

3.如何自定义一个异常类呢? 

自定义异常类,两种方式
        1)自定义一个类,这个继承自Exception
        2)继承RuntimeException 

public static void main(String[] args) throws MyException {
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//接收数据
		System.out.println("请输入学生成绩:");
		int score = sc.nextInt() ;
		
		Teacher t = new Teacher() ;
		t.check(score);
	}

public class Teacher {
	
	//校验学生成绩的功能
	public void check(int score) throws MyException {
		if(score <0 || score>100) {
			throw new MyException("该学生成绩不符合...") ;
			//有时候需要处理的逻辑代码
		}else {
			System.out.println("该学生成绩没有问题");
		}
			
	}
}

public class MyException extends Exception {

	public MyException() {
		super();
	}

	public MyException(String message) {
		super(message) ;
	}
	
}

 4.异常中的注意事项
        子类继承父类的时候的注意事项 
            1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类
            2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch

class Fu{
	public void show() throws Exception {
		
	}
	public void method() {
		
	}
}

class Zi extends Fu{
	
	@Override
	public void show() throws ArithmeticException{
		
	}
	
	@Override
	public void method(){
		try {
			String str = "2018-5-13" ;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
			Date d =sdf.parse(str) ;
			System.out.println(d);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值