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 面试中的一些常见问题,涵盖了 Ajax 的原理、优缺点、 DispatchAction 和 Action 的区别等知识点。 Ajax 的原理 Ajax 是一种异步请求技术,通过 XmlHttpRequest ...
Java 面试中遇到的问题 Java 面试中常设计到的问题,以下是对标题和描述中所说的知识点的详细说明: Core Java * 线程:Java 中的线程是通过 Thread 类或 Runnable 接口来实现的。线程的生命周期包括新建、就绪、...
给即将面试的java软件职业的一点帮助,自己面试过程中遇到的问题,以及一起培训的其他人面试问题的一个总结,只是问题总结,没有答案,答案可以自己百度
Java面试是评估程序员技能的重要环节,它涵盖了广泛的Java编程概念和技术。...以上内容只涵盖了部分Java面试中的常见问题,实际面试可能会涉及更深入的技术细节和具体项目经验。持续学习和实践是提升Java技能的关键。
本资源包"Java面试宝典和2018Bat公司面试题"包含了针对Java程序员精心整理的面试资料,旨在帮助求职者全面了解并掌握Java技术的核心知识点,以及在BAT(百度、阿里巴巴、腾讯)等知名互联网公司面试中可能遇到的问题...
JAVA面试问题总结 JAVA是一种广泛应用的编程语言,作为一名JAVA开发者,需要具备扎实的基础知识和实践经验。本文总结了常见的JAVA面试问题,涵盖了JAVA基础、JSP、Servlet、XML、J2EE、MVC、数据库等方面的知识点。...
《JAVA面试宝典》是一本全面涵盖Java技术体系和求职面试知识的指南,旨在帮助Java开发者准备面试,提升技能。本书共分为十章,从基础知识到框架应用,再到项目实战和面试题解析,覆盖了Java开发者的必备技能。 第一...
Java面试题全集中涵盖了许多Java Web和Web Service相关的知识点,这些是Java开发人员在面试过程中经常遇到的主题。让我们深入探讨一下这些关键领域的核心概念和重要问题。 **Servlet** Servlet是Java编程语言中用于...
【JAVA和JSP面试常见问题解析】 1. **Struts工作原理** Struts是一个用于构建Java ...这些是JAVA和JSP面试中可能遇到的一些常见问题,理解和掌握这些问题的解答对于面试和实际工作中处理Web应用程序的开发至关重要。
这份压缩包文件包含了一系列关于Java面试的文档和文本,旨在帮助你全面了解并掌握面试中可能遇到的问题。以下是一些主要的Java知识点,根据这些文档标题可以预见到的内容: 1. **Java基础**:Java面试题-COREJAVA...
通过以上梳理的知识点,我们可以看出Java面试评价表旨在全面评估应聘者的技术能力和综合素质,覆盖了从基础知识到高级开发等多个层面,不仅注重理论知识的掌握,还强调实际项目经验和解决问题的能力。这对于企业招聘...
Java面试笔记 225道Java面试题...Java重点面试题 – 针对java面试过程中经常遇到的一些试题进行总结.docx JAVA面试基础知识点总结.docx Java面试笔记.docx 写出正则表达式,从一个字符串中提取链接地址.docx 出现几率最
这份PDF高清版不仅提供了全面的知识点梳理,还强调了面试过程中可能遇到的重点和难点。 首先,Java语言基础是面试中的必考部分。这包括了变量、数据类型、运算符、流程控制语句(如if、switch、for、while等)以及...
这些只是Java面试中可能会遇到的一部分问题,涵盖范围广泛,从基础语法到高级特性,深入理解并能熟练运用这些知识对于通过Java面试至关重要。在准备面试时,除了熟悉这些知识点,还应关注最新的技术趋势,如Spring ...
"日语Java面试问题集"是为准备对日外包Java面试者量身定制的学习资料,旨在帮助他们提升面试成功率。这份资料可能包含了各种技术问题、项目经验以及日语交流能力的测试题目。 1. **Java基础知识** - 类与对象:...
【Java 面试指北】是一份针对Java求职者精心编写的面试...这份《Java面试指北》PDF集合了Java程序员在求职过程中可能遇到的各种问题和应对策略,无论是初学者还是有经验的开发者,都能从中受益,为面试做好充分准备。
《黑马程序员Java面试宝典》是一本专门为Java开发者准备的面试指南,包含了广泛而深入的Java技术知识,以及面试过程中可能会遇到的各种问题。这本书的完整版PDF提供了丰富的学习材料,帮助求职者提升自己的技术水平...
面试中可能会遇到关于instanceof的使用和限制的问题。 类型转换在Java中分为显式转换和隐式转换。显式转换也称为强制类型转换,通常涉及到范围较小的数据类型向范围较大的数据类型转换;隐式转换则是自动发生的,...
【中兴软创Java面试题】是一份2018年的面试资料,涵盖了针对Java开发者在中兴软创面试过程中可能会遇到的问题。这份资源对于准备Java面试,特别是中兴软创公司的面试者来说,是非常宝贵的参考资料。以下是根据这份...