Java经典面试题七:异常

问题一:throw和throws的区别?

  • throws是声明一个方法可能抛出的所有异常信息,并将异常向上传递,谁调用该方法异常就交给谁处理。
  • throw是在方法内抛出某种异常,抛出一个具体的异常类型。

问题二:final、finally、finalize有什么区别?

  • final修饰类、变量、方法,修饰类该类不能被继承,修饰方法该方法不能被重写,修饰变量该变量不能被重写赋值;
  • finally一般在try-catch代码块中,一般在处理异常时,一定要执行的代码会放在finally中,可以放一些关闭资源;
  • finalize是方法,属于Object类,一般由垃圾回收器GC调用。我们调用System的gc()方法时,垃圾回收器会调用finalize()回收垃圾。

问题三:try-catch-finally中哪个部分能省略?

catch或finally

try只适合处理运行时异常,try+catch适合处理运行时异常和普通异常。如果只try不catch,编译不通过。编译器规定普通异常捕获必须用catch处理。但是运行时的异常,编译器没有规定,所以可以省略catch,加上也行。

对一段代码加上try,如果是普通异常,就要有catch进行捕获;如果是运行时异常,可以捕获然后丢弃,用finally进行扫尾。

也就是说,要么try-catch,要么try-finally

问题四:try-catch-finally中,如果catch中return了,finally还会执行吗?

我们看一段代码,再给结论
代码一:

public class test4 {

	public static void main(String[] args) {
		System.out.println(getString());
	}
	
	public static String getString() {
		String str="初始";
		try {
			System.out.println(1/0);
			str="try里";
		}catch (Exception e) {
			str="catch里";
			return str;
		} finally {
			str="finally里";
			//return str;
		}
		return str;
	}
}

结果:catch里
分析:在执行到catch的return的时候,str等于catch里,此时就相当于return了catch里,而又发现finally语句中的石头人,但是已经return了,虽然finally一定执行,但是在return后,所以返回值不会改

代码二:

public class test4 {

	public static void main(String[] args) {
		System.out.println(getString());
	}
	
	public static String getString() {
		String str="初始";
		try {
			System.out.println(1/0);
			str="try里";
		}catch (Exception e) {
			str="catch里";
			return str;
		} finally {
			str="finally里";
			return str;
		}
		//return str;
	}
}

结果:finally里
分析:当执行到catch里return时,就会return了catch里,但是finally会先执行,所以会在finally执行完之后再回到catch,但是只能有一个return,所以结果就是finally里

问题五:常见的异常类型?

  • NullPointerException:空指针
  • SQLException:数据库访问错误
  • IndexOutOfBoundsException:下标越界
  • NumberFormatException:数字转换异常,将字符串转换成数值类型失败
  • FileNotFoundException:找不到指定文件
  • IOException:io流异常
  • ClassCastException:类型转换异常
  • ArrayStoreException:数组存储异常,存储错误的对象类型
  • IllegalArgumentException:不合法的参数
  • ArithmeticException:算数异常,比如除以0
  • NegativeArraySizeException:负的数组大小
  • NoSuchMethodException:没有找到某一方法
  • SecurityException:由安全管理器抛出的异常,指示存在安全侵犯。
  • UnsupportedOperationException:不支持操作的异常
  • RuntimeException:运行时异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值