2020.02.12面试题10道

1.error和exception有什么区别?

error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception表示一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况,可以使用异常处理机制处理。

2.Java中的异常处理机制的简单原理和应用。

当Java程序违反了Java的语法规则时,Java虚拟机就会将发生的错误表示为一个异常。违法语法规则包括两种情况、一种是Java类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundException;访问null对象时会引发NullPointException。另外一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时使用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类。
异常是指Java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含异常的信息。
Javad对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error表示应用程序本身无法克服和恢复的一种严重问题。Exception表示程序还能克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,例如,数组下标越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointException),类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够。
Java为系统异常和普通异常提供了不同的解决方法,编译器强制普通异常必须try…catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try…catch处理或用throws声明,所以系统异常也称为unchecked异常。

3.throws和throw的区别(重点)

声明异常–throws:java语言中通过关键字throws声明某个方法可能抛出的各种异常。throws可以同时声明多个异常,之间用逗号隔开。
抛出异常–throw:java语言中,可以通过使用throw关键字来自行抛出异常。
同时它的区别还包括一下三个方面:
1)作用不同:throw用于程序员自行产生并抛出异常,throws用于声明在该方法内抛出的异常。
2)使用的位置不同:throw位于方法体内部,可以作为单独语句使用,throws必须跟在方法参数列表和面,不能单独使用。
3)内容不同:throw抛出一个异常对象,而且只能是一个throws后面跟异常类,而且可以跟多个异常类。

4.异常分为几类。

1)Throwable类:所有异常类型都是Throwable类的子类,它派生两个子类:Error和Exception。
2)Error类:表示仅靠程序本身无法恢复的严重错误。
3)Exception类:由Java应用程序抛出和处理的非严重错误。
4)运行时异常:包括RuntimeException及其所有子类。不需要程序必须对他们做出处理。
5)Checked异常(非运行异常):除了运行时异常外的其他由Exception继承来的异常类。

5.Collection和Collections的区别(重点)

Collection是集合类的上级接口,继承它的接口主要有Set和List。Collections是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

6.数组和集合的主要区别(重点)

1)数组可以存储基本数据类型和对象,而集合中只能存储对象(可以以包装类形式存储基本数据类型)。
2)数组的长度是固定的,集合长度是可以动态改变的。
3)定义数组是必须指定数组元素类型,集合默认其中所有元素都是Object。
4)无法直接获取数组实际存储的元素个数,length用来获取数组的长度,但是集合可以通过size()直接获取集合实际存储的元素个数。
5)集合有多种实现方式和不同的适用场合,而不像数组仅采用分配连续的空间方式
6)集合以接口和类的形式存在。具有封装,继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂的操作,大大提高软件的开发效率。

7.列出你知道的容器类(就是指集合类),简单说明其功能。

Java容器类Collection、List、ArrayList、Vector及Map、HashTable、HashMap。
Collection是List、Set两个接口的父接口。
List在Collection上增加了“有序”的特性,而Set增加了“唯一”的特性。
ArrayList是有序不唯一的;
Vector(向量类)可以实现类似动态数组的功能,但是又区别于C语言中的概念,因为Java中是不 存在“指针”这一概念,相对于 Arraylist 而言,Vector 线程是安全的,也就是说是支持线程同步 的,创建了一个 Vector 类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型 也不需预先选定向量的容量,并可方便的进行查找;
Map 不能包括两个相同的键,它是无序的,但是 Map 的值是可以重复的;
Hashtable 是 Dictionary 类的子类,缺省是线程同步的,不允许关键字或值为 null;
HashMap 是 Map 接口的实现类,缺省情况下是非同步的.

8.List,Set,Map是否继承自Collection接口?(重点)

List、Set是,Map不是。

9.ArrayList、LinkedList结合的区别(重点)

ArrayList集合:对数组进行了封装,实现了长度可变的数组,和数组采用相同存储方式,在内存中分配连续的空间。它的优点在遍历元素和随机访问元素的效率比较高。
LinkedList集合:采用链式存储方式,优点在插入、删除元素是效率比较高。

10.Set、List、Map它们的区别(重点)

Set接口继承Collection接口。存储一组唯一(不允许重复),无序的对象
List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象。
Map接口存储一组成对的键-值对象,提供key(键)到value(值)的映射。Map中的key不要求有序,不允许重复。Value同样不要求有序,但允许重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值