Java异常(二)

1.面试题:

final,finalize,finally的区别?

         A:final:最终的,不可改变的

Final修饰类,该类不能被继承

Final修饰成员变量,该变量是常量

Final修饰成员方法,该方法不能被重写

         B:finalize:finalize与gc有关系,运行垃圾回收器,对不用的垃圾进行回收,底层依赖于重写了Object中的

Finalize()方法

         C:finally:释放资源IO频繁使用,该语句中的代码一定会执行除非在执行之前jvm退出了

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FinallyDemo2 {
	public static void main(String[] args) {
		//String--->Date
		String s="2017-08-18";
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date d=null;
		try {
			 d= sdf.parse(s);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.exit(0);
		}
		finally{
			System.out.println("你错了错了");
		}
	}

}

try…..catch…..finally

try…..catch

try…..catch……catch

  2.  问题:如果catch里面有return语句,那么finally代码中的语句还会执行吗?是在return前还是return

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

代码:

public class FinallyDemo {
	public static void main(String[] args) {
		System.out.println(num());
	}
		
		//写一个功能代码块
		public static int num(){//静态,可以直接用类名调用方法
			int x=4;
			try {
				System.out.println(x/0);
				x=5;
			} catch (ArithmeticException e) {//捕获异常,数学运算异常,执行catch里面的语句
//				e.printStackTrace();
				x=6;
				return x;
				//catch里面的代码有return语句,finally语句中的代码也一定会执行,当代码执行到第一个return ,
				//由于x=6,return 6,代码继续往下执行到finally,x=7,但是try...catch...finally再次return
				//里面记录的是第一次return的值,返回6
			}
			finally{
				x=7;//这里的代码也一定会执行
			}
			return x;
		
		}
}


3.自定义异常类

1)异常的子实现类
/* 
 * 该类继承自Exception和RuntimeException
 */
public class MyException extends Exception {
	//无参构造
	public MyException(){
		
	}
	//有参构造
	public MyException(String message){
		super(message);
	}
}
2)
public class Teacher {
	public void show(int score) throws MyException{
		if(score>100||score<0){
			System.out.println("该分数必须实在1到100之间");
			throw new MyException("异常啊异常");
			
		}else{
			System.out.println("您输入的正确");
		}
	}

}
3)测试类,捕获异常
public class Student {
	public static void main(String[] args)  {
		//创建键盘录入对象
		Scanner sc=new Scanner(System.in);
		//接收并录入数据
		System.out.println("请输入您的成绩");
		int score=sc.nextInt();
//			if(score>100||score<0){
//				System.out.println("该分数必须实在1到100之间");
//				throw new MyException("异常啊异常");
//				
//			}else{
//				System.out.println("您输入的正确");
//			}
		Teacher t=new Teacher();
		try{
		   t.show(score);
		}catch (MyException e) {
			e.printStackTrace();
		}
			
		}
		}	



4.异常类中的注意事项

1)如果继承关系中出现异常,父类的方法要被子类进行重写的时候,如果父类抛出了异常,那么子类在重写该方法的时候也要抛出异常,要么和父类中抛出的异常一致,要么是该异常的子类

2)如果父类中没有抛出异常,那么子类重写该方法也不能抛异常,只能try…catch捕获异常

代码:

public class ExceptionDemo {
   public static void main(String[] args) {
		class Fu{
			public void show() throws Exception{
				
			}
			public void method(){
				
			}
		}
		class Zi extends Fu{
			public void show() throws ArithmeticException{
				
			}
			public void method(){
				//String--->Date
				String s="2017-08-17";
				SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				try{
					Date d=sdf.parse(s);
				}
					 catch (ParseException e) {
							e.printStackTrace();
						}
		
				}
			}
   }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值