目录
3.Error和Exception有什么区别?什么时候需要捕获异常,什么时候需要抛出异常?
简答题
1.什么是java序列化,如何实现java序列化?
Java序列化就是将Java对象转换成字节系列的过程;
实现序列化需要在被实现的类中(一般为项目中的bean层)继承实现Serializable接口,但接口无具体实现的方法,只是为了标识此类可被序列化。
然后使用输出流构造对象输出流(ObjectOutputStream),通过writeObject的方法将对象写入到要保存文本内(文本内容被序列化后在原文本内查看是乱码);想要回复内容时可在程序中使用输入流构建对象输入流(ObjectInputStream)进行反序列化操作,对文本内容通过readObject的方法读入到程序内,即可以查看到原先未被序列化操作时的文本内容。
2.Java支持的数据类型有哪些?什么是自动拆装?
Java支持的数据类型在宏观上有基本数据类型与引用数据类型;
在微观上,则是对基本数据类型和引用数据类型进行详细的分类。
基本数据类型:整数值型:byte,short,int,long;字符型:char;浮点类型:float,double;布尔型:boolean (一共有八种基本数据类型)
整数默认int型,小数默认是double型。Float和long类型要加后缀(f和l)。
引用数据类型:Object——(类类型) Array——(数组类型) Interface——(接口类型) ;String也属于引用数据类型。
自动拆装箱,是指基本数据类型和引用数据类型(包装类)之间的自动转换;如Integer 和 int 可以自动转换; Character和char可以自动转换。
例如:Integer i=10 可以替代 Integer i = new Integer(10)
3.Error和Exception有什么区别?什么时候需要捕获异常,什么时候需要抛出异常?
Error和Exception都继承了Throwable类;与错误和异常相关的类为Throwable类,Error和Exception是其派生出来的两种子类。
Error错误类对应的错误是由Java内部产生的,一般比较严重,会导致应用程序的中断;不是用户程序自身能控制与避免,无法捕获与处理此类错误。(error类包含输入输出错误,动态链接失败错误,开发包错误,服务配置错误,线程死锁错误和虚拟机错误等多种)
Exception异常类是用来描述那些由程序自身或环境产出的错误,此类错误可被修复,能对其捕获并加以处理。此类是所有能够被捕获的异常类的基类,主要有输入输出异常和运行时异常两大常见子类。
若方法没有被调用或异常信息没有用,则应该对异常进行捕获。
如果遇到不想处理或者无能力处理的异常则可以用throws将其抛出,并提交给上一层的调用方法去处理。
4.进程的几种状态分别是什么?
创建状态、运行状态、阻塞状态、(等待)睡眠状态、终止状态;
5.&和&&有什么区别?
按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;(&对每一个都判断;)
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。 (&&只要前面是false就输出false,而不继续判断后面了。具有短路效果)
6.常见的垃圾回收算法有哪些?简述其原理.
-
标记-清除算法
标记-清除算法采用从根集合(GC Roots)进行扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未被标记的对象,进行回收,标记-清除算法不需要进行对象的移动,只需对不存活的对象进行处理,在存活对象比较多的情况下极为高效,但由于标记-清除算法直接回收不存活的对象,因此会造成内存碎片。
-
复制算法
复制算法的提出是为了克服句柄的开销和解决内存碎片的问题。它开始时把堆分成 一个对象 面和多个空闲面, 程序从对象面为对象分配空间,当对象满了,基于copying算法的垃圾 收集就从根集合(GC Roots)中扫描活动对象,并将每个 活动对象复制到空闲面(使得活动对象所占的内存之间没有空闲洞),这样空闲面变成了对象面,原来的对象面变成了空闲面,程序会在新的对象面中分配内存。
-
标记-整理算法
标记-整理算法采用标记-清除算法一样的方式进行对象的标记,但在清除时不同,在回收不存活的对象占用的空间后,会将所有的存活对象往左端空闲空间移动,并更新对应的指针。标记-整理算法是在标记-清除算法的基础上,又进行了对象的移动,因此成本更高,但是却解决了内存碎片的问题。
-
分代收集算法
分代收集算法是目前大部分JVM的垃圾收集器采用的算法。它的核心思想是根据对象存活的生命周期将内存划分为若干个不同的区域。一般情况下将堆区划分为老年代(Tenured Generation)和新生代(Young Generation),在堆区之外还有一个代就是永久代(Permanet Generation)。老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收时都有大量的对象需要被回收,那么就可以根据不同代的特点采取最适合的收集算法。
7.多态的好处?
多态体现为两种方式:重写和重载
重写是父子类之间多态的体现,它的好处就是可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
重载是本类之间多态的体现,它的好处是可以满足用户在针对同一对象可以调用同一方法的不同功能体现,以最大限度适应用户的不同需求。
综合题
1.请以任何语言实现1+2+3+…+100
public class sum { public static void main(String[] args) { int sum = 0; for(int i=0;i<=100;i++){ sum=sum+i; } System.**out**.println(sum); } }
2.以下代码输出true个数,为什么?
class A{} class B extends A{} class C extends A{} class D extends B{} A obj = new D();(向下转型) System.out.println(obj instanceof B);true System.out.println(obj instanceof C); System.out.println(obj instanceof D);true System.out.println(obj instanceof A); true D属于B,D属于A,D属于D,D不属于C
3.写出两种单例模式实现?