java程序员面试宝典百度云(java程序员面试宝典第四版)
今天给各位分享
271. 列举常见的运行时异常答:ClassCastException(类转换异常) 比如 :Object obj=new Object(); String s=(String)obj;
IndexOutOfBoundsException(下标越界异常)NullPointerException(空指针异常)ArrayStoreException(数据存储异常,操作数组时类型不一致)BufferOverflowException(IO操作时出现的缓冲区上溢异常)
InputMismatchException(输入类型不匹配异常)ArithmeticException(算术异常)注意:运推广网站怎么推广行时异常都是RuntimeException子类异常272. 下面关于 Java.lang.Exception类的说法正确的是()。
A. 继承自 ThrowableB. 不支持SerializableC. 继承自 AbstractSetD. 继承自FitelnputStream答案:A分析:Throwable是Exception和Error的父类,Exception虽然没有实现Serializable接口,但是其父类Throwable已经实现了该接口,因此Exception也支持Serializable。
273. Unsupported major.minor version 52是什么异常,推广网站怎么推广怎么造成的,如何解决?答:问题的根本原因是工程中某个jar包的版本(jar包编译时的所用的jdk版本)高于工程build path中jdk的版本,这个是不兼容的! 编程中遇到此异常Unsupported major.minor version 52.0(根据版本号,这里可以为其他数值,52是1.8jdk jar包与 1.8以下低版本jdk不匹配),在将build path中jdk的版本调整与jar包匹配后,解决异常。
274. try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?答:会执行,在方法返回调用推广网站怎么推广者前执行Java允许在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,这会对程序造成很大的困扰,C#中就从语法上规定不能做这样的事。
(也许你的答案是在return之前,但往更细地说,我的答案是在return中间执行,请看下面程序代码的运行结果:publicclassTest{/** * @paramargs add by zxx ,Dec 9, 2008
*/publicstaticvoidmain推广网站怎么推广(String[]args){// TODO Auto-generated method stub System.out.println(newTest
().test());;}staticinttest(){intx=1;try{returnx;}finally{++x;}}}执行结果运行结果是1,为什么呢?主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。
所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的275. Java 语言如何进行异常推广网站怎么推广处理,关键字:throws、throw、try、catch、finally分别如何使用?
答:Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口在Java 中,每个异常都是一个对象,它是Throwable 类或其子类的实例当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。
Java 的异常处理是通过5 个关键词来实现的:try、catch、throw、throws和finally一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throw)一个异常,这时候你可以通过它的类型来捕捉(catc推广网站怎么推广h)它,或最后(finally)由缺省处理器来处理;try用来指定一块预防所有“异常”的程序;catch 子句紧跟在try块后面,用来指定你想要捕捉的“异常”的类型;throw 语句用来明确地抛出一个“异常”;throws用来标明一个成员函数可能抛出的各种“异常”;finally 为确保一段代码不管发生什么“异常”都被执行一段代码;可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。
每当遇到一个try 语句,“异常”的框架就放到栈上面,直到所有的try语句都完成如果下一级的try语句没有对某种“异常”进行处理,栈就会展开,直到遇到有处理这种“异常”的推广网站怎么推广try 语句 276. 运行时异常与受检异常有何异同?
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。
Java编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常异常和继承一样,是面向对象程序设计中经常被滥用的东西,神作《Effective Java》中对异常的使用给出了以下指导原则:。
不要将异常处理用于正常的控制流(设计良好的API不应该强迫它的调用者为了正常的控制流而使推广网站怎么推广用异常)对可以恢复的情况使用受检异常,对编程错误使用运行时异常避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常发生)
优先使用标准的异常每个方法抛出的异常都要有文档保持异常的原子性不要在catch中忽略掉捕获到的异常 (异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常)277. 类ExampleA 继承Exception,类ExampleB 继承ExampleA有如下代码片断:
try{thrownewExampleB("推广网站怎么推广b")}catch(ExampleAe){System.out.println("ExampleA");}catch(Exceptione){System.out
.println("Exception");}请问执行此段代码的输出是什么?答:输出:ExampleA(根据里氏代换原则[能使用父类型的地方一定能使用子类型],抓取ExampleA类型异常的catch块能够抓住try块中抛出的ExampleB类型的异常)。
补充: 比此题略复杂的一道面试题如下所示(此题的出处是《Java编程思想》),说出你的答案吧!packagecom.bjsxt;classAnnoyanceextendsExcept推广网站怎么推广ion{}class
SneezeextendsAnnoyance{}classHuman{publicstaticvoidmain(String[]args)throwsException{try{try{thrownew
Sneeze();}catch(Annoyancea){System.out.println("Caught Annoyance");throwa;}}catch(Sneezes){System.out
.println("Caught Sneeze");return;}finally{System.out.println("Hello World!");}}}输出为:Caug推广网站怎么推广ht AnnoyanceCaught Sneeze
Hello World!278. Error和Exception的区别
Error类,表示仅靠程序本身无法恢复的严重错误,比如说内存溢出、动态链接异常、虚拟机错误应用程序不应该抛出这种类型的对象假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的所以在进行程序设计时,应该更关注Exception类。
Exception类,由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等它的各种不同子类分别对应不同类型异常可分为两类:Checked异常和Runtime异常279. Java异常处理try-catc推广网站怎么推广h-finally的执行过程
try-catch-finally程序块的执行流程以及执行结果比较复杂基本执行过程如下:1)程序首先执行可能发生异常的try语句块2)如果try语句没有出现异常则执行完后跳至finally语句块执行;3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。
4)catch语句块可以有多个,分别捕获不同类型的异常5)catch语句块执行完后程序会继续执行finally语句块finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
需要注意的是即使try和catch块中存在return语句,finall推广网站怎么推广y语句也会执行,是在执行完finally语句后再通过return退出280. 异常处理中throws和throw的区别1)作用不同:
throw用于程序员自行产生并抛出异常;throws用于声明在该方法内抛出了异常2) 使用的位置不同:throw位于方法体内部,可以作为单独语句使用;throws必须跟在方法参数列表的后面,不能单独使用。
3)内容不同:throw抛出一个异常对象,且只能是一个;throws后面跟异常类,而且可以有多个。