java基础面试题

今天在面试实习生的时候,找了几道基本的面试题:

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

答:会执行,在方法返回调用者之前执行。Java允许在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,这会对程序造成很大的困扰,真实的情况是finally代码块中执行的改变返回值的代码确实是生效了,但是返回的是执行之前就记录下的返回值。

2、是否可以继承String 类?

答:String 类是final类,不可以被继承。

3、Java 中的final关键字有哪些用法?

答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改,相当于是常量。

4、final, finally, finalize的区别?

答:final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。将变量声明为final,可以保证它们在使用中不被改变,被声明为final 的变量在给定初值后,只能读取不可修改。被声明为final 的方法也同样只能使用,不能在子类中被重写。finally:通常放在try…catch的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。finalize:Object类中定义的方法,Java中允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize() 方法可以整理系统资源或者执行其他清理工作。

5、Error和Exception 有什么区别?

答:Error 表示系统级的错误和程序不必处理的异常,是很严重的错误问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

6、如果去掉了main方法的static修饰符会怎样?

答:程序能正常编译。运行时会抛NoSuchMethodError异常。这是因为static修饰符修饰的方法是不依赖于类的实例对象,可以通过类名直接访问到,但是去掉了static修饰符后,可能就找不到这个方法了。

7、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

答:不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,因此在调用非静态方法时可能对象并没有被初始化。如果确实要在静态方法中调用非静态方法,可以先实例化这个非静态方法所在的对象,通过这个对象来调用它里面的非静态方法。

8、静态变量和实例变量的区别?

答:静态变量是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。在Java开发中,上下文类和工具类中通常会有大量的静态成员。

9、Java的“一次编写,处处运行”是如何实现的?

答:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。


猜你喜欢

转载自blog.csdn.net/u014209205/article/details/80051818