Java选择题

1. A派性出籽类B,B派生出子类C,并且在Java源代码中有如下声明:
1.A a0=new A();
2.A a1 =new B();
3. A a2=new C();
问以下哪个说法是正确的? (D )

A.只有第1行能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行、第2行和第3行的声明都是正确的

解析:
继承是单继承,并且继承是具有传递性的,子类向上转型是无条件的,所以C类也可以说是A类的子类,故1、2、3全部是正确的

2.下面代码将输出什么内容:(B)

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.编译错误

解析:
这里admin指向堆内存字符串常量池里admin的地址,而toLowerCase方法在源码中重新new String()返回的,指向的是这个字符串对象在堆内存中的地址,而这个地址里存放了指向堆内存字符串常量池里admin的地址。所以二者引用不相等,==判断为false

3.阅读如下代码。请问,对语句行test.hello0.描述正确的有( A)

package NowCoder;
class Test {
public static void hello0 {
System.outprintln("hello");
}
public class MyApplication {
public static void main(String[ args) {
// TODO Auto-generated method stub
Test test=null;
test.hello0;
}

A能编译通过,并正确运行
B因为使用了未初始化的变量,所以不能编译通过
C以错误的方式访问了静态方法
D能编译通过,但因变量为null ,不能正常运行

解析:
静态方法的使用不依靠对象,只看类型,在编译时就确定了

4.在使用super和this关键字时,以下描述正确的是( A)
A在子类构造方法中使用super( )显示调用父类的构造方法, super( ) 必须写在子类构造方法的第一行,否则编译不通过
B super( )和this( )不一定要放在构造方法内第一-行
C this( ) 和super ( )可以同时出现在一个构造函数中
D this ( )和super ( )可以在static环境中使用,包括static方法和static语句块

解析:
1.this 和 super 只能放在第一行
2.this()和super()不可以同时出现在一个构造函数中
3.在方法中定义使用的this关键字,它的值是 当前对象 的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.
this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.

5.如下代码的结果是什么?(B)

class Base {
Base() {
System.out.print("Base'");
}
public class Alpha extends Base {
public static void main( String[ args) {
new Alpha();
//调用父类无参的构造方法
new Base0;
}

A Base
B BaseBase
C编译失败
D代码运行但没有输出
E运行时抛出异常

解析:
在执行new Alpha()时,会先执行父类的构造方法,在执行相应的子类的构造方法,所以此处会打印Base,在执行new Base()时,会直接执行Base中无参构造器的代码,再输出Base,所以选B

6.如下代码的输出结果是什么?(D)

public class Test {
public int aMethod0{
static int i= 0;
i++;
return i;
}
public static void main(String args[){
Test test = new Test();
test.aMethod();
intj = test.aMethod0);
System.out.println(j);
}

A.0
B.1
C.2
D.编译失败

解析:
Java中静态变量只能在类主体中定义,不能在方法中定义。 静态变量属于类所有而不属于方法。

7.下列哪一种叙述是正确的(D)
A abstract修饰符可修饰字段、方法和类
B 抽象方法的body部分必须用一对大括号{ }包住
C 声明抽象方法,大括号可有可无
D 声明抽象方法不可写出大括号
8.选项中哪一行代码可以替换 //add code here 而不产生编译错误(A)

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:类中定义成员和方法,不能直接进行运算,可以写在代码块{}或者静态代码块中static{}中
C: 与第四行想要构成重载,二者区别是返回类型,但是返回类型不能作为重载的依据
D: 该方法使用abstract修饰,是抽象方法,但是他有方法体(带有{}的就是方法体,即使里面是空的),就不能作为抽象方法

9.以下代码运行输出的是(C)

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

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

解析:
Java中对字段属性是静态绑定,方法成员是动态绑定,这里错在:在子类中试图访问父类的private字段,所以编译不通过,将private去掉就可访问,不是动态绑定的问题,它本来就属于静态绑定。

10.以下程序的输出结果为(D)

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(StringO args){
new Derived("C");
}

A.BD
B. DB
C.C
D.编译错误

解析:
1.写一个类,如果没有写构造函数,那么这类默认会有一个无参的构造函数。如果写构造函数了,那么就不会有默认的无参构造函数,以自己写的构造函数为准。
2.子类在写构造函数的时候,第一行必须用super 关键字调用父类的任一构造函数。
3.用super调用父类的构造函数时,如果调用的是父类无参构造函数,则super()可以不用写,如果是有参构造函数,则必须显示调用。

所以看这道题:
1.父类 Base 有一个有参构造函数,那么默认的无参构造函数就没有了;
2.在子类Derived的构造函数中,必须通过super调用父类的构造函数
3.父类Base 没有无参的构造函数,所以必须显示调用父类的有参构造函数,即显示的调用 super("");

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一. 选择题(共50题,每题2分,共100分。多选题选不全或选错都不得分。) 1. 以下属于面向对象的特征的是(C,D)。(两项) A) 重载 B) 重写 C) 封装 D) 继承 2. 以下代码运行输出是(C) 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) 运行出错 3. 在使用super 和this关键字时,以下描述正确的是(A) A) 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 B) super()和this()不一定要放在构造方法内第一行 C) this()和super()可以同时出现在一个构造函数中 D) this()和super()可以在static环境中使用,包括static方法和static语句块 ...... 一、 编写程序实现对给定的10个整数从大到小的顺序排列。 二、 输入3个正数,判断能否构成一个三角形 三、 编写程序,从键盘输入一个0~99999之间的任意数,判断输入的数是几位数? 四、 编写程序,给定一个学生成绩,给出相应等级: 90~100优秀80~89良好70~79中等60~69及格0~59不及格 ...... 七、 猴子吃桃问题。猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,求第一天共摘下来多少个桃子?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值