java面试每日十题(五)

41、什么时候用断言(assert)?

答:断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。一般来说,断言用于保证程序最基本、关键的正确性。断言检查通常在开发和测试时开启。为了保证程序的执行效率,在软件发布后断言检查通常是关闭的。断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true;如果表达式的值为false,那么系统会报告一个AssertionError。 用assert前先开启断言检查,需要用-enableassertions或-ea来开启。

assert关键字语法很简单,有两种用法:
1、assert <boolean表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出AssertionError,并终止执行。                                           


2、assert <boolean表达式> : <错误信息表达式>
如果<boolean表达式>为true,则程序继续执行。
如果为false,则程序抛出java.lang.AssertionError,并输入<错误信息表达式>。

 


42、Error和Exception有什么区别?

答:error和exception都是throwable类的子类,error一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足和内存溢出等等。这类错误仅靠程序本身无法恢复和预防,遇到这样的错误,建议终止程序;exception表示程序可以处理的异常,可以捕获且可能恢复,遇到这类异常,应该尽可能处理异常,使程序恢复运行,不应该随意终止异常。Exception又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception),运行时异常编译可以通过,但是一运行就终止了。而受检查异常编译不会通过,要用try...catch语句或者throws进行异常的捕获才可以。

 


43、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行。

运行结果

 


44、Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?

答:throw是获取异常,手动地抛出异常对象,后面跟着一个异常;throws是用来声明方法后面抛出的各种异常但是不处理,后面跟着一个或多个异常类;try用来指定一块预防所有异常的程序,catch语句跟在try后面,用来捕获try所指定的程序发生的异常,finally用来确保一段无论是否有异常总会执行的代码块。

 


45、运行时异常与受检异常有何异同?

答:运行时异常(Runtime Exception)编译可以通过,但是一运行就终止了;而受检查异常(Checked Exception)运行时不会通过,要用try...catch语句或者throws来进行异常的捕获。

 


46、列出一些你常见的运行时异常?

答:java.lang.NullPointerException   空指针异常

Java.lang.ClassNotFoundException   找不到或无法加载主类异常

java.lang.ArrayIndexOutOfBoundsException   数组下标越界异常

Java.io.IOException   输入输出异常

Java.sql.SQLException   sql语句执行异常

 


47、阐述final、finally、finalize的区别。

答:final关键字可以修饰类,方法,变量和参数。

修饰变量:表示变量只能进行一次赋值并且赋值以后不可被修改(常量);

修饰参数:表示在方法中不能改变参数的值;

修饰类:final修饰的类不可被继承;

修饰方法:表示该方法不能被重写。

finally是用在异常捕获的try...catch...finally语句中,无论前面有没有异常捕获,finally里面的代码总会执行。

Finalize()方法是在Object类中定义的,即所以的类都有这个方法,这个方法是在GC启动回收对象的时候调用的,子类重写这个方法以整理系统资源或执行其他清理工作 。


48、类ExampleA继承Exception,类ExampleB继承ExampleA。


有如下代码片断:(Core Java)
try{
throw new ExampleB(“b”);
}catch(ExampleA e){
System.out.printfln(“ExampleA”);
}catch(Exception e){
System.out.printfln(“Exception”);
}
请问执行此段代码的输出是什么?

答:ExampleA.根据里氏代换原则(能使用父类型的地方一定能使用子类型),抓取ExampleA类型异常的catch块能够抓住try块中抛出的ExampleB类型的异常。

 

 

49、List、Set、Map是否继承自Collection接口?

答:List、Set是,Map不是。List按照对象进入的顺序保存对象,元素可以重复,不做排序或编辑工作;Set元素无放入顺序但是位置由hashcode固定,元素不可重复;Map按键值对key-value存储,无放入顺序,一个Map中不能包含相同的key,一个key对应一个value。

 


50、阐述ArrayList、Vector、LinkedList的存储性能和特性。

答:都是List接口的实现类。LinkedList底层基于链表实现,链表内存是散乱的,插入速度快但是查找慢;ArrayList和Vector底层的实现都是一样的,使用数组来存储数据,查找快但是插入数据慢,Vector中的方法由于有synchronized修饰,所以是线程安全的,但是效率低性能较差;而ArrayList和LinkedList都是非线程安全的,效率高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值