还剩25页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
北润JAVA考核-面向对象第一部分英语测试(每题分,共分)第二部分知识点测试(分)
一、选择题(每题2分,共110分)1.下面关于变量及其作用范围的陈述哪个是不对的(B)A.实例变量是类的成员变量B.实例变量用关键字static声明C.在方法中定义的局部变量在该方法被执行时创建D.局部变量在使用前必须被初始化2.下面哪条语句把方法声明为抽象的公共方法(B)A.publicabstractmethod;B.publicabstractvoidmethod;C.publicabstractvoidmethod{}D.publicvoidmethodextendsabstract;3.若在某一个类定义中定义有如下的方法finalvoidaFinalFunction{}则该方法属于(C)A、本地方法B、静态方法C、最终方法D、抽象方法4.main方法是JavaApplication程序执行的入口点,关于main方法的方法头以下哪项是合法的(B)A、publicstaticvoidmainB、publicstaticvoidmainString[]argsC、publicstaticintmainString[]argsD、publicvoidmainStringarg[]5.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同这种面向对象程序的特性称为(C)A、隐藏B、覆盖C、重载D、Java不支持此特性6.下列关于构造方法的叙述中,错误的是(C)A.Java语言规定构造方法名与类名必须相同B.Java语言规定构造方法没有返回值,但不用void声明C.Java语言规定构造方法不可以重载D.Java语言规定构造方法只能通过new自动调用7.关于被私有访问控制符private修饰的成员变量,以下说法正确的是(C)A.可以被三种类所引用该类自身、与它在同一个包中的其他类、在其他包中的该类的子类B.可以被两种类访问和引用该类本身、该类的所有子类C.只能被该类自身所访问和修改D.只能被同一个包中的类访问8.类Test1定义如下
1.publicclassTest1{2.publicfloataMethodfloatafloatb{}3.4.}将以下哪种方法插入行3是不合法的(B)A、publicfloataMethod(floatafloatbfloatc){}B、publicfloataMethod(floatcfloatd){}C、publicintaMethod(intaintb){}D、privatefloataMethod(intaintbintc){}9.阅读以下代码publicclassfoo{publicstaticvoidmainString[]args{Strings;System.out.printlns=+s;}}输出结果应该是(C )A.代码得到编译,并输出“s=”B.代码得到编译,并输出“s=null”C.由于Strings没有初始化,代码不能编译通过D.代码得到编译,但捕获NullPointException异常解析局部变量必须显示的初始化引用类型变量初始化时如果没有具体对象引用,可以初始化为null10.下述概念中不属于面向对象这种编程范畴的是DA.对象、消息 B.继承、多态C.类、封装 D.过程调用11.编译并运行以下程序,以下描述哪个选项是正确的A
1.classA{
2.protectedStringtoString{
3.returnsuper.toString;}
4.}A、行2出错,不能成功编译B、编译通过但运行时出错C、编译通过运行无异常D、不能成功编译,行3出错解析方法重写时没有满足访问权限控制符要比父类的大或者相同12.假设Foo类有如下定义,设f是Foo类的一个实例,下列语句调用哪个是错误的?ApublicclassFoo{inti;staticStrings;voidimethod{}staticvoidsmethod{}}A、Foo.imethod;B、f.imethod;C、System.out.printlnf.i;D、Foo.smethod13.以下哪个接口的定义是正确的?DA、interfaceA{voidprint{};}B、abstractinterfaceA{voidprint;}C、abstractinterfaceAextendsI1I2//I
1、I2为已定义的接口{abstractvoidprint{};}D、interfaceA{voidprint;}解析接口定义时语法规定上是不需要加abstract的,因为接口本身就是abstract的,java编译器在编译接口时会自动加上abstract但是我们显示的加上abstract是不会出现问题,不建议加此处选项B和C可以认为不正确14.关于以下程序段,正确的说法是C1. String s1=“a”+“b”;2. String s2=new String(s1);3. if(s1==s2)4. System.out.println“== issucceeded”;5. ifs
1.equalss26. System.out.println“.equalsissucceeded”;A.行4与行6都将执行 B.行4执行,行6不执行C.行6执行,行4不执行 D.行
4、行6都不执行15.下面程序运行结果为(D如果输出count则为A)publicclasstest3{publicstaticvoidmainStringargs[]{intcount=0; forinti=0;i=100;i++ count+=count++; }}A0 B7 C编译有错误 D其他答案16.下面哪个函数是public void aMethod{...}的重载函数?(D)A、void aMethod {...}B、public int aMethod{...}C、public void aMethod{...}D、public int aMethod int m{...}17.下面关于继承的哪些叙述是正确的DA.在java中允许多继承B. 在java中一个类只能实现一个接口C. 在java中一个类不能同时继承一个类和实现一个接口D. java的单一继承使代码更可靠18.运行下面程序段的结果是DpublicclassMyMain{publicstaticvoidmainStringargs{System.out.println“HelloJava”;}}A.正常输出HelloJavaB.编译时出错C.运行时出错D.以上答案都不对19.类与对象的关系是AA.类是对象的抽象B.类是对象的具体实例C.对象是类的抽象D.对象是类的子类20.下列关于修饰符混用的说法,错误的是BDA.abstract不能与final并列修饰同一个类B.abstract类中不可以有private的成员C.abstract方法必须在abstract类中D.static方法中能处理非static的属性解析abstract类中可以有private的成员,只是它的private成员不能被继承,所以在abstract类中定义private成员没有意义21.编译并运行下述程序段的结果是BpublicclassTest{publicstaticvoidmainStringargv[]{int[]count=newint
[4];System.out.printlncount
[4];}}A.编译时错误B.运行时错误C.输出0D.输出null22.下面是有关子类继承父类构造函数的描述,其中正确的是CDA.创建子类的对象时先调用子类自己的构造函数,然后调用父类的构造函数B.子类无条件地继承父类不含参数的构造函数C.子类必须通过super关键字调用父类的构造函数D.子类无法继承父类的构造函数解析子类无法继承父类的构造器,但有时候可以使用super调用父类构造器中的初始化代码在继承关系中一定要确保构造器的上溯链不得中断,否则会出错23.下列类的定义中,错误的是BA.classx{....}B.publicxextendsy{....}C.publicclassxextendsy{....}D.classxextendsyimplementsy1{....}24.A派生出子类B ,B派生出子类C,并且在Java源代码中有如下声明
1.Aa0=newA;
2.Aa1=newB;
3.Aa2=newC;问以下哪个说法是正确的?(D)A.只有第1行能通过编译B.第
1、2行能通过编译,但第3行编译出错C.第
1、
2、3行能通过编译,但第
2、3行运行时出错D.第1行、第2行和第3行的声明都是正确的25.运行下列程序的结果是CabstractclassMineBase{abstractvoidamethod;staticinti;}publicclassMineextendsMineBase{publicstaticvoidmainStringargv[]{int[]ar=newint
[5];fori=0;iar.length;i++{System.out.printlnar[i];}}}A.打印5个0 B.编译出错,数组ar[]必须初始化C.编译出错,Mine应声明为abstract D.出现IndexOutOfBoundes的例外26.编译并运行以下程序段的结果是(A)publicclassMyClass{finalstaticinti;MyClass{i=0;}publicstaticvoidmainStringargs[]{System.out.printlni;}}A.编译出错B.nullC.1D.0解析final修饰的成员变量(静态成员原理和实例成员变量)必须显示初始化静态成员变量可以在声明时或静态初始化代码块显示初始化;实例成员变量可以在声明时、初始化代码块或构造器中显示初始化27.下面方法中的“返回类型Type”应该是什么?ApublicclassReturnIt{returnTypemethodAbytexdoubley{returnshortx/y*2;}}A.doubleB.intC.byteD.short28.下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的(C)A、publicB、privateC、staticD、final29.下面关于java中类的说法哪个是不正确的(AC)A.类体中只能有变量定义和成员方法的定义,不能有其他语句B.构造函数是类中的特殊方法C.类一定要声明为public的,才可以执行D.一个java文件中可以有多个class定义30.下列哪个类声明是正确的DA.abstractfinalclassH1{…}B.abstractprivatemove{…}C.protectedprivatenumber;D.publicabstractclassCar{…}31.方法重载是指AA.两个或两个以上的方法取相同的方法名,但形参的个数或类型不同B.两个以上的方法取相同的名字和具有相同的参数个数,但形参的类型可以不同C.两个以上的方法名字不同,但形参的个数或类型相同D.两个以上的方法取相同的方法名,并且方法的返回类型相同32.指出下列程序运行的结果BpublicclassExample{ Stringstr=newStringgood; char[]ch={abc}; publicstaticvoidmainStringargs[]{ Exampleex=newExample; ex.changeex.strex.ch; System.out.printex.str+and; Sytem.out.printex.ch; } publicvoidchangeStringstrcharch[]{ str=testok; ch
[0]=g; }}A.goodandabcB.goodandgbcC.testokandabcD.testokandgbc33.下列哪些语句关于内存回收的说明是正确的BA.程序员必须创建一个线程来释放内存B.内存回收程序负责释放无用内存C.内存回收程序允许程序员直接释放内存D.内存回收程序可以在指定的时间释放内存对象34.MAX_LENGTH是int型public成员变量变量值保持为常量100,用简短语句定义这个变量CDA、publicintMAX_LENGTH=100;B、finalintMAX_LENGTH=100;C、finalpublicintMAX_LENGTH=100;D、publicfinalintMAX_LENGTH=100;35.给出下面代码1classParent{ 2}privateStringname; 3}publicParent{} 4}} 5publicclassChildextendsParent{ 6}privateStringdepartment; 7}publicChild{} 8}publicStringgetValue{returnname;} 9}publicstaticvoidmainStringarg[]{ 10}Parentp=newParent; 11}} 12}}那些行将引起错误?DA、第3行B、第6行C、第7行D、第8行36.类Teacher和Student是类Person的子类; Personp; Teachert; Students; //ptandsareallnon-null. iftinstanceofPerson{s=Studentt;}最后一句语句的结果是BA、将构造一个Student对象;B、表达式是合法的;C、表达式是错误的;D、编译时正确,但运行时错误解析考查instanceof和继承中的强制转换tinstanceofPerson表达式是正确的s=Studentt;这句转换编译是错误的37.给出下面代码段1publicclassTest{ 2intmn; 3publicTest{} 4publicTestinta{m=a;} 5publicstaticvoidmainStringarg[]{ 6Testt1t2; 7intjk; 8j=0;k=0; 9t1=newTest; 10t2=newTestjk; 11} 12} 哪行将引起一个编译时错误?DA、line3B、line5C、line6D、line1038.对于下列代码1classPerson{ 2publicvoidprintValueintiintj{//...} 3publicvoidprintValueinti{//...} 4} 5publicclassTeacherextendsPerson{ 6publicvoidprintValue{//...} 7publicvoidprintValueinti{//...} 8publicstaticvoidmainStringargs[]{ 9Persont=newTeacher; 10t.printValue10; 11} 第10行语句将调用哪行语句?DA、line2B、line3C、line6D、line739.System类在哪个包中DA、java.utilB、java.ioC、java.awtD、java.lang40.对于下列代码publicclassParent{ publicintaddValueintaintb{ ints; s=a+b; returns; } } classChildextendsParent{ }下述哪些方法可以加入类ChildCDA、intaddValueintaintb{//dosomething...}B、publicvoidaddValueintaintb{//dosomething...}C、publicintaddValueinta{//dosomething...}D、publicintaddValueintaintbthrowsMyException{//dosomething...}解析A选项不符合一大;B选项返回值类型不匹配;C选项为自己的方法;D选项异常更明确41.看下面一段程序classAclass{ voidgo{ System.out.printlnAclass; } } publicclassBclassextendsAclass{ voidgo{ System.out.printlnBclass; } publicstaticvoidmainStringargs[]{ Aclassa=newAclass; Aclassa1=newBclass; a.go; a
1.go; }以上程序运行结果是CA、AclassAclassB、BclassBclassC、AclassBclassD、BclassAclass42.运行下列程序,会产生什么结果B classOuter1{ privateinta; voidfoodoubledfinalfloatf{ Strings; finalbooleanb; classInner{ voidmethodInner{ System.out.printlnintheInner; } } } publicstaticvoidmainStringargs[]{ Outer1me=newOuter1; me.foo123123; System.out.printlnouter; } }A、intheInnerouterB、outerC、intheInnerD、编译不通过43.下面哪个修饰符修饰的方法只能被本类中的其他方法使用(C)A、protectedB、staticC、privateD、public44.下面程序运行后的输出结果为(C)classA{staticinty=3;voidshowy{System.out.println“y=”+y;}}classtestA{publicstaticvoidmainStringaaa[]{Aa1=newA;A.y+=1;a
1.y++;a
1.showy;}}输出结果选择A、y=3;B、y=4;C、y=5;D、程序运行出错45.下面关于构造函数的说法不正确的是(B)A、构造函数也属于类的方法,用于创建对象的时候给成员变量赋值B、构造函数不可以重载C、构造函数没有返回值D、构造函数名称一定要和类名相同46.给出如下代码:classTest{ privateintm; publicstaticvoidfun{ //somecode... }}如何使成员变量m被函数fun直接访问CA、将privateintm改为protectedintmB、将privateintm改为publicintmC、将privateintm改为staticintmD、将privateintm改为intm47.为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为AA.staticvoidmethodB.publicvoidmethodC.finalvoidmethodD.abstractvoidmethod48.如果类中的成员变量可以被同一包访问,则使用如下哪个约束符DA、privateB、publicC、protectedD、nomodifier49.构造方法何时被调用BA.类定义时B.创建对象时C.调用对象方法时D.使用对象的变量时50.如果任何包中的子类都能访问超类中的成员,那么应使用哪个限定词CA.publicB.privateC.protectedD.transient51.Java变量中,以下不属于复合类型的数据类型是BA.类B.字符型C.数组型D.接口52.对象使用时,下面描述错误的是BA.通过“.”运算符调用成员变量和方法B.通过成员变量的访问权限设定限制自身对这些变量方法的调用C.将一个对象申明为类的成员时,必须在使用前为其分配内存D.在方法中使用对象作为参数时,采用引用调用也解释的通,但一定要了解实质为值调用53.Java编程所必须的默认引用包为BA.java.sys包B.java.lang包C.java.new包D.以上都不是54.定义一个类名为“MyClass.java”的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明应为CA.privateclassMyClassextendsObjectB.classMyClassextendsObjectC.publicclassMyClassD.privateclassMyClassextendsObject55.内部类是在一个类内嵌套定义的类其特点描述错误的是AA.只能在定义它的类或程序段中或表达式内匿名使用,外部使用时必须给出类的全名B.可以使用它所在类的静态成员变量或实例成员变量,但不可以使用所在类中的局部变量后半句可对可错,看怎么理解C.可以作为其它类的成员,而且可访问它所在类的成员D.除static内部类外,不能在类内声明static成员
二、填空题(每空
0.5分,共
26.5分)
1、在类声明中提供类标志的关键字是class
2、当一个方法中有多个参数时参数之间是用英文逗号隔开
3、在Java中使用变量遵守先声明后使用先定义后使用的原则
4、比较两个字符串是否相同采用equals方法
5、抽象方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义
6、包定义时,需使用关键字package来实现创建一个名为MyPackage的包的语句是packageMyPackage;要使用包中的类,必须用关键字import导入这些类所在的包当要引用包中所有的类时,类名可以用通配符*号代替
7、对象是由一组属性和对这组属性进行操作的一组服务组成的对象是指具体的事物而类是指一类具有某种共性的事物由类来确定具体对象的过程称为实例化
8、对一类对象的抽象则是类而类的实例化结果是对象一个类是由类声明和类体两部分组成类修饰符有3种它们分别是public、abstract和final
8、抽象类不能被实例化它不具备实际功能只用于衍生子类抽象方法是只有方法声明没有代码实现的空方法
9、当一个类的类修饰符为final时说明该类不能被继承即不能有子类
10、Java用extends关键字指明继承关系一个类要从另一个类继承变量和方法,必须使用关键字extendsJava程序在extends之后只能有一个父类即extends只能实现单继承在Java中只能实现单继承Java不支持多重继承但可通过接口实现多重继承
11、要在类声明中实现接口需使用关键字implements一个类可实现多个接口各接口名是以英文逗号分隔
12、在Java中变量分为成员变量和局部变量在类体中声明的变量称为成员变量在方法中声明的变量称为局部变量成员变量在整个类体中有效而局部变量只在定义它的方法内有效如果局部变量名与成员变量名相同则成员变量被屏蔽
13、在Java程序中,使用关键字this来引用当前对象Java中通过关键字super来实现对父类成员的访问
14、一个方法的定义是有方法声明和方法体两部分组成方法声明包括方法名、返回类型和形式参数一个方法的标志是圆括号
15、构造方法的方法名要求与类名相同而且无返回值构造方法只能通过new运算符调用用户不能直接调用
16、方法重载是指多个方法享有相同的名字但这些方法的参数必须不同或者是参数的个数不同或者是参数类型不同
17、一个对象的生命周期包括3个阶段创建、使用和释放(消亡)
18、对象通过使用运算符“.”实现对自己的变量访问
19、面向对象的3个特性是封装性、继承性和多态性在Java中,通过对象的封装,实现了模块化和信息隐藏
20、两个方法具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同,则称为重写
21、Java中成员方法可分成两种类方法和实例方法用关键字static修饰的方法就称为类方法实例方法可对当前对象的实例变量进行操作,也可对类变量进行操作实例方法不但可以访问实例变量,也可以访问类变量类方法不能访问实例变量,只能访问类变量
22、在Java中,用关键字abstract来修饰一个类,则该类为抽象类若某个类包含了抽象方法,则该类必须被定义为抽象类
23、接口的定义,需使用关键字interface来声明接口中没有什么实例方法,所有的成员方法都是publicabstract方法
24、声明父类时,需使用关键字extends来实现由于Java的继承性,所以子类的成员数目比父类的成员数目多
三、简答题(每题5分,共60分)第一步理解考核知识点和考核的目的第二步背下来,记忆清晰准确第三步能把知识点用自己的话准确的描述出来
1、super与this的区别?解答this为当前类的对象的引用所有资源都可以访问super为父类对象的引用,在子类访问父类的成员和行为时使用必须受类继承规则的约束在构造函数中如果第一行没有写super编译器会自动插入但是如果父类没有不带参数的构造函数或这个函数被私有化了用private修饰此时你必须加入对父类的实例化构造而this就没有这个要求因为它本身就进行实例化的构造而在方法中super和this使用的方法就差不多了只不过super要考虑是否能访问其父类的资源
2、请列举Java语言中的权限访问修饰符,并说明每种权限的含义解答正确使用权限访问修饰符,能够有效控制类以及类成员的安全性,Java语言中有四种访问修饰符,包括public、同包、protected以及private,一般情况下,应用中的类多是public权限,属性多是private权限,方法多是public权限参考答案Java语言中有四种权限访问修饰符,即public、protected、同包以及privatepublic表示公共权限,即任何包中都可以访问;protected表示受保护权限,即同包中可以访问,同包中的子类可以访问同包权限是默认权限,即不显示指明权限修饰符的时候就是同包权限,表示只有同包中可以访问;private是私有权限,表示只能在本类中访问
3、java中实现多态的机制是什么?解答静态的多态:方法名相同,参数个数或类型不相同overloading动态的多态:子类覆盖父类的方法,将子类的实例传与父类的引用,调用的是子类的方法;实现接口的实例传与接口的引用,调用的实现类的方法
4、abstractclass和interface的区别解答
(1)抽象类通过extends继承,只能继承一个抽象类;接口通过implements使用,可以实现多个接口
(2)抽象类可以有部分实现,抽象类和接口都不能创建实例声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况不能创建abstract类的实例然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例不能有抽象构造函数或抽象静态方法Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为取而代之,在子类中实现该方法知道其行为的其它类可以在类中实现这些方法接口(interface)是抽象类的变体在接口中,所有方法都是抽象的多继承性可通过实现这样的接口而获得接口中的所有方法都是抽象的,没有一个有程序体接口只可以定义staticfinal成员变量接口的实现与子类相似,除了该实现类不能从接口定义中继承行为当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法然后,它可以在实现了该接口的类的任何对象上调用接口的方法由于有抽象类,它允许使用接口名作为引用变量的类型通常的动态联编将生效引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口
5、静态变量和实例变量的区别?是否可以从一个static方法内部发出对非static方法的调用并说明理由?解答
(1)声明时静态变量用static修饰,静态变量属于整个类,被该类的所用实例对象所共有实例变量属于该类的某个对象,拥有自己的特征
(2)静态变量在类加载初始化的时候分配内存并初始化,实例变量在由该类实例化对象时进行分配内存并初始化
(3)调用方法不同静态方法可以调用静态变量,不可调用实例变量实例方法可以调用静态变量、实例变量不可以从一个static方法内部发出对非static方法的调用,因为static方法属于整个类,实例方法得由该类的某个对象来调用当调用包含非static方法的static方法时,该类不确定是否存在实例化对象,所以在static方法内调用非static方法时将出现错误鉴于此道理不可以,编译阶段就会提示该调用的错误不可以如果其中包含对象的method,不能保证该对象初始化.
6、说说你说知道的设计模式解答单例模式、工厂模式和命令模式
7、AnonymousInnerClass匿名内部类是否可以extends继承其它类,是否可以implements实现interface接口、解答匿名内部类可以继承其他类或完成其他接口
8、StaticNestedClass和InnerClass的不同,说得越多越好解答
(1)StaticNestedClass是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化而通常的内部类需要在外部类实例化后才能实例化Static内部类可以包含static成员;普通内部类不可以
9、什么是方法重载(overload)?什么是方法的重写(Override)?Overload和Override的区别Overloaded的方法是否可以改变返回值的类型解答方法重载如果在一个类中定义了多个同名的、相同返回值类型的方法,它们或有不同的参数个数或有不同的参数类型不同的形参列表,则称为方法的重载Overloading方法重写如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写Overriding子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了区别方法的重写Overriding和重载Overloading是Java多态性的不同表现重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现Overloaded的方法是可以改变返回值的类型和权限修饰符如果父类定义方法A,子类要重写方法A,则子类不能使用其它返回类型,必须使用父类一致的返回类型或比父类返回类型小另外解析重载如果一个类的某个行为,会有不同的算法和逻辑,例如,Math类的计算绝对值的方法,既可以计算int类型数值的绝对值,也可以计算double类型数值的绝对值这种情况下,每种类型都定义一个不同的方法名,如abInt、absDouble,那么类的可读性就较差,使用时,必须熟悉处理每种类型参数所对应的方法名然而,如果使用同一个方法名,而使用不同的形式参数来区别这些方法,那么就具有很好的可读性,如abs(inti)、abs(doubled)等可读性强的代码是企业对开发人员的基本要求,方法重载能够使得代码有很好的可读性方法重载指的是在一个类中可以声明多个相同名字的方法,而方法的形式参数有区别调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法
10、构造器Constructor是否可被override解答构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload
11、是否可以继承String类,并说明理由String类是一个“不可变类”,请解释“不可变类”的含义解答不可以,因为String类是final类故不可以继承解析不可变类String类是一个不可变类,即immutable类所谓不可变,意思是当一个字符串被初始化后,它的值就不会被改变例如,Strings=newString(“hello”)为将初始化一个值为hello的字符串,如果调用s.toUpperCase看起来是把hello变为大写的HELLO,然而事实上并不会把已有的hello变为HELLO,而是在新的空间初始化一个HELLO字符串也正因为有这种不可变性,所以才能支持“字符串实例池”的使用参考答案所谓的不可变类,就是当字符串初始化后,就不能够被改变
12、请说明Java语言中的值传递规则当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递第一问解析值传递时编写应用时不可避免的操作例如某方法声明形式是publicvoidfintx{},写方法是,必须为其传递一个int类型的实际参数,如f10又如publicvoidgEmployee那么使用该方法时,必须为其传递一个Employee类型的实际参数,例如gnewEmployee所以,对于初级程序员来说,了解Java语言的值传递规则非常重要Java语言是本类型传递的值,例如f10,仅仅把10复制给形式参数x,是值的拷贝而引用类的传递时引用,即虚地址,例如gnewEmployee是把实际参数的虚地址传递给形式参数e,也就是说实际参数和形式参数的虚地址相同,物理上是同一个对象第一问解答基本数据类型传递的是值,引用类型传递的是引用,即虚地址第二问解答是值传递Java编程语言只有值传递参数当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
四、程序题(每题5分,共25分)
1、补足代码定义一个抽象类AbstractTest,其中有一个公共的抽象方法printMsg然后定义此抽象类的一个子类DefaultTest,包括的成员变量有姓名,学号,分数,且此类中包括二个构造方法abstractclassAbstractTest{1}2{Stringname;Stringid;intscore;//接收三个参数的构造方法3//接收姓名和学号二个参数的构造方法4//实现抽象方法,方法体为打印出学生的姓名与成绩5}答案abstractclassAbstractTest{//抽象方法定义publicabstractvoidprintMsg;}publicclassDefaultTestextendsAbstractTest{Stringname;Stringid;intscore;/***接收三个参数的构造方法*/publicDefaultTestStringnameStringidintscore{this.name=name;this.id=id;this.score=score;}/***接收姓名和学号两个参数的构造方法*/publicDefaultTestStringnameStringid{this.name=name;this.id=id;}/***实现抽象方法,方法体为打印出学生的姓名与成绩*/publicvoidprintMsg{System.out.println学生+this.name+的成绩为+this.score;}}
2、补足代码定义接口Student,该接口中有一个无参、无返回值的方法prtMsg;定义类College,包括的私有属性有id和name,包括一个接收学生学号和姓名的构造方法,并且实现Student接口interfaceStudent{1}2//College类的声明,实现Student接口{3//定义私有成员变量id和name,类型自定4//构造方法声明和定义,接收二个参数5//实现prtMsg方法的声明{//prtMsg的方法体System.out.printlnid+name;}}答案interfaceStudent{voidprtMst;}publicclassCollegeimplementsStudent{//定义私有成员变量id和name,类型自定privateStringname;privateStringid;/***构造方法声明和定义,接收二个参数*/publicCollegeStringnameStringid{this.name=name;this.id=id;}/***实现prtMsg方法的声明*/publicvoidprtMst{//prtMsg的方法体System.out.printlnid+name;}}
3、改正下面程序段中的错误(共5处)publicclassStudent{Stringid;Stringname;intsalary;publicvoidTestStringidStringnameintsalary{//1意图为该方法为构造方法,需去掉返回值,并改正方法名this.id=id;this.name=name;this.salary=salary;}publicvoidchangeInfoStringidintsalary{//2返回值改为booleanbooleanresult;ifid==this.id{//3==改为equals方法this.salary=salary;result=TRUE;//4:改为true}else{result=false;}returnresult;}publicbooleanchangeInfoStringidsintsalarys{//5方法重复定义,并不是重载……}}
4、写一个Singleton出来解答解析Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在它必须自行创建这个唯一的实例,必须自行向整个系统提供这个实例使用单例模式的一个必要条件在一个系统中要求只有一个类的实例时应当使用单例模式,反过来说如果一个类可以有几个实例共存,那么就没有必要使用单例类一般Singleton模式通常有以下几种形式
(1)第一种形式-饿汉式单例类定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例化,通过一个public的getInstance方法获取对它的引用继而调用其中的方法publicclassSingleton{//在自己内部定义自己一个实例,是不是很奇怪?privatestaticSingletoninstance=newSingleton;//注意这是private只供内部调用privateSingleton{}//这里提供了一个供外部访问本class的静态方法,可以直接访问publicstaticSingletongetInstance{returninstance;}}
(2)第二种形式-懒汉式单例类第一次调用才初始化publicclassGoodSingleton{//在自己内部定义自己一个实例,是不是很奇怪?privatestaticGoodSingletoninstance=null;//注意这是private只供内部调用privateGoodSingleton{}//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 //使用时生成实例,提高了效率publicstaticsynchronizedGoodSingletongetInstance{ifinstance==null{returnnewGoodSingleton;}else{returninstance;}}}//懒汉式的另一种改进publicclassGoodSingleton{//在自己内部定义自己一个实例,是不是很奇怪?privatevolatilestaticGoodSingletoninstance;//注意这是private只供内部调用privateGoodSingleton{}//两次检查publicstaticGoodSingletongetInstance1{ifinstance==null{synchronizedGoodSingleton.class{ifinstance==null{instance=newGoodSingleton;}}}returninstance;}}
(3)登记式单例类为了克服饿汉式和懒汉式单例类不可继承的缺点而设计的
5、补足代码packagelianxi;interfaceInterface{voidmethod;}classTest{//补上代码,通过匿名内部类}publicclassLianxi{publicstaticvoidmainString[]args{Test.function.method;}}答案interfaceInterface{voidmethod;}classTest{publicstaticInterfacefunction{//补上代码,通过匿名内部类returnnewInterface{publicvoidmethod{System.out.printlnHelloBeirun!;}};}}publicclassLianxi{publicstaticvoidmainString[]args{//解析读懂本句代码是解题关键Test.function.method;}}。