本文是上一篇博客Java面试问题及回答(一)的后续,系列第二篇。

1. Java中一个对象是如何序列化的?

答:在Java中,把一个对象转化成字节流就是通过序列化,这是一个由类实现的叫作Serializable的接口。所有继承了序列化接口的类的实例会被序列化,并且它们的状态被存储在字节流中。

注:了解更多Java序列化的高级认识

2. 我们应该什么时候用序列化?

答:当数据需要在网络中传输的时候需要序列化,通过序列化,对象的状态被保存起来,并被转换成字节流;字节流在网络中传输,而对象在目的地重新生成。

3. String是Java的一种数据类型吗?

答:String不是Java的一种基本数据类型。当你在Java中创建一个字符串的时候,通常是一个java.lang.String类的一个对象被创建了。创建了这个字符串对象之后,所有String类的内置方法都可以用在这个字符串对象上。

4. 什么是已检测异常(Checked Exception)?

答:通常是典型的用户错误,或者是程序员不能预见的问题。比如,如果要打开一个文件,但是这个文件找不到,异常就会发生。这些异常不能简单地在编译的时候被忽略。

5. 什么是Runtime Exception?(这里不好翻译成运行时异常,因为其实上面第4点提到的也是运行时异常)

答:Runtime Exception是有可能被程序员避免发生的一类异常,和已检测异常(Checked Exception)相反,Runtime Exception在编译的时候被忽略。

6. 什么是多态性?

答:多态是一个对象可以采取多个形式的能力,面向对象编程中最常用的多态是当一个父类指向了一个子类的对象。

注:比如,FatherClass father = new ChildClass().

7. 什么是抽象化?

答:在面向对象编程中把一个类变成抽象类的能力,可以帮助减少复杂度,提高系统的可维护性。

8. 什么是抽象类?

答:不能被实例化并且要么是部分实现要么根本没有实现的类,抽象类包含了一个或者多个抽象方法,这些方法只有方法声明而没有方法的主体。

9. 数组和向量的区别?

答:数组包含了相同的原始数据类型的数据,本质上是静态的;而向量本质上是动态的,可以包含不同数据类型的数据。

10. 什么是线程?

答:线程是系统中某个执行的独立路径。

11. 什么是多线程?

答:多线程是一个编程概念,是指在单个程序中并行地执行多个任务。线程共享相同的进程栈,并且并行运行。它可以帮助提高程序的性能。

12. 在单个CPU的计算机上多线程是怎么发生的?

答:操作系统的任务调度给多个任务分配执行时间,通过快速地在不同的执行任务之间切换,给人的印象就是任务顺序执行。

13. Void类的作用?

答:Void类是一个不能被实例化的占位符类,它保有一个指向表示原始Java类型void的类对象的引用。

14. 什么是包?

答:把一系列类组合成一个单元叫打包,包给命名空间提供了广泛的能力。

15. 什么是接口?

答:接口是抽象类的集合。一个类实现了某个接口,那么就继承了这个接口的抽象方法。

16. 解释Set接口?

答:不能包含重复元素的集合。Set接口仅包含了继承自Collection的方法,并添加了元素不能重复的限制。

17. throw和throws的区别?

  • throw用来触发异常,而throws用来声明异常;
  • 没有throw(原文写成了throws,按照后面的解释,这里应当是throw),已检测异常不能被处理,而已检测异常可以通过throws传递。

18. finalization的目的?

答:finalization的目的是给无法访问的对象在被垃圾回收之前,提供一个执行任何清理程序的机会。

19. 在try-catch-finally语句中,finally子句的作用?

答:finally子句用来提供执行代码的能力,无论是否抛出异常或者捕捉异常。

20. 什么是受保护的方法?

答:受保护的方法是只能被本包的其他方法或该类的任何一个子类所访问到的方法。

The end.