Java程序设计第六章static、final和常量设计选择题及答案.docx
一、单选题Is有如下类定义:publicclassCIassAndVariabIesfpublicstaticitx=8;publicity=9;)执行如下代码:CIassAndVariabIesa=newClassAndVariabIesO;CIassAndVariabIesb=newClassAndVariabIesO;a.y=5;b.y=6;a.x=1;b.x=2;则a.y,b.yla.x,b,x的值分别为:A.5,6,1,2B.6,6,1,2C.5,6,2,2D.6,6,2,2正确答案:C2、请阅读以下程序,并写出结果publicclassArgumentPassingpublicstaticvoidchageValue(inta)a=10;)publicstaticvoidchageVale(Stringsl)si="def"publicstaticvoidchageValue(StringBuffersi)sl.apped("def");)publicstaticvoidmai(Stringargs)ita=5;Stringb="abc"StringBufferc=newStringBuffer("abc");chageValue(a);chageVale(b);chageValue(c);System.out.prit(a);System.out.prit(b);System.out.prit(c);)A.5abcabcBlOabcabcClOdefdefD.5abcabcdef正确答案:D3、下列关于构造方法的叙述中,错误的是AJava语言规定构造方法名与类名必须相同BjaVa语言规定构造方法没有返回值,但不用Void声明CJava语言规定构造方法不可以重载DJava语言规定构造方法只能通过new自动调用正确答案:C4、关于以下程序段,正确的说法是()。Stringsl="abc"+"def"/1Strings2=newString(sl);/2if(sl=s2)/3System.out.pritln("=succeeded");/4if(sl.equals(s2)/5System.ot.printl(".eqals()succeeded");/6A.行4与行6都将执行B.行4执行,行6不执行C.行6执行,行4不执行D.行4、行6都不执行正确答案:C5、请阅读以下程序,并写成结果。classFather(publicvoidhello()(System.out.pritln("Fathersayshello.");)publicclassChildextendsFather(publicvoidhello()(System.out.pritln(',Childsayshello");)publicstaticvoidmai(Striga)Childfoo=newChild();/foo.hello();Fatherfoo2=(Father)foo;/foo2,helloO;Childfoo3=(Child)foo2;/foo3.hello();System.ot.pritl(foo=foo2);System.ot.pritl(foo=foo3);)A.truetrueB.truefalseC.falsetrueD.falsefalse正确答案:A6、运行如下程序,输出结果是()。StringBufferSb=newStringBufferCgoodmorning!");Stringsub=sb.substrig(O,8);System.out.pritln(sub);System.out.prit(,7");charc=sb.charAt(6);System.out.pritln(c);A.goodmor/oB.goodrornoC.goodmornrD.goodroro正确答案:A7、如下所示的TeSt类的JaVa程序中,共有几个构造方法()。publicclassTestprivateintx;publicTest()publicvoidTest(inti)this.x=i;)publicTest(Stringstr)A.0B.lC.2D.3正确答案:C8、下面代码的运行结果为:()publicclassFoostaticStrings;publicstaticvoidmain(Stringargs)System.out.printl("s="+s);)A.代码得到编译,并输出“s二”B.代码得到编译,并输出“s=nulC.由于StringS没有初始化,代码不能编译通过D.代码得到编译,但捕获到NullPointException异常正确答案:B9、已知如下代码:()publicclassTest(publicstaticvoidmain(Stringarg)(inti=5;doSystem.out.prit(i);while(-i>5);System.out.print("finished");执行后的输出是什么?A.5finishedB.4C.60,finished正确答案:A10、Given:abstractclassBarpublicintgetNum()return38;)publicabstractclassAbstractTestpublicintgetNum()return45;)publicstaticvoidmain(Stringargs)AbstractTestt=newAbstractTestQpublicintgetNum()return22;);Barf=newBarQpublicintgetNum()return57;);System.out.pritln(f.getNum()+""÷t.getNum();)Whatistheresult?A.5722B.4538C.4557D.Aexceptionoccurs正确答案:AIlxpublicclassChildextendsPeoplePeoplefather;publicChild(Strigname)System.out.prit(3);this.ame=name;father=newPeople(ame+":F");publicChild()System.out.prit(4);)publicstaticvoidmai(Stringargs)newChild(',Alice");)classPeopleStringname;publicPeople()System.out.prit(l);)publicPeople(Stringname)System.out.prit(2);this.ame=name;)A.32B.132C.123D.1234正确答案:B12、现有:classGuyStringgreet()return"hi")classCowboyextendsGuyStringgreet()return"howdy")classWranglerextendsCowboyStringgreet()return"ouch!)classGreetigs2publicstaticvoidmain(String口args)Guyg=newWragler();Guyg2=newCowboy();Wranglerw2=newWragler();System.out.prit(g.greet()÷g2.greet()+w2.greet0);)结果是什么?A.hihiouch!B.ouch!howdyouch!C.hihowdyouch!D.编译失败正确答案:B13、现有:classTreeprivatestaticStringtree="tree"StringgetTree()returntree;)publicclass日mextendsTreeprivatestaticStringtree="elm"publicstaticvoidmain(Strigargs)new日m().go(newTree();)voidgo(Treet)StringS=t.getTree()+日m.tree+tree+(new曰m().getTree();System.out.pritln(s);)A.elmelmelmelmB.treeelmelmelmC.treeelmelmtreeD.treeelmtreeelm正确答案:C14、接口是JaVa面向对象的实现机制之一,以下说法正确的是:()AjaVa支持多重继承,一个类可以实现多个接口BjaVa只支持单重继承,一个类可以实现多个接口CJava只支持单重继承,一个类只可以实现一个接口DJaVa支持多重继承,但一个类只可以实现一个接口正确答案:B15、如果想要一个类不能被任何类继承的话,需要使用哪个关键字来修饰该类?A.abstractB.newC.staticD.final正确答案:D16、classPersonprivateita;publicintchage(itm)returnm;)publicclassTeacherextendsPersonpublicintb;publicstaticvoidmai(Strigarg)Personp=newPerso();Teachert=newTeacher();inti;/pointx)Whicharesyntacticallyvalidstatementat/pointx?A.i二m;B.i=b;C.i=p.a;D.i=p.chage(30);正确答案:D17、请问以下代码的输出是什么:classApublicstaticintX=10;publicstaticvoidpritX()System.out.prit(x);)publicclass日mextendsApublicintX=20;publicstaticvoidmain(Stringargs)Aa=new曰m();pritX();SyStem.out.print(“和");System.out.prit(a.x);)AlO和20B.20和10C.10和10D.20和20正确答案:C18、类Teacher和Student是类Person的子类;Teachert;Students;/1andsareallon-ull.if(tistanceofPerson)s=(Stdent)t;最后一条语句的结果是:A.将构造一个Student对象B.表达式是合法的;C.表达式是错误的;D.编译时正确,但运行时错误。正确答案:C19、下述代码的执行结果是classSuperpublicintgetLength()return4;)publicclassChildextendsSuperpubliclonggetLegth()return5;)publicstaticvoidmain(Strigargs)Supersooper=newSuper();Supersub=newChild();System.out.prit(sooper.getLength()+","÷sb.getLength();)A.2B.4C.编译失败D.6正确答案:C20、下列关于interface的说法正确的是:AJnterface中可以有private方法BJnterface中可以有final方法CJnterface中可以有function实现0.interface可以继承其他interface正确答案:D21、下面关于变量及其范围的陈述哪些是错误的A实例变量是类的成员变量B.实例变量用关键字static声明C在方法中定义的局部变量在该方法被执行时创建D.局部变量在使用前必须被初始化正确答案:B解析:静态成员变量通常也叫做类变量,因为它不从属于任何对象。非静态的成员变量,也叫做实例变量,是从属于某一个具体的对象。所以A是正确的(更严格的表述:实例变量是类的成员变量的一种)。实例变量不能用Static,类变量采用Static。方法中的临时变量是没有初始化的,在使用之前必须初始化。而类成员变量默认是有初始值的。普通基本变量可以参看第三章第二节基本类型视频。对象成员变量默认值是null.22、下列说法错误的是A声明为static的方法可以被重写B.声明为static的方法不可以调用非static变量C.声明为final的方法可以被重写D.声明为final的类不可以被继承正确答案:C解析:声明为final的方法是不能被重写的,只能在参数列表上做修改,形成重载,而非重写。23、以下代码classFinalTestitnum=1;publicstaticvoidmai(Stringargs)finalFinaITestft=newFialTest()lft.num=1002/3System.out.pritl(ft.num)4A.编译通过,但在3处加上ft.num+;后编译报错B.编译通过,但在3处加上ft二newFinaITestQ;后编译报错C.编译不通过,去除1中的final后编译通过D.编译不通过,删除2整行后编译通过正确答案:B解析:ft对象被final了,其内在的值可以被修改,但是ft不能指向新的对象或者内存空间。24、下列代码执行结果是classNumTeststaticitid=1;intid2=1;NumTest(itid,intid2)this.id=id;this.id2=id2;voidpritld()System.out.prit(id+id2+"");publicstaticvoidmai(Stringargs)NumTesta=newNurTest(l,2);NumTestb=newNumTest(2,l);NumTestC=newNumTest(OlO);a.printld();b.pritld();c.pritld();)A.330B.120C.210D.编译报错正确答案:C解析:NUmTeSt.id是一个静态变量,所有的NUmTeSt对象都共享同一个。所以在C对象创建完成后,NumTestJd为0.而每个对象的id2是对立的。所以在每个对象的printld方法上,将0和id2相加再输出。25、以下代码classFinalTestfinalitnum=1;publicstaticvoidmai(Stringargs)finalFinaITestft=newFinaITestQ;/!ft.num=1002/3System.out.pritl(ft.num)4)A.编译通过,但在3处加上ft.um+;后编译报错B.编译通过,但在3处加上ft二newFinaITestQ;后编译报错C.编译不通过,去除1的final后编译通过D.编译不通过,删除2整行后编译通过正确答案:D解析:因为num是基本类型的变量,且被final了,所以不能修改其值,因此选D。26、classNumTestfinalitid=1;itid2二1;NumTest(itid,intid2)this.id=id;this.id2=id2;voidprintld()System.out.prit(id+id2+"");publicstaticvoidmai(Stringargs)NumTesta=newNurTest(l,2);NumTestb=newNumTest(2,l);NumTestC=newNumTest(OlO);a.printld();b.pritld();c.pritld();)A.330B.120C.210D.编译报错正确答案:D解析:因为id是final的基本类型的变量,不能修改其值,所以在构造函数内赋值就会编译错误。27、下列代码执行结果是classNumTestfinalstaticitml=1;staticitnm2=1;voidpritNrl()System.out.prit(numl+"");voidpritNr2()System.out.prit(um2+"");publicstaticvoidmai(Stringargs)NumTesta=newNurTest();a.um2+;a.pritNml();NumTestb=newNumTest();b.pritNum20;)A.l1B.12C.22D.编译报错正确答案:B解析:numl和num2都是static,uml而且是final,无法修改值,所以numl一直保持是1.a.num2和b.num2是同一个,a.um2+j导致um2变成2,因此b.um2也是2了。28、下列代码执行结果是classNumTestfinalstaticitnuml=1;staticitnm2=1;voidpritNrl()System.out.prit(numl+"");voidpritNr2()System.out.prit(num2+"");publicstaticvoidmai(Stringargs)NumTesta=newNurTest();a.numl+;a.pritNm2();NumTestb=newNumTest();b.pritNuml();A.21B.12C.l1D.编译报错正确答案:D解析:因为numl是final的,所以无法执行a.numl+操作。29、以下代码执行结果是classStaticTeststaticSystem.out.prit(,a");)staticSystem.out.prit("b',);)publicstaticvoidmai(Stringargs)StaticTeststl=newChiIdTestQ;classChiIdTestextendsStaticTeststaticSystem.out.prit("c");)A.cabB.abcC.cD.ab正确答案:B解析:执行main函数时,会首先加载StatiCTeSt(因为main函数就在StaticTest类中)。所以将StaticTest的静态块代码按照顺序执行,输出ab.然后执行main函数第一句话,new一个ChildTeSt对象,那就需要加载ChiIdTest类,也把它的所有静态块都执行一遍。在执行ChiIdTest的静态块之前,会将执行ChiIdTest的父类的静态块代码。注意,任意一个类的一个静态块代码在整个生命周期里面只执行一次。30、以下代码执行结果是classStaticTeststaticqe#9qegqe#qe,V:(,JudoLUisXs网SIS3j_。网Sspi×sipqoSSepgueu/I)1s33e1su=ISsajLnes乙uwm # )lud70 LisXsTUeu/I()jsipqou=ZIS网S(s6j6us)!eLp0esqd(q)udoLUisXs:(“e11)1ud0LUisXsC.acb#bD.abc#ab正确答案:C解析:执行main函数时,会首先加载StatiCTeSt(因为main函数就在StaticTest类中)。所以将StaticTest的静态块代码按照顺序执行,输出a.然后执行main函数第一句话,new一个ChiIdTest对象,那就需要加载ChiIdTest类,也把它的所有静态块都执行一遍。在执行ChiIdTest的静态块之前,会将执行ChiIdTest的父类的静态块代码。注意,任意一个类的一个静态块代码在整个生命周期里面只执行一次。/mainl语句再输出c,然后newChiIdTeSt()将调用父类的构造函数和(非静态的)匿名块,再输出b./mai2输出#,/mai3将执行StaticTest的所有静态块和(非静态的)匿名块。由于静态块都执行过了,就剩下(非静态的)匿名块,所以输出bo