Java习题5

Java继承与抽象类详解
  1. A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:
    A a0=new A();
    A a1=new B();
    A a2=new C();
    问以下哪个说法是正确的?(D)
    A 、只有第一行能通过编译
    B 、第1、2行能通过编译,但第3行编译出错
    C 、第1、2、3行能通过编译,但第2、3行运行时出错
    D 、第1行,第2行和第3行的声明都是正确的

解析:
在这里插入图片描述

  1. 下面代码将输出什么内容:(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 、编译错误

解析:
== 基本数据类型比较值,引用类型比较是否指向同一地址,
equals 默认是比较对象的,先比较地址,在比较类型,在比较值。

  1. 阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有(A)
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();
}
}

解析:
首先static静态方法或者说类方法不依赖于对象,因此哪怕没有创造出对象代码依旧可以进行。
在定义类时,只是通知编译器需要准备多大的内存空间,并没有为它分配内存空间。只有用类创建了对象(new)后,才会真正占用内存空间。
类在声明时会被加载,static语句/成员变量/构造函数也会因此声明执行。

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

解析:
1. super(),this()和super,this关键字不是一个概念,前者是在构造器之间相互调用的语法,后者是代之父类或者本类的对象。
2. 每个构造器默认的第一行都是super(),但是有的时候直接父类的没有无参构造,那么就必须在子类构造的第一行显式的声明要调用哪个构造器。
3. this()和super()都必须出现在构造器的第一行,所以两者不可能出现在同一个构造器中
4. this和super都不能出现了静态方法、静态块中

  1. 如下代码的 结果是什么 ? (B)
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 、代码运行但没有输出
E 、运行时抛出异常

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

  1. 如下代码的输出结果是什么? (D)
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 、编译失败

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

  1. 下列哪一种叙述是正确的(D)
    A、 abstract修饰符可修饰字段、方法和类
    B 、抽象方法的body部分必须用一对大括号{ }包住
    C 、声明抽象方法,大括号可有可无
    D 、声明抽象方法不可写出大括号

解析:
A abstract 只能修饰类和方法不能修饰字段。
B 抽象方法没有方法体只有一个声明,所以不需要{}包住。
C 声明抽象方法大括号不能有,有代表的是有方法体,就与原有抽象方法定义相驳。

  1. 下列说法正确的有:(C)
    A、 class中的constructor不可省略
    B 、constructor必须与class同名,但方法不能与class同名
    C 、constructor在一个对象被new 时执行
    D 、一个class只能定义一个constructor

解析:
A,构造函数可以省略,省略后JVM会自动创建一个无参的构造函数
B,构造函数必须与public 类同名,方法可以和类同名
D,构造函数可以重载

  1. 选项中哪一行代码可以替换 //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 = constInt + 5(×)
C 返回值不能作为重载的依据(×)
D 有方法体的不能作为抽象函数(×)

  1. java 中哪个关键字可以对对象加互斥锁?()
    A 、transient
    B 、synchronized
    C 、serialize
    D 、static

解析:
synchronized 关键字 : 用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。
volatile:用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而,在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比 synchronized关键字更轻量级的同步机制。
serialize:Java 对象序列化为二进制文件。
static关键字: static关键字可以修饰变量,方法,静态代码块。
静态变量:
由static修饰的变量称为静态变量
静态变量属于类,而不属于某个对象
静态变量它的副本只有一个(静态变量在类中只加载一)
静态方法:
在静态方法中只能调用静态变量和静态方法
在非静态方法中,可以调用静态方法或者变量。
在静态方法中不能使用this和super关键字。
静态代码块
作用:用来给静态成员变量初始化

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值