一般的なインタビューの質問のJavaの基本(4)


31、String s = new String("xyz");创建了几个StringObject?是否可以继承String类?

	类加载时遇到”abc”会创建一个String对象并放入常量池;程序执行时new String()又会在堆内存中创建一个,
	总共两个StringObject;String是final修饰的类,所以不能被继承

32、String和StringBuffer的区别

	String:字符串,长度不可变,不能被继承,字符串拼接时,会产生临时字符串对象,效率低
	StringBuffer:可变字符序列,字符串拼接时,不会产出临时字符串对象,效率高,可用于大量字符的拼接

33、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

	javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时
	去掉其中的加号,直接将其编译成一个这些常量相连的结果。
	题目中的代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串

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

	try{
    
    }中的return执行后在没有返回数据时先去执行finally{
    
    }中的代码,然后再返回,所以会在return中间执
	行。

35、final, finally, finalize的区别。 

	final:修饰类时,不能被继承,修饰方法时不能被重写,修饰变量时只能赋值一次
	finally:try-catch配合使用进行捕获异常,finally中的代码为始终要执行的代码
	finalize:Object类的一个方法,当垃圾回收器确定没有变量指向的对象时,会调用该对象的finalize方法进行
	资源回收

36、运行时异常与一般异常有何异同?

	对于运行时异常,Java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定
	一般异常,Java编译器强制程序员必须进行捕获处理,如果不进行捕获或者抛出声明处理,编译不会通过

37、error和exception有什么区别?

	都继承了Throwable类
	error指恢复不是不可能但非常困难的情况下的一种严重错误,比如内存溢出,不指望程序可以处理这样的情况
	exception表示一种设计或者实现问题,如果程序正常运行,则不会发生。又分为运行时异常和非运行时异常
	
38、简单说说Java中的异常处理机制的简单原理和应用。

	当Java程序违反了Java的语义规则时,JVM就会将发生的错误表示为一个异常。违反语义规则包括2中情况。一种
	是Java类库内置的语义检查。例如数组下标越界,会抛出IndexOutOfBoundsException;访问null的对象时会抛
	出NullPointerException.另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并
	自由选择在何时用throw关键字抛出异常。所有的异常都是java.lang.Throwable的子类
	
39、Java 中堆和栈有什么区别?

	堆和栈都是Java用来存放数据的地方
	Java的堆是一个运行时数据区,类的对象从堆中分配空间。这些对象通过new等指令建立,通过垃圾回收器来销
	毁;
	堆的优势是可以动态的分配内存空间,需要多少内存空间不必事先告诉编译器,因为它是在运行时动态分配的。
	但缺点是,由于需要在运行时动态分配内存,所以存取速度较慢
	栈中主要存放一些基本数据类型的变量和对象的引用;
	栈的优势是,存取速度比堆快,栈数据可以共享。但缺点是,存放在栈中的数据占用多少内存空间需要在编译时
	确定下来,缺乏灵活性

40、能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?

	是的,我们可以做强制转换,但是Java中int是32位的,而byte是8位的,所以,如果强制转换时,int类型的高
	24位将会被丢弃,byte类型的范围是从-128127

前:一般的なJavaインタビューの質問:Javaコレクションフレームワーク(3)
次:Java一般的なインタビューの質問:Javaの基本(5)

おすすめ

転載: blog.csdn.net/Mr_TXQ/article/details/109046018