您的位置:首页 > 职场人生

java面试基础知识(二)

2017-08-25 00:05 302 查看
1.finally 块中的代码:finally块中的代码一定会得到执行。不管是正常的 try 执行还是 发生异常执行 catch,最后都会执行 finally 块内的语句。finally 块的语句一般用于关闭一些链接,比如 I/O 、数据库链接 、HTTP 链接等。

如果 try 块内有return 语句,而 finally 块内也有 return 语句,那么 finally 块内的 return 语句将 覆盖 try 内的return 语句。当然有一种情况例外,那就是在
try 语句内调用 System.exit( 0 ) 强制退出程序,此时 finally 语句将不会执行。

2.异常处理:java语言把异常当做对象来处理,并定义一个基类 :java.lang.Throwable .

异常主要分为两大类 : Error(错误) 和 Exception (异常)两大类,都继承了 Throwable 。

Error表示程序在运行时出现非常严重的错误,并且该错误是不可恢复的术语JVM层次的严重错误,因此会导致程序终止。编译器不会检查Error是否会被处理,运行时异常多是逻辑错误所致。

Exception 表示可恢复的异常,是编译器可以捕捉到的,主要包括检查异常 和 运行时异常。

检查异常一般是可能发生错误的代码块,比如链接到数据库,链接一个不可靠的 I / O 系统,这些都可能出错,所以把这些代码放到 try 语句中并用 catch 语句进行异常捕捉,一般编译器也会强制进行异常捕捉处理。

运行时异常不同于检查异常,编译器也不会强制如果不对这些异常进行捕捉处理。但是如果不对这些异常进行处理,JVM将对这些异常进行处理,最终可能导致线程终止或主程序终止。

对异常进行捕捉时一般先捕捉子类,再捕获基类异常信息。

3.编译型和解释型:java语言是解释型语言,虽然java再运行时有一个编译的过程,但它是编译成一种中间码,在JVM上运行,由JVM转换为机器码运行。

C / C++ 等都是编译型,执行编译成一个可执行的.exe 文件,以后可以直接运行而不需要进行编译。

 4.java中的内存泄漏问题:内存泄漏是指一个不再被使用的对象或变量还在内存中占有存储空间。在C/C++ 中,开发人员可以自己手动分配资源和释放资源,如果忘记释放那么就会发生内存泄漏的情况。java引入垃圾回收机制,对不用的对象进行回收,释放内存(关于来及回收机制后面再详谈)。

内存泄漏的两种主要情况:一是堆中申请的空间没有释放 ,二是没有用到的对象仍然占有内存。

引起内存泄漏的原因主要有:

1) 静态集合类,因为他们的生命周期跟程序一致,从开始到程序结束才释放资源。

2)数据库链接、网络链接 、I / O 链接等。如果没有显示的进行关闭,会使大量对象无法回收造成内存泄漏。

3)监听器(这个我也不知道),对某个对象的监听器,对象删除时应该关闭监听器,否则监听器将一直占有内存。

4)变量的不合理作用域。一个 变量定义的范围大于它的作用域,而又没有置为 null 时,将发生内存泄漏。

5. Collection :Collection 是整个集合框架的基础。主要有 Set 、List 、Map 三个接口。

Set : 集合,里面的元素没有重复的,该接口有两个实现类:HashSet 和 TreeSet。HashSet会去除重复的元素;TreeSet 实现了sortedSet 接口不仅去重还会进行排序,在元素插入时进行排序操作,所以 TreeSet 内的元素是 有序的。

TreeSet原理:使用二叉树原理,对元素进行排序,每插入一个元素进行一次排序。Integer和String对象都可以进行默认的TreeSet排序,而自定义类的对象是不可以的,自己定义的类必须实现Comparable接口,并且覆写相应的compareTo()函数,才可以正常使用。

List:列表 又称为有序的 Collection。按对象进入的顺序保存对象。可以保存重复对象,ArrayList 、LinkedList、Vector 对象都实现了 List 接口。

Map :键值对的映射关系,保存的值可以重复,但是键必须是唯一的,保证每个键有且只有一个对应的值。常用的有HashMap (基于 散列实现,可以利用HashCode进行快速查询),TreeMaop (基于红黑树的数据结构 )

————总结自《java程序员面试宝典》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: