JAVA类和对象及数组习题一、选择题(1)下列构造方法的调用方式中,正确的是(D)--原因:在通过new实例化一个类对象时系统会自动调用该类相应的构造方法。A.按照一般方法调用B.由用户直接调用C.只能通过new自动调用D.被系统调用(2)在Java中,能实现多重继承效果的方式是(C)--原因:一个类可以同时实现多个接口。Java接口反映了对象较高层次的抽象,还弥补了Java只支持单继承的不足,可用它来完成多继承的一些功能。A.内部类B.适配器C.接口D.同步(3)int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是(D)—原因:java中定义常量用关键字final来定义。A.publicintMAX_LENGTH=100B.finalintMAX_LENGTH=100C.publicconstintMAX_LENGTH=100D.publicfinalintMAX_LENGTH=100(4)下列叙述中,正确的是(A)—原因:Java严格区分大小写,所以变量number与Number不相同;Java中的注释方式除了“//”行注释之外还有段注释“/*-------*/”和文档注释/**-------*/。Java源文件中的public类只能有一个。A.声明变量时必须指定一个类型B.Java认为变量number与Number相同C.Java中唯一的注释方式是//D.源文件中public类可以有0或多个(5)下列叙述中,错误的是(D)—原因:子类继承父类,并且可以有自己的成员变量和成员方法。所以可以认为子类是父类的扩展。A.父类不能替代子类B.子类能够替代父类C.子类继承父类D.父类包含子类(6)下列代码中,将引起编译错误的行是(B)—原因:定义float型变量并对其初始化时,其值后面要加一个f.1)publicclassExercise{2)publicstaticvoidmain(Stringargs[]){3)floatf=0.0;4)f+=1.0;5)}6)}A.第2行B.第3行C.第4行D.第6行(7)下列关于继承的哪项叙述是正确的?(D)–错误原因:JAVA不允许多重继承,但可以通过接口的机制来达到多重继承的目的;一个类可以同时继承一个类和实现多个接口,但是不能同时继承多个类。A.在java中允许多重继承B.在java中一个类只能实现一个接口C.在java中一个类不能同时继承一个类和实现一个接口D.java的单一继承使代码更可靠(8)下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?(B)–原因:无修饰符时是缺省修饰,它可以被同一包中的任何类访问。A.privateB.无修饰符C.publicD.protected(9)给出下列代码,如何使成员变量m被方法fun()直接访问?(C)–原因:静态的成员方法只能访问静态的成员变量。classTest{privateintm;publicstaticvoidfun(){...}}A.将privateintm改为protectedintmB.将privateintm改为publicintmC.将privateintm改为staticintmD.将privateintm改为intm(10)已知有下列类的说明,则下列哪个语句是正确的?(B)—原因:f是Test类的私有成员变量,在类外不能访问,所以A不对。m是非静态的变量不能直接用类名来访问,所以C不对。由以上两个原因可知D不对。publicclassTest{privatefloatf=1.0f;intm=12;staticintn=1;publicstaticvoidmain(Stringarg[]){Testt=newTest();}}A.t.f;B.this.n;C.Test.m;D.Test.f;(11)给出下列代码,则数组初始化中哪项是不正确的?(A)–原因:array2是一个二维数组,而aray1是一个一维数组。byte[]array1,array2[];bytearray3[][];byte[][]array4;A.array2=array1B.array2=array3C.array2=array4D.array3=array4(12)下列代码的执行结果是(A)–原因:在非静态的方法中不能定义静态的变量且方法aMethod没有返回语句。publicclassTest{publicintaMethod(){staticinti=0;i++;System.out.println(i);}publicstaticvoidmain(Stringargs[]){Testtest=newTest();test.aMethod();}}A.编译错误B.0C.1D.运行成功,但不输出(13)下列关于内部类的说法不正确的是(C)–原因:内部类可以声明为private或protected,还可以声明为abstract或final;A.内部类的类名只能在定义它的类或程序段中或在表达式内部匿名使用B.内部类可以使用它所在类的静态成员变量和实例成员变量C.内部类不可以用abstract修饰符定义为抽象类D.内部类可作为其他类的成员,而且可访问它所在类的成员(14)顺序执行下列程序语句后,则b的值是(C)–原因:String类的substring方法用于返回一个新的字符串对象,在当前字符串中,求以第一个参数为起始索引位置,第二个参数为结束索引位置的子串的值。其中不包括结束索引位置的那个字符。Stringa=Hello;Stringb=a.substring(0,2);A.HelloB.HelC.HeD.null(15)为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为(A)。--原因:static修饰的方法又称为静态方法。静态方法是类方法,它可以直接通过类来调用,也可以通过类实例来调用。A.staticvoidmethod()B.publicvoidmethod()C.finalvoidmethod()D.abstractvoidmethod(16)不使用static修饰符限定的方法称为对象(或实例)方法,下列哪一个说法是正确的?(D)--原因:A子类实例方法可以直接调用父类的public和protected实例方法,但不能调用父类的private方法。B类方法也称为静态方法,非静态的方法不能调用静态的方法和成员变量,所以无论是父类还是子类的实例方法都不能调用静态方法。C一个类的实例方法只有这个类的其它方法或对象可以调用,不可以由其它类不经过实例化直接调用。A.实例方法可以直接调用父类的实例方法。B.实例方法可以直接调用父类的类方法。C.实例方法可以直接调用其他类的实例方法。D.实例方法可以直接调用本类的实例方法(17)设有下面的一个类定义:classAA{staticvoidShow(){System.out.println(“我喜欢Java!”);}}classBB{voidShow(){System.out.println(“我喜欢C++!”);}}若已经使用AA类创建对象a和BB类创建对象b,则下面(A、C)方法调用是正确的–原因:静态方法属于类方法,它可以直接通过类来调用,也可以通过类实例来调用。而非静态的方法则只能通过类实例(对象)来调用。所以AA类的静态show方法即可通过类也可以通过对象来调用,而BB类中的非静态方法show则只能通过对象b来调用。A.a.Show();b.Show()B.AA.Show();BB.Show();C.AA.Show();b.Show();D.a.Show();BB.Show();(18)在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序特性称为(C)。–原因:同一名称的方法实现不同的功能是面向对象的多态性的表现,该多态性也称为重载。A.隐藏B.覆盖C.重载D.Java不支持此特性(19)对于构造函数,下列叙述不正确的是(C)。–原因:子类可以通过super来调用父类的构造方法。A.构造函数也允许重载。B.子类无条件地继承父类的无参构造函数。C.子类不允许调用父类的构造函数。D.在同一个类中定义的重载构造函数可以相互调用。(20)对于子类的构造函数说明,下列叙述中不正确的是(D)。--原因:子类不可以继承父类的有参构造函数。只能通过super调用。A.子类无条件地继承父类的无参构造函数。B.子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句。C.在创建子类的对象时,将先执行继承自父类的无参构造函数,然后再执行自己的构造函数。D.子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。二、请写出下列程序的运行结果(1)下列程序的运行结果是(s=120)—分析:if语句执行3次,分别是当i=0,3,6时,对应的数组中的数分别为:10,40,70,它们的和为120.publicclassExamac{publicstaticvoidmain(Stringargs[]){inti,s=0;inta[]={10,20,30,40,50,60,70,80,90};for(i=0;ia.length;i++)if(i%3==0)s+=a[i];System.out.println(s=+s);}}(2)下列程序的运行结果是(110110110110110)—分析:for循环执行5次,分别输出11+99,22+88,33+77,44+66,55+55的和,且之间用空格隔开。publicclassExamad{publicstaticvoidmain(Stringargs[]){inti;inta[]={11,22,33,44,55,66,77,88,99};for(i=0;i=a.length/2;i++)System.out.print(a[i]+a[a.length-i-1]+);System.out.println();}}(3)下列程序的运行结果是(parentchildchild)—分析:当对象myC调用方法printAll()后,顺序执行该方法中的三条语句,在子类Child中,重载了父类的printMe方法,所在当执行this.printMe()和printMe()方法时都调用重载后的printMe()方法。所以依次输出parent,child,child.classParent{voidprintMe(){System.out.println(parent);}}classChildextendsParent{voidprintMe(){System.out.println(child);}voidprintAll(){super.printMe();this.printMe();printMe();}}publicclassExamae{publicstaticvoidmain(Stringargs[]){ChildmyC=newChild();myC.printAll();}}(4)下列程序的运行结果是(TheStringNo.1isTheStringNo.2isString2TheStringNo.3isstringTheStringNo.4isstringTheStringNo.5isstring)—原因:s1定义了一个空的字符串对象,所以不会输出任何东西。s2定义了一个字符串对象并赋初值为string2。s3定义了一个以字符数组为参数的字条串对象,并将该字符数组组成的字符串赋给s3。s4定义同s3,只是只取字符数组从索引值为2的字符开始之后的6个字符,所以会去掉前面的两个空格。s5是以一个StringBuffer类对象为参数定义的一个字符串对象,它的初值同s3.classExamaf{