JAVA基础面试题2答案版.docx
《JAVA基础面试题2答案版.docx》由会员分享,可在线阅读,更多相关《JAVA基础面试题2答案版.docx(26页珍藏版)》请在冰豆网上搜索。
JAVA基础面试题2答案版
JAVA语言基础笔试题-2
Question1
Given:
11.classA{
12.publicvoidprocess(){System.out.print(“A“)}}
13.classBextendsA{
14.publicvoidprocess()throwsRuntimeException{
15.super.process();
16.if(true)thrownewRuntimeException();
17.System.out.print(“B”)
}}
18.publicstaticvoidmain(String[]args){
19.try{((A)newB()).process();}
20.catch(Exceptione){System.out.print(“Exception“)}
21.}
Whatistheresult?
A.Exception
B.AException
C.AExceptionB
D.ABException
E.Compilationfailsbecauseofanerrorinline14.
F.Compilationfailsbecauseofanerrorinline19.
答案:
B
考点:
方法的重写(重写方法异常抛出部分的理解)
多态
异常处理
说明:
子类重写父类方法,不能抛出比父类方法更多的异常,但此处子类重写方法声明抛出了RuntimeException,不算多抛,算是平抛,是可以的。
RuntimeException是Exception的子类,可以被Exception捕获。
Question2
Given:
11.staticclassA{
12.voidprocess()throwsException{thrownewException();}
13.}
14.staticclassBextendsA{
15.voidprocess(){System.out.println(“B”)}
16.}
17.publicstaticvoidmain(String[]args){
18.Aa=newB();
19.a.process();
20.}
Whatistheresult?
A.B
B.Thecoderunswithnooutput.
C.Anexceptionisthrownatruntime.
D.Compilationfailsbecauseofanerrorinline15.
E.Compilationfailsbecauseofanerrorinline18.
F.Compilationfailsbecauseofanerrorinline19.
答案:
F
考点:
方法的重写(重写方法异常抛出部分的理解)
多态
静态内部类以及其实例的创建
说明:
19.a.process();是多态调用,调用的应该是类B的process方法,这个方法只是允许抛出RuntimeException,所以19行在理论上不需要进行异常相关处理,系统会自动抛出该异常,但是多态只是在运行时,系统方能识别,在编译的时候,系统还是按照类A的process方法来进行验证,所以出现错误,因为类A抛出的是检查异常,必须显式被捕获或者抛出。
Question3
Given:
11.staticclassA{
12.voidprocess()throwsException{thrownewException();}
13.}
14.staticclassBextendsA{
15.voidprocess(){System.out.println(“B”);
16.}
17.publicstaticvoidmain(String[]args){
18.newB().process();
19.}
Whatistheresult?
A.B
B.Thecoderunswithnooutput.
C.Compilationfailsbecauseofanerrorinline12.
D.Compilationfailsbecauseofanerrorinline15.
E.Compilationfailsbecauseofanerrorinline18.
答案:
A
考点:
方法的重写(重写方法异常抛出部分的理解)
静态内部类以及其实例的创建
Question4
Given:
84.try{
85.ResourceConnectioncon=resourceFactory.getConnection();
86.Resultsr=con.query(“GETINFOFROMCUSTOMER”)
87.info=r.getData();
88.con.close();
89.}catch(ResourceExceptionre){
90.errorLog.write(re.getMessage());
91.}
92.returninfo;
WhichistrueifaResourceExceptionisthrownonline86?
A.Line92willnotexecute.
B.Theconnectionwillnotberetrievedinline85.
C.Theresourceconnectionwillnotbeclosedonline88.
D.Theenclosingmethodwillthrowanexceptiontoitscaller.
答案:
C
考点:
try..catch结构的理解
异常的捕获和处理
说明:
由于抛出的ResourceException,能够被catch块捕获(标配),所以异常在方法中就被处理掉了,不会抛出该方法。
根据try块操作上规定,一旦抛出异常,抛出异常语句后续部分的try块语句将不再运行。
Question5
ClicktheExhibitbutton.
1.publicclassA{
2.publicvoidmethod1(){
3.Bb=newB();
4.b.method2();
5.//morecodehere
6.}
7.}
1.publicclassB{
2.publicvoidmethod2(){
3.Cc=newC();
4.c.method3();
5.
//morecodehere
6.}
7.}
1.publicclassC{
2.publicvoidmethod3(){
3.//morecodehere
4.}
5.}
Given:
25.try{
26.Aa=newA();
27.a.method1();
28.}catch(Exceptione){
29.System.out.print(“anerroroccurred!
”)
30.}
WhichtwoaretrueifaNullPointerExceptionisthrownonline3of
classC?
(Choosetwo.)
A.Theapplicationwillcrash.
B.Thecodeonline29willbeexecuted.
C.Thecodeonline5ofclassAwillexecute.
D.Thecodeonline5ofclassBwillexecute.
E.Theexceptionwillbepropagatedbacktoline27.
答案:
BE
考点:
异常的抛出、捕获和处理
说明:
一般来说,异常的抛出,最终终将被处理,本方法不处理,则抛给主调方法,关键是要能抛的出去,因为NullpointerException是RuntimeException,所以一路没有阻碍,最终 propagatedback到达27行,Exception是所有异常的父类,所以该异常在这里被处理了,
Question6
ClicktheExhibitbutton.
1.publicclassA{
2.publicvoidmethod1(){
3.try{
4.Bb=newB();
5.b.method2();
6.//morecodehere
7.}catch(TestExceptionte){
8.thrownewRuntimeException(te);
9.}
6.}
7.}
1.publicclassB{
2.publicvoidmethod2()throwsTestException{
3.//morecodehere
4.}
5.}
1.publicclassTestExceptionextendsException{
2.}
Given:
31.publicvoidmethod(){
32.Aa=newA();
33.a.method1();
34.}
WhichistrueifaTestExceptionisthrownonline3ofclassB?
A.Line33mustbecalledwithinatryblock.
B.Theexceptionthrownbymethod1inclassAisnotrequiredtobecaught.
C.Themethoddeclaredonline31mustbedeclaredtothrowaRuntimeException.
D.Online5ofclassA,thecalltomethod2ofclassBdoesnotneedto
beplacedinatry/catchblock.
答案:
B
考点:
异常抛出、捕获和处理
说明:
第8行,把检查异常TestException封装在RuntimeException中抛出是可以,因为系统仍然认为你抛出的是一个运行时异常,任何方法都默认支持抛出运行时异常。
Question7
Given:
11.publicstaticvoidmain(String[]args){
12.try{
13.args=null;
14.args[0]=”test”;
15.System.out.println(args[0]);
16.}catch(Exceptionex){
17.System.out.println(“Exception”)
18.}catch(NullPointerExceptionnpe){
19.System.out.println(“NullPointerException”)
20.}
21.}
Whatistheresult?
A.test
B.Exception
C.Compilationfails.
D.NullPointerException
答案:
C
考点:
异常的捕获处理
说明:
Exception是能够捕获所有异常的”万金油”,其一般放在捕获块的最后一环,用来捕获所有的漏网之鱼,如果放在捕获块最前头,将导致后头的捕获块永远无法得到运行,最后产生编译失败。
Question8
Given:
11.staticvoidtest()throwsError{
12.if(true)thrownewAssertionError();
13.System.out.print(“test“)
14.}
15.publicstaticvoidmain(String[]args){
16.try{test();}
17.catch(Exceptionex){System.out.print(“exception“);
18.System.out.print(“end”)
19.}
Whatistheresult?
A.end
B.Compilationfails.
C.exceptionend
D.exceptiontestend
E.AThrowableisthrownbymain.
F.AnExceptionisthrownbymain.
答案:
E
考点:
Error和Exception的关系的理解
说明:
Error和Exception是兄弟类,其有一个共同的父类Throwable,所以Error也可以被抛出。
Exception捕获块无法捕获Error,所以这里Error会被抛出,由JVM做了最终处理。
Question9
Given:
11.staticvoidtest(){
12.try{
13.Stringx=null;
14.System.out.print(x.toString()+””);
15.}
16.finally{System.out.print(“finally”);
17.}
18.publicstaticvoidmain(String[]args){
19.try{test();}
20.catch(Exceptionex){System.out.print(“exception”);
21.}
Whatistheresult?
A.null
B.finally
C.nullfinally
D.Compilationfails.
E.finallyexception
答案:
E
考点:
try..catch..finally结构理解
说明:
允许存在try..finally结构,即使没有catch块的存在。
这里try块会产生一个经典的异常NullPointerException,其是RuntimeException,可以被默认抛出,但抛出之前,需要执行一次finally.
Question10
Given:
11.staticvoidtest()throwsRuntimeException{
12.try{
13.System.out.print(“test”)
14.thrownewRuntimeException();
15.}
16.catch(Exceptionex){System.out.print(“exception”);
17.}
18.publicstaticvoidmain(String[]args){
19.try{test();}
20.catch(RuntimeExceptionex){System.out.print(“runtime”);}
21.System.out.print(“end”)
22.}
Whatistheresult?
A.testend
B.Compilationfails.
C.testruntimeend
D.testexceptionend
E.AThrowableisthrownbymainatruntime.
答案:
D
考点:
异常的抛出、捕获和处理
说明:
本题test方法已经在内部把异常处理,该异常没有被抛给main方法。
Question11
Givenamethodthatmustensuethatitsparameterisnotnull:
11.publicvoidsomeMethod(Objectvalue){
12.//checkfornullvalue
....
20.System.out.println(value.getClass());
21.}
What,insertedatline12,istheappropriatewaytohandleanull
value?
A.assertvalue==null;
B.assertvaluenull,valueisnull!
C.if(value==null){
thrownewAssertionException(“valueisnull!
”)
D.if(value==null){
thrownewIllegalArgumentException(“valueisnull”)
答案:
D
考点:
常见异常类的使用
Question12
ClicktheExhibitbutton.
10.publicclassClassA{
11.publicvoidmethodA(){
12.ClassBclassB=newClassB();
13.classB.getValue();
14.}
15.}
And:
20.classClassB{
21.publicClassCclassC;
22.
23.publicStringgetValue(){
24.returnclassC.getValue();
25.}
26.}
And:
30.classClassC{
31.publicStringvalue;
32.
33.publicStringgetValue(){
34.value=“ClassB”;
35.returnvalue;
36.}
37.}
Given:
ClassAa=newClassA();
a.methodA();
Whatistheresult?
A.Compilationfails.
B.ClassCisdisplayed.
C.Thecoderunswithnooutput.
D.Anexceptionisthrownatruntime.
答案:
D
考点:
常见异常的识别 (NullpinterException)
说明:
第24行,对classC的getValue方法调用,由于classC的实例不存在,所以无法运行。
抛出异常,这种情况只有在运行的时候才知道,不会认为是编译错误。
Question13
Given:
10.publicclassFoo{
11.staticint[]a;
12.static{a[0]=2;}
13.publicstaticvoidmain(String[]args){}
14.}
Whichexceptionorerrorwillbethrownwhenaprogrammerattempts
torunthiscode?
A.java.lang.StackOverflowError
B.java.lang.IllegalStateException
C.java.lang.ExceptionlnlnitializerError
D.java.lang.ArraylndexOutOfBoundsException
答案:
C
考点:
静态块以及常见异常的识别
说明:
在静态块中,对a进行了调用,但a没有指向任何对象,所以抛出NullpinterException,但由于是发生在静态块中,所以系统最终抛出了ExceptionlnlnitializerError
Question14
Given:
10.publicclassClassA{
11.publicvoidcount(inti){
12.count(++i);
13.}
14.}
And:
20.ClassAa=newClassA();
21.a.count(3);
Whichexceptionorerrorshouldbethrownbythevirtualmachine?
A.StackOverflowError
B.NullPointerException
C.NumberFormatException
D.IllegalArgumentException
E.ExceptionlnlnitializerError
答案:
A
考点:
递归调用理解、堆栈的运作模式
说明:
此处count方法产生无穷递归调用,最终导致堆栈空间溢出。
Question15
Given:
1.publicclassBoxer1{
2.Integeri;
3.intx;
4.publicBoxer1(inty){
5.x=i+y;
6.System.out.println(x);
7.}
8.publicstaticvoidmain(String[]args){
9.newBoxer1(newInteger(4));
10.}
11.}
Whatistheresult?
A.Thevalue4isprintedatthecommandline
B.Compilationfailsbecauseofanerrorinline5.
C.Compi