Java选择题:测试你的能力

题目

选自牛客网述

1.下面有关java基本类型的默认值和取值范围,说法错误的是?

A.字节型的类型默认值是0,取值范围是-27—27-1
B.boolean类型默认值是false,取值范围是true\false
C.字符型类型默认是0,取值范围是-2^15 —2^15-1
D.long类型默认是0,取值范围是-263—263-1

正确答案

  • C. 字符型(char)类型默认是0,取值范围是-2^15 —2^15-1。
    • 解释char 类型的默认值实际上是\u0000,取值范围是从0到2^16-1。

2.以下哪些jvm的垃圾回收方式采用的是复制算法回收

A.新生代串行收集器
B.老年代串行收集器
C.并行收集器
D.新生代并行回收收集器
E.老年代并行回收收集器
F.cms收集器

正确答案:AD
在Java虚拟机(JVM)中,不同的垃圾回收器采用不同的算法来管理内存。复制算法是一种常用的垃圾回收算法,它主要用于新生代的垃圾回收。下面是针对每个选项的分析:
A. 新生代串行收集器(Serial Collector)

  • 采用复制算法。新生代串行收集器使用复制算法来回收新生代内存。

B. 老年代串行收集器(Serial Old Collector)

  • 不采用复制算法。老年代串行收集器通常使用标记-整理算法。

C. 并行收集器(Parallel Collector)

  • 新生代部分采用复制算法。并行收集器在新生代使用复制算法,在老年代使用标记-整理算法。

D. 新生代并行回收收集器(Parallel Scavenge Collector)

  • 采用复制算法。新生代并行回收收集器使用复制算法来回收新生代内存。

E. 老年代并行回收收集器(Parallel Old Collector)

  • 不采用复制算法。老年代并行回收收集器通常使用标记-整理算法。

F. CMS收集器(Concurrent Mark Sweep Collector)

  • 不采用复制算法。CMS收集器主要针对老年代,使用标记-清除算法。

解释

  • 复制算法通常用于新生代,因为新生代中的对象生命周期较短,大部分对象很快就会被回收。复制算法通过将新生代划分为两个相等的部分(通常称为From
    Space和To Space),在每次垃圾回收时将存活的对象复制到另一个空间中,而原来的区域则被清空。

  • 标记-整理算法标记-清除算法通常用于老年代,因为老年代中的对象生命周期较长,对象存活率较高,不适合频繁复制。

因此,选项A和D是采用复制算法进行垃圾回收的。

3.下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader

A.Thread
B.Number
C.Double
D.Math
E.ClassLoader

正确答案:ABE

选项分析

A. java.lang.Thread

  • 可以被继承Thread 类不是最终类,因此可以被继承。

B. java.lang.Number

  • 可以被继承。虽然 Number 类是一个抽象类,但是它可以被继承。实际上,IntegerFloatDouble 等数值类型都是继承自 Number
    类的。

C. java.lang.Double

  • 不可以被继承Double 类是最终类(final),因此不能被继承。

D. java.lang.Math

  • 不可以被继承Math 类是最终类(final),因此不能被继承。

E. java.lang.ClassLoader

  • 可以被继承ClassLoader 类不是最终类,因此可以被继承。

正确答案

  • A. java.lang.Thread
  • B. java.lang.Number
  • E. java.lang.ClassLoader

解释

  • Thread 类不是最终类,因此可以被继承。
  • Number 类虽然是一个抽象类,但它可以被继承,例如 IntegerFloatDouble 类都是继承自 Number 类。
  • ClassLoader 类不是最终类,因此可以被继承。

4.在java中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是()

A.interface A extends B,C
B.interface A eimplements B,C
C.class A implements B,C
D.class A implements B,implements C

正确答案:C

在Java中,要定义一个类实现两个接口,正确的语法是使用 class 关键字,并在类定义后面使用 implements
关键字列出要实现的所有接口。接口列表应该用逗号分隔。

选项分析

A. interface A extends B, C

  • 错误。这个选项定义了一个接口 A,它扩展了接口 BC。这不是实现接口的正确语法。

B. interface A implements B, C

  • 错误。这个选项同样定义了一个接口 A,但使用了 implements 关键字,这是不正确的。implements 关键字用于类实现接口。

C. class A implements B, C

  • 正确。这个选项定义了一个类 A,它实现了接口 BC。这是正确的语法。

D. class A implements B, implements C

  • 错误。这个选项试图实现两次接口 C,这是无效的语法。

代码示例

下面是一个简单的代码示例来展示如何定义一个类实现两个接口:

// 假设我们有两个接口 B 和 C
interface B {
    void methodB();
}

interface C {
    void methodC();
}

// 定义一个类 A 实现接口 B 和 C
class A implements B, C {
    @Override
    public void methodB() {
        System.out.println("Method B is called.");
    }

    @Override
    public void methodC() {
        System.out.println("Method C is called.");
    }
}

public class Main {
    public static void main(String[] args) {
        A obj = new A();
        obj.methodB();
        obj.methodC();
    }
}

在这个示例中,类 A 成功实现了接口 BC


5.以下代码执行后输出结果为( )

public class ClassTest{
     String str = new String("hello");
     char[] ch = {'a','b','c'};
     public void fun(String str, char ch[]){
     str="world";
     ch[0]='d';
 }
 public static void main(String[] args) {
     ClassTest test1 = new ClassTest();
     test1.fun(test1.str,test1.ch);
     System.out.print(test1.str + " and ");
     System.out.print(test1.ch);
     }
 }

A.hello and dbc
B.world and abc
C.hello and abc
D.world and dbc

正确答案:A

代码分析

  1. 初始化变量
 String str = new String("hello");  
   char[] ch = {'a', 'b', 'c'}; 
      
  1. 方法调用
     test1.fun(test1.str, test1.ch);
  1. 方法内部
   public void fun(String str, char ch[]) {
        str = "world";
        ch[0] = 'd';    }    
  • 字符串参数
    str 被赋值为 "world"。但在Java中,字符串是不可变的,所以这里的 str 是一个新的局部变量,不会影响到原始的 str 变量。
  • 数组参数
    ch[0] 被赋值为 'd'。数组是可变的,所以改变数组的内容会影响到原始数组。
  1. 输出结果
 System.out.print(test1.str + " and ");  
 System.out.print(test1.ch);

输出结果分析

  • 字符串输出:原始的 str 变量仍然保持为 "hello",因为在方法 fun 中对 str 的修改并没有影响到原始的 str
  • 数组输出:原始的 ch 数组的第一个元素被修改为 'd',所以在输出时会看到 'd'

最终输出

  • 字符串输出"hello"
  • 数组输出"dbc"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布说在见

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

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

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

打赏作者

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

抵扣说明:

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

余额充值