Java面向对象选择题3

1、下边程序运行的结果是? ( )

class Base {
 Base() { System.out.print("Base"); }
}
public class Alpha extends Base {
   public static void main( String[] args ) {
        new Alpha();
        new Base();
  }
 }

A.Base
B.BaseBase
C.程序编译失败.
D.程序运行但没有任何输出

答案:B
难度等级:简单
解析:
在实例化子类的同时执行子类的构造函数,但执行执行子类构造函数时,会先执行父类的构造函数

2、下列说法正确的是? ( )

A.一个子类可以有多个父类,一个父类也可以有多个子类
B.一个子类可以有多个父类,但一个父类只可以有一个子类
C.一个子类可以有一个父类,但一个父类可以有多个子类
D.上述说法都不对

答案:C
难度等级:简单
解析:
选项A 一个子类只能有一个父类,java是单继承,一个父类是可以有多个子类
选项B 一个子类只能有一个父类,java是单继承,一个父类是可以有多个子类
选项C 正确

3、下面程序运行的结果是?( )

abstract class AbstrctIt {
    abstract float getFloat ();
}
public class AbstractTest extends AbstractIt {
     private float f1= 1.0f;
     private float getFloat () {return f1;}
}

A.编译成功
B.在第6行产生一个运行时异常
C.在第6行产生一个编译错误
D.在第2行产生一个编译错误

答案:C
难度等级:简单
解析:
重写方法访问可见性不能比父类的小

4、下面的程序输出的结果是:( )

public class A implements B {
public static void main(String args[]){
  int i;
  A c1 = new A();
  i= c1.k;
  System.out.println("i="+i);
}
}
interface B {
  int k = 10;
}

A.i=0
B.i=10
C.程序有编译错误
D.i=true

答案:B
难度等级:简单
解析:
接口中的成员变量是静态的且是常量。接口B的子类可以通过B.k获取常量的值,也可以通过对象获取常量值c1.k,但这种方式不推荐

5.不能用来修饰interface的有( )

A.private
B.public
C.protected
D.static

答案:ACD
难度等级:简单
解析:
接口的定义,可以是写public,也可以不写public,但不能写其他的修饰符

6.下列说法错误的有( )

A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法

答案:CD
难度等级:简单
解析:
选项C 也可以调用其它类的方法,但前提是把其他类的对象作为函数的对象传递到当前方法中
选项D 在类方法中可以调用实例的方法,this.method(),this指代的就当前实例对象

7.下列说法错误的有( )

A.Java面向对象语言容许单独的过程与函数存在
B.Java面向对象语言容许单独的方法存在
C.Java语言中的方法属于类中的成员(member)
D.Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同  

答案:ABC
难度等级:简单
解析:
java中一切皆对象

8.以下代码运行输出是()。

public class Person{
    private  String  name=”Person”;
    int age = 0;
}
public class Child extends Person{
    public String grade;
    public static void main(String[] args){
           Person p = new Child();
        System.out.println(p.name);
    }
}

A.输出:Person
B.没有输出
C.编译出错
D.运行出错

答案:C
难度等级:简单
解析:
System.out.println(p.name);
这句话语法报错,p对象是不能访问父类Person中的私有成员变量的,
p.age是可以访问的

9.下面哪个为构造函数的特性定义?

A.在类中声明构造函数时,名称应该与类名相同
B.具有重载特性,可以建立多个相同的名称
C.使用类建立新对象时,会自动执行构造函数,因此可以在构造函数内设定变量的初值或进行内存分配
D.以上都是

答案:ABC
难度等级:简单
解析:
使用构造器时需要记住:
1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)
2.每个类可以有一个以上的构造器
3.构造器可以有0个、1个或1个以上的参数
4.构造器没有返回值
5.构造器总是伴随着new操作一起调用

10.下列选项中关于java中super关键字的说法错误的是( )。

A.super关键字是在子类对象内部指代其父类对象的引用
B.super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
C.子类可以通过super关键字调用父类的方法
D.子类可以通过super关键字调用父类的属性

答案:CD
难度等级:简单
解析:
选项C 子类可以通过super关键字调用父类的方法,但父类的方法不能是私有的
选项D 子类可以通过super关键字调用父类的属性,但父类的属性不能是私有的

11、给出下面的代码段:( )

public class Base {
    int w, x, y, z;
public Base(int a, int b)  {
       x=a; y=b;
}
public Base(int a, int b, int c, int d)  {
    //assignment
}
}

在代码说明//assignment x=a, y=b 处写下如下哪几个代码是正确的?

A Base(a, b);
B x=a, y=b;
C x=a; y=b;
D this(a,b);

答案:CD
难度等级:简单
解析:
java中每一条语句都需要用分号结束
this(0个或多个参数),调用本类的其他构造函数,前提是要调用的构造函数得存在

12、指出下列程序运行的结果

 public class Example{
     String str=new String("good");
     char[]ch={'a','b','c'};
     public static void main(String args[]){
         Example ex=new Example();
         ex.change(ex.str,ex.ch);
         System.out.print(ex.str+" and ");
         System.out.print(ex.ch);
     }
     public void change(String str,char ch[]){
         str="test ok";
         ch[0]='g';
     }
 }

A.good and abc
B.good and gbc
C.test ok and abc
D.test ok and gbc

答案:B
难度等级:
解析:
数组和对象在作为函数的参数传递的时候,是引用传递,如果在方法中对其做过修改,则真的会影响原始数据

