Java选择易错题

选择题

**1.**已知如下类定义:
class Base {
public Base (){
//…
}
public Base ( int m ){
//…
}
public void fun( int n ){
//…
}
}
public class Child extends Base{
// member methods
}
如下哪句可以正确地加入子类中?
1.A private void fun( int n ){ //…}
B void fun ( int n ){ //… }
C protected void fun ( int n ) { //… }
D public void fun ( int n ) { //… }
正确答案是D
解析:
由选项可知 :子类方法与父类方法构成重写。构成重写就要求子类的修饰限定符必须大于等于父类的。

2. 类声明中,声明一个类不能再被继承的关键字是()
A public
B abstract
C final
D static
类声明中,声明一个类不能再被继承的关键字是()
正确答案是: C
解析:

final关键字可以用来修饰变量、成员方法以及类。

  1. 修饰变量或字段,表示常量(即不能修改)。
  2. 修饰类:表示此类不能被继承。
  3. 修饰方法:表示该方法不能被重写。

3.A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

  1. A a0=new A();

  2. A a1=new B();

  3. A a2=new C();
    问以下哪个说法是正确的()
    A 只有第一行能通过编译
    B 第1、2行能通过编译,但第3行编译出错
    C 第1、2、3行能通过编译,但第2、3行运行时出错
    D 第1行,第2行和第3行的声明都是正确的
    正确答案: D
    解析:
    由题知:A是B的父类,B是C的父类,得A是C的间接父类,所以D是正确的。

    4.下面代码将输出什么内容:()
    public class SystemUtil{
    public static boolean isAdmin(String userId){
    return userId.toLowerCase()==“admin”;
    }
    public static void main(String[] args){
    System.out.println(isAdmin(“Admin”));
    }
    }
    A true
    B false
    C 1
    D 编译错误
    正确答案: B
    解析:
    此题关键点在于 toLowerCase,在源代码中 如果字符串中 有大写字母,用toLowerCase 转成小写时,会产生新的对象。而"admin"在常量池中,所以两个不相等。但如果 字符串中没有大写字母,用toLowerCase最后会返回this,不会产生新的对象,所以会是true。

5阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()
package NowCoder;
class Test {
public static void hello() {
System.out.println(“hello”);
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}
A 能编译通过,并正确运行
B 因为使用了未初始化的变量,所以不能编译通过
C 以错误的方式访问了静态方法
D 能编译通过,但因变量为null,不能正常运行
正确答案A
解析:
由于题目中 test引用是个空,理论上会引起空指针异常。但由于hello() 这个方法是个静态方法,静态方法的调用不依赖于任何对象,test没引用任何对象,所以可以运行。

6.如下代码的输出结果是什么?
public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}

A 0
B 1
C 2
D 编译失败
正确答案: D
解析:
static 定义的变量属于 静态成员变量,不能出现在方法内部。因此会编译失败。

7.下列哪一种叙述是正确的()
A abstract修饰符可修饰字段、方法和类
B 抽象方法的body部分必须用一对大括号{ }包住
C 声明抽象方法,大括号可有可无
D 声明抽象方法不可写出大括号
正确答案: D
解析:在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用给出具体的实现体。** 抽象方法:被abstract修饰的方法,没有方法体**。

8.选项中哪一行代码可以替换 //add code here 而不产生编译错误
public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}
A public abstract void method(int a);
B consInt=constInt+5;
C public int method();
D public abstract void anotherMethod(){}
正确答案: A
解析:
先看B选项:constInt 是个成员变量,不能在方法外运算
C选项:语法错误,没有{}
D选项:abstract 方法不能有{}
9.以下代码运行输出的是
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
解析:
private 访问修饰限定符只能用在类里面,类外不能调用。
10.以下程序的输出结果为
class Base{
public Base(String s){
System.out.print(“B”);
}
}
public class Derived extends Base{
public Derived (String s) {
System.out.print(“D”);
}
public static void main(String[] args){
new Derived(“C”);
}
}
A BD
B DB
C C
D 编译错误
正确答案:D
解析:
在继承中,当父类自己写了构造方法时,子类必须帮父类构造,即要调用 super();如果没有调用会编译报错。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值