1、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的method 不可以是static的
,因为抽象的方法是要被子类实现的,而static与子类扯不上关系!
abstract的method 不可以是native的,
native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,所以,它也不能是抽象的,不能与abstract混用。例如,FileOutputSteam类要硬件打交道,底层的实现用的是操作系统相关的api实现,例如,在windows用c语言实现的,所以,查看jdk 的源代码,可以发现FileOutputStream的open方法的定义如下:
private native void open(String name) throws FileNotFoundException;
如果我们要用java调用别人写的c语言函数,我们是无法直接调用的,我们需要按照java的要求写一个c语言的函数,又我们的这个c语言函数去调用别人的c语言函数。由于我们的c语言函数是按java的要求来写的,我们这个c语言函数就可以与java对接上,java那边的对接方式就是定义出与我们这个c函数相对应的方法,java中对应的方法不需要写具体的代码,但需要在前面声明native。
abstract的method 不可以是synchronized的,
在我几年的学习和开发中,从来没见到过这种情况,并且我觉得synchronized应该是作用在一个具体的方法上才有意义。而且,方法上的synchronized同步所使用的同步锁对象是this,而抽象方法上无法确定this是什么。
2、super.getClass()方法调用
下面程序的输出结果是多少?
import java.util.Date;
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(super.getClass().getName());
}
}
在test方法中,直接调用getClass().getName()方法,返回的是Test类名
由于getClass()在Object类中定义成了final,子类不能覆盖该方法,
所以,在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。
如果想得到父类的名称,应该用如下代码:getClass().getSuperClass().getName();
3、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
也许你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果:
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());;
}
static int test()
{
int x = 1;
try{
return x;
}
finally{
++x;
}
}
}
运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。
4、error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。不可能指望程序能处理这样的情况。也就 说当发生error的时候,运行程序会被终止,虚拟机退出。我们没有任何办法(try-catch)使得程序重新回到正常轨道上。
比如下面的代码:
public class Outer{
public static void main(String[] args){
try{
int[] i=new int[1000000000];
}catch(Exception e){
System.out.println("aaa");
}
}
}
运行结果:
Exception in thread "main" java.lang.OutOfMemoryError
: Java heap space
at hr.test.Outer.main(Outer.java:7)
exception 表示一种设计或实现问题
。也就是说,它表示如果程序运行正常,从不会发生的情况。 不过是运行时异常(如ArrayIndexOutOfBoundsException)还是需检查异常(如FileNoFindException),都可以通过try-catch使得程序可以继续运行下去。
注意,运行时异常和需检查异常的唯一区别就是:前者无需再方法签名后声明异常类型,而后者必须声明。error和exception都继承了Throwable,因此都可以抛出。
异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示,Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。
Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。
java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try..catch处理或用throws声明,所以系统异常也称为unchecked异常。
分享到:
相关推荐
这个是我个人面试的一些总结,希望给大家一些帮助。如果文档有欠缺或者的地方还请大家海涵,自己动手查找资料。(总结的比较粗糙)
java面试中常设计到的问题。希望对于一些刚找工作的java程序员有一些帮助!
给即将面试的java软件职业的一点帮助,自己面试过程中遇到的问题,以及一起培训的其他人面试问题的一个总结,只是问题总结,没有答案,答案可以自己百度
Java重点面试题 – 针对java面试过程中经常遇到的一些试题进行总结.docx
本文是为面临就业的Java程序员们量身定制的Java考试大全,里面的问题是面试过程中遇见的最多的问题,希望对大家有所帮助
最近面试了几家公司,都是java题,然后在面试过程中发现一般面试官会问的技术问题都可以在本文档找得到,一般会问servlet的生命周期、Struts和struts2的区别,hibernate、spring的认识、对象、修饰符的作用域、OOP的...
在求职过程中会遇到的比较的常见的面试问题
Java面试题总结,文档由浅入深,先详细的讲述了Java常用的基础知识,再由此出发,列出了一些Java面试过程中长遇到的问题,希望对你有用!
在java面试过程中经常遇到的经典问题,问题及答案总结。
面试一些公司遇到的某些问题,详细记录下来,希望对要准备面试的人有帮助。
在java面试过程中遇到的一些问题,都是一些常识问题,也许有一些深入的内容,但都是需要面试的时候掌握的。
想必大家都有参加过面试的或多或少的经历吧,不知道考官都会问啥米刁钻古怪的问题呢?下面的考题是我搜集的一些针对java的面试题目,还不少,大概分为[基础类][应用类][其他类],仅供参考,大家还可以说说自己的面试...
Java面向对象的面试题,一些在面试过程中可能遇到的问题
Java面试题整理 9 Java面向对象 9 1. super()与this()的区别? 9 2. 作用域public,protected,private,以及不写时的区别? 9 3. 编程输出如下图形。 9 4. JAVA的事件委托机制和垃圾回收机制 10 5. 在JAVA中,如何跳出...
java面试过程中遇到的问题及回答整理,包括Java基础,算法与数据结构,jvm,集合源码,JavaEE,海量数据处理,并发与多线程。希望可以帮助到你
系统地总结了Java面试中经常遇到的问题,涵盖了Java基础知识、高级特性、常用框架、分布式系统、大数据与数据科学、人工智能与机器学习以及区块链和加密技术等多个方面。通过阅读本文,读者不仅能够深入了解Java面试...
在用人单位的面试过程中,最大的困难就是如何回答面试人员的问题。其实如果你能够好好准备,加上临场镇定的表现和充分的发挥,你一定能够轻松过关。下面就是用人单位面试过程常见的问题以及这些问题背后的指向
讲述了java面试过程中常遇到的问题.包括Oracle数据库,java基础,jsp知识点,servlet技术,Hibernate等部分的技术问答.为准备java面试的提供一个复习框架.
Java面试及答案是个人从去年到今年,在面试过程中整理的一些面试中遇到的重点和难点,全部整理在这个pdf里面,希望能够给正在找工作和面试的朋友一些帮助!!