13.请分析下列代码,确定打印结果是什么(考察实例构建时static块、构造方法的执行时机)?

public class SimpleTest {
        static {
            System.out.println("a");
        }
        public SimpleTest() {
            System.out.println("b");
        }
        public static void test() {
            System.out.println("c");
        }
        public static void main(String[] args) {
            SimpleTest.test();
        }
 }

a.abc
b.ac
c.bc
d.c

答案:B
难度等级:简单
解析:
因为没有new SimpleTest,所以没有执行构造
静态的方法只能访问静态的变量或静态方法,非静态的方法即可以访问静态的方法或静态的变量,也可以访问非静态的方法或非静态的变量
静态的变量或方法属于类而不属于对象,所以在访问范围允许的情况下,静态的变量或方法都可以通过类名访问。虽然可以通过对象来访问静态的变量或静态的方法,但不推荐。

14.请分析下列代码,确定打印结果是什么?

 class SimpleTestBase {
        String str = "A";
 }
 public class SimpleTest extends SimpleTestBase {
        String str = "B"; 
        public static void main(String[] args) {
            SimpleTest test = new SimpleTest(); 
            System.out.print((test).str);
            System.out.print(((SimpleTestBase) test).str);
        }
 }

a.AA
b.BB
c.AB
d.BA

答案:D
难度等级:简单
解析:
点前面的对象是谁就取这个对象中的属性的值

15.关于垃圾收集的哪些叙述是对的?

a) 程序开发者必须自己创建一个线程进行内存释放的工作。
b) 垃圾收集将检查并释放不再使用的内存。
c) 垃圾收集允许程序开发者明确指定并立即释放该内存。
d) 垃圾收集能够在期望的时间释放被java对象使用的内存。

答案:B
难度等级:
解析:
垃圾收集将检查并释放不再使用的内存。

16.关于final,下列哪些说法是正确的?

a) 改变了final常量的值,则引用此常量的所有Java类必需重新编译
b) 类中只要有一个final方法,则此类不可以被继承
c) 将一个方法设置为final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里
d) final字段的值不能改变

答案:ACD
难度等级:简单
解析:
选项B 类中有final方法,那么这个方法不能在子类中重写。

17.下列说法正确的有?

a) class源代码中的constructor可以省略
b) constructor必须与class同名,但方法不能与class同名
c) constructor在一个对象被new时执行
d) 一个class只能定义一个constructor

答案:AC
难度等级:简单
解析:
选项B 普通的方法是可以跟类的名字相同,但前提此方法必须要有返回值
选项D 一个类的定义中,可以写很多个构造函数,他们的关系是重载的关系

18.Java接口的修饰符可以为( )

A private
B protected
C final
D abstract

答案:D
难度等级:简单
解析:
接口的修饰可以是public或者abstract或者不写

19.以下声明正确的有( )

A.int[3] arr= {1,3,5}
B.int[] arr= {1,3,5}
C int[3] arr=new int[]{1,3,5)
D int[] arr= neW int[]{1,3,5}
E.int[3] arr=newint[3]{1,3,5}
F.int[] arr= new int[3]{1,3,5}

答案:BD
难度等级:简单
解析:
在直接初始化数据的时候,就没必要指定数组的个数了

20.final关键字可以作为以下哪些声明的修饰词

A.抽象类
B.接口
C.方法参数
D.局部变量

答案:CD
难度等级:
解析:
final修饰在类上,类不能重写
final修饰在变量上上,那么这个量就变成常量了,且只能赋值一次

21.Choose the correct ones from the following statements:

A.A class can implement more than one interfaces.
B.A class can extend more than one classes
C. An interface has al least one method declared.
D. An abstract class wtuch has no abstract methods declared is legal

答案:AD
难度等级:简单
解析:
题干是:选择正确的从下列语句中
选项A 一个类能实现很多接口
选项B 一个类能继承很多类
选项C 一个接口至少有一个方法被声明
选项D 一个抽象类没有抽象方法被声明,是合法的

22.以下程序片段

class Super{
public float getNum()  (return 3.Of;  }
}
class Sub extends Super{
//xxx
}

xxx处不能写入:

A public float getNum(){return 4.0f;}
B public void getNum(){}
C public void getNum(double d){}
D public double getNum(float d){return 4.0d;}
E 以上答案皆不符

答案:AB
难度等级:简单
解析:
重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

23.以下程序片段

package foo;
public class Outer{
    public static class Inner{}
}

描述正确的是:

A Inner 类的实例可以通过“new Outer.Inner()”来创建
B Inner 类的实例无法再foo包以外创建
C Inner 类的实例只能在Outer类内创建
D 以上描述皆错

答案:A
难度等级:简单
解析:
只要等访问到外部类Outer的地方就能访问到Outer中的Inner类

24.以下为java语法保留不能作为类名和方法名使用的是

A default
B run
C implement
D throws
E 以上皆错

答案:E
难度等级:简单
解析:
都是java的关键字

25.下面的程序名为Student.java()

public class Student{
    private String name;1
    public Student(string s_name){
        name=s_name;2
    }
 public static void main(String args[]){
     Student s=new Student();3
 }
}

使用如下指令编译:javac Student.java将会得到什么结果?

A. 将会顺利通过编译,并产生一个>Student.class的类文件
B 编译时在//3处出错
C 编译时在//2处出错
D 编译时在//1出错

答案:B
难度等级:简单
解析:
类中如果显式的写了构造函数,那么默认的构造就不给提供了

generated by haroopad

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乔同学Online

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值