`

Java面试过程中会遇到的问题

阅读更多

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异常。

 

分享到:
评论
1 楼 xiaolong8 2014-03-05  
try或catch语句块中的return语句运行结果,似乎存储一个在函数return结果的快照中,后面执行的finally语句块(非return语句)的执行不会影响这个结果快照。但是如果finally语句有return语句时,return结果快照则被finally语句块中的return语句执行结果更新,从而函数返回结果又以finally语句块的return语句执行结果为准。

相关推荐

    java面试过程中遇到的问题总结

    Java 面试过程中遇到的问题总结 本文总结了 Java 面试中的一些常见问题,涵盖了 Ajax 的原理、优缺点、 DispatchAction 和 Action 的区别等知识点。 Ajax 的原理 Ajax 是一种异步请求技术,通过 XmlHttpRequest ...

    java面试中遇到的问题

    Java 面试中遇到的问题 Java 面试中常设计到的问题,以下是对标题和描述中所说的知识点的详细说明: Core Java * 线程:Java 中的线程是通过 Thread 类或 Runnable 接口来实现的。线程的生命周期包括新建、就绪、...

    遇到的JAVA面试问题总结,只是面试问题

    给即将面试的java软件职业的一点帮助,自己面试过程中遇到的问题,以及一起培训的其他人面试问题的一个总结,只是问题总结,没有答案,答案可以自己百度

    java面试中经常会遇到的问题

    Java面试是评估程序员技能的重要环节,它涵盖了广泛的Java编程概念和技术。...以上内容只涵盖了部分Java面试中的常见问题,实际面试可能会涉及更深入的技术细节和具体项目经验。持续学习和实践是提升Java技能的关键。

    Java面试宝典和2018Bat公司面试题

    本资源包"Java面试宝典和2018Bat公司面试题"包含了针对Java程序员精心整理的面试资料,旨在帮助求职者全面了解并掌握Java技术的核心知识点,以及在BAT(百度、阿里巴巴、腾讯)等知名互联网公司面试中可能遇到的问题...

    JAVA面试问题,自己和别人总结

    JAVA面试问题总结 JAVA是一种广泛应用的编程语言,作为一名JAVA开发者,需要具备扎实的基础知识和实践经验。本文总结了常见的JAVA面试问题,涵盖了JAVA基础、JSP、Servlet、XML、J2EE、MVC、数据库等方面的知识点。...

    JAVA面试宝典.pdf

    《JAVA面试宝典》是一本全面涵盖Java技术体系和求职面试知识的指南,旨在帮助Java开发者准备面试,提升技能。本书共分为十章,从基础知识到框架应用,再到项目实战和面试题解析,覆盖了Java开发者的必备技能。 第一...

    java面试题中

    Java面试题全集中涵盖了许多Java Web和Web Service相关的知识点,这些是Java开发人员在面试过程中经常遇到的主题。让我们深入探讨一下这些关键领域的核心概念和重要问题。 **Servlet** Servlet是Java编程语言中用于...

    面试中常见的有关JAVA和JSP的问题

    【JAVA和JSP面试常见问题解析】 1. **Struts工作原理** Struts是一个用于构建Java ...这些是JAVA和JSP面试中可能遇到的一些常见问题,理解和掌握这些问题的解答对于面试和实际工作中处理Web应用程序的开发至关重要。

    JAVA面试题 人事面试 Java技术面试

    这份压缩包文件包含了一系列关于Java面试的文档和文本,旨在帮助你全面了解并掌握面试中可能遇到的问题。以下是一些主要的Java知识点,根据这些文档标题可以预见到的内容: 1. **Java基础**:Java面试题-COREJAVA...

    java面试评价表

    通过以上梳理的知识点,我们可以看出Java面试评价表旨在全面评估应聘者的技术能力和综合素质,覆盖了从基础知识到高级开发等多个层面,不仅注重理论知识的掌握,还强调实际项目经验和解决问题的能力。这对于企业招聘...

    Java面试笔记 225道Java面试题JAVA面试基础知识点总结Java数据结构题笔试WORD资料汇总(19个).zip

    Java面试笔记 225道Java面试题...Java重点面试题 – 针对java面试过程中经常遇到的一些试题进行总结.docx JAVA面试基础知识点总结.docx Java面试笔记.docx 写出正则表达式,从一个字符串中提取链接地址.docx 出现几率最

    ( Java面试宝典2017版(1).zip ) PDF高清版

    这份PDF高清版不仅提供了全面的知识点梳理,还强调了面试过程中可能遇到的重点和难点。 首先,Java语言基础是面试中的必考部分。这包括了变量、数据类型、运算符、流程控制语句(如if、switch、for、while等)以及...

    Java面试题以及答案整理.pdf

    这些只是Java面试中可能会遇到的一部分问题,涵盖范围广泛,从基础语法到高级特性,深入理解并能熟练运用这些知识对于通过Java面试至关重要。在准备面试时,除了熟悉这些知识点,还应关注最新的技术趋势,如Spring ...

    日语java面试问题集

    "日语Java面试问题集"是为准备对日外包Java面试者量身定制的学习资料,旨在帮助他们提升面试成功率。这份资料可能包含了各种技术问题、项目经验以及日语交流能力的测试题目。 1. **Java基础知识** - 类与对象:...

    java-面试指北PDF版本(最新)

    【Java 面试指北】是一份针对Java求职者精心编写的面试...这份《Java面试指北》PDF集合了Java程序员在求职过程中可能遇到的各种问题和应对策略,无论是初学者还是有经验的开发者,都能从中受益,为面试做好充分准备。

    黑马程序员java面试宝典 完整版PDF.rar

    《黑马程序员Java面试宝典》是一本专门为Java开发者准备的面试指南,包含了广泛而深入的Java技术知识,以及面试过程中可能会遇到的各种问题。这本书的完整版PDF提供了丰富的学习材料,帮助求职者提升自己的技术水平...

    Java面试题大全.pdf

    面试中可能会遇到关于instanceof的使用和限制的问题。 类型转换在Java中分为显式转换和隐式转换。显式转换也称为强制类型转换,通常涉及到范围较小的数据类型向范围较大的数据类型转换;隐式转换则是自动发生的,...

    中兴软创java面试题

    【中兴软创Java面试题】是一份2018年的面试资料,涵盖了针对Java开发者在中兴软创面试过程中可能会遇到的问题。这份资源对于准备Java面试,特别是中兴软创公司的面试者来说,是非常宝贵的参考资料。以下是根据这份...

Global site tag (gtag.js) - Google Analytics