java进阶--刷题与详解-2

下面关于 Java 中 List 集合的说法正确的是()

A LinkedLIst内部采用单向链表实现,所以只能从前向后遍历,不能反向遍历

B LinkedList随机查询快,随机插入慢

C ArrayList随机查询快,随机插入慢

D ArrayList和LinkedList是线程安全的类

正确答案:C

解析:LinkedList 采用双向链表实现,可以反向遍历,A错误。 链表随机查询慢,插入快,B错误。 ArrayList 和LinkedList 都是非线程安全的类,D错误。

子类要调用继承自父类的方法,必须使用super关键字()

A 正确 B错误

正确答案:B

解析:子类调用父类的方法时,并不是必须使用super关键字。因为子类会自动继承父类的所有非私有方法,可以直接使用父类方法名调用。

只有在以下特殊情况下才需要使用super关键字:

  1. 子类重写了父类方法,但在重写方法中需要调用父类的原始实现时

  2. 在子类构造方法中调用父类的构造方法时

  3. 当子类和父类存在同名的成员时,想要明确调用父类成员时

关于LinkedBlockingDeque和LinkedBlockingQueue的说法错误的是哪个选项?

A LinkedBlockingDeque和LinkedBlockingQueue都是BlockingQueue的子类

B LinkedBlockingDeque和LinkedBlockingQueue都是通过ReentrantLock实现锁,线程安全的集合

C LinkedBlockingDeque是基于链表的、线程安全的双端阻塞队列;LinkedBlockingQueue是基于链表的先进先出的阻塞队列

D LinkedBlockingDeque和LinkedBlockingQueue都是无界的阻塞队列

正确答案:D

解析:

LinkedBlockingQueue(单向阻塞队列)

特点:

  • 单向队列:只能在队尾插入,队头取出(FIFO)

  • 两个锁分离 :使用两个ReentrantLock(putLock 和 takeLock),分别控制入队和出队

  • 容量可选 :可指定容量,默认为 Integer.MAX_VALUE(实际无界)

  • 阻塞操作

    • put():队列满时阻塞

    • take():队列空时阻塞

LinkedBlockingDeque(双向阻塞队列)

特点:

  • 双向队列:可在队头/队尾进行插入和删除

  • 单个锁 :使用一个ReentrantLock控制所有操作

  • 容量可选:同样可指定容量

  • 更丰富的API:支持栈和队列两种操作模式

Java 中,下面哪些异常类属于运行期异常()

A NullPointerException

B IOException

C ArithmeticException

D NoSuchMethodException

正确答案:AC

解析:NullPointerException空指针异常 IOException输入输出异常 ArithmeticException算数异常 NoSuchMethodException没有这个方法异常

NullPointerException和ArithmeticException是运行时异常

NoSuchMethodException和IOException是检查型异常

对于一个已经不被任何变量引用的对象,当垃圾回收器准备回收该对象所占用的内存时,将自动调用该对象的哪个方法()

A finalize B notify C notifyAll D hashCode

正确答案:A

解析:finalize是一个特殊方法,会在垃圾回收器准备回收对象所占用的内存之前被自动调用,当一个对象变得不可达时,垃圾回收器会在回收该对象之前调用其方法,给对象发最后一次机会处理必要的清理工作

notify()是Object类的方法,用于唤醒在该对象上等待的单个线程,与垃圾回收无关。

notifyAll()也是Object类的方法,用于唤醒在该对象上等待的所有线程,同样与垃圾回收无关。

hashCode()是Object类的方法,用于返回对象的哈希码值,主要用于确定该对象在哈希表中的索引位置,与垃圾回收无关。

在 JAVA 编程中, Java 编译器会将 Java 程序转换为( )

A 字节码 B 执行代码 C 机器代码 D 以上都不对

正确答案:A

解析:Java编译器会将Java源代码(.java文件)转换为字节码(.class文件),只有当JVM执行字节码时,才会将字节码转换为相应平台的机器码。

如下代码的输出是

|-------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package Test; public class Test { ``private static void test(``int``[] arr) { ``for (``int i = ``0``; i < arr.length; i++) { ``try { ``if (arr[i] % ``2 == ``0``) { ``throw new NullPointerException(); ``} ``else { ``System.out.print(i); ``} ``} ``finally { ``System.out.print(``"e"``); ``} ``} ``} ``public static void main(String[]args) { ``try { ``test(``new int``[] {``0``, ``1``, ``2``, ``3``, ``4``, ``5``}); ``} ``catch (Exception e) { ``System.out.print(``"E"``); ``} ``} } |

可以得到的结论是( )

A 编译出错 B eE C Ee D eE1eE3eE5 E Ee1Ee3Ee5

正确答案:B

解析:finally一定会执行,在catch()块中有着throw exception这样的语句才会向上抛出问题,中止程序往下执行

关于Java里的虚方法、抽象方法描述不正确的是?

A 虚方法可以被子类继承并重写方法 B 抽象方法不可以带实现 C 抽象方法非抽象子类必须实现 D 抽象方法可以被子类实现成虚方法

正确答案:D

解析:

  1. Java中虚方法的特性

    • Java默认所有非final、非static的非静态方法均为虚方法(即支持动态绑定),子类可通过@Override重写。
    • 虚方法在父类中可以有实现,子类可覆盖或扩展。
  2. Java中抽象方法的特性

    • 抽象方法无方法体,必须由子类实现(若子类非抽象类)。
    • 抽象方法只能存在于抽象类中,且子类必须实现所有抽象方法。

要使对象具有序列化能力,则其类应该实现如下哪个接口()。

A java.io.Serializable B java.lang.Cloneable C java.lang.CharSequence D java.lang.Comparable

正确答案:A

解析:在Java中要实现对象的序列化功能,类必须实现java.io.Serializable接口。Serializable是一个标记接口(marker interface),它没有任何方法需要实现,仅仅是标识这个类可以被序列化。当一个类实现了Serializable接口后,该类的对象就能够被转换为字节流,用于网络传输或持久化存储。

分析其他选项:

B选项 Cloneable:这是用于对象克隆的标记接口,与序列化无关。实现此接口的类可以使用Object.clone()方法创建对象副本。

C选项 CharSequence:这是一个字符序列的接口,主要用于字符串相关操作,如String、StringBuilder等类都实现了这个接口,与对象序列化无关。

D选项 Comparable:这个接口用于实现对象的比较功能,通过实现compareTo方法来定义对象之间的自然顺序,与序列化功能无关。

1、序列化是干什么的? 为了保存在内存中的各种对象的状态,并且把Java给你提供一种保存的对象状态再读出来就是序列化。 2、什么情况下需要序列化 a)把内存中的对象保存到一个文件中或者数据库中时候; b)用套接字在网络上传送对象的时候; c)通过RMI传输对象的时候

以下Java程序运行的结果是:

|----------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 | public class Tester{ public static void main(String[] args){ ``Integer var1=``new Integer(1); ``Integer var2=var1; ``doSomething(var2); ``System.out.print(var1.intValue()); ``System.out.print(var1==var2); } public static void doSomething(Integer integer){ ``integer=``new Integer(2); ``} } |

A 1true B 2true C 1false D 2false

正确答案:A

解析:

java 复制代码
public class Tester {
    public static void main(String[] args) {
        // 创建一个新的Integer对象,值为1,var1引用指向这个对象
        Integer var1 = new Integer(1);
        // var2引用指向同一个对象(var1和var2都指向堆中同一个Integer实例)
        Integer var2 = var1;
        
        // 调用doSomething方法,传入var2的引用副本
        doSomething(var2);
        
        // 输出var1指向的Integer对象的值(仍然是1)
        System.out.print(var1.intValue());
        // 比较var1和var2是否指向同一个对象(输出true)
        System.out.print(var1 == var2);
    }
    
    // doSomething方法:接收一个Integer对象的引用作为参数
    public static void doSomething(Integer integer) {
        // 这里创建了一个新的Integer对象(值为2)
        // 并将局部参数变量integer指向这个新对象
        // 注意:这不会影响main方法中的var2引用
        integer = new Integer(2);
    }
}

dosomething

  • 实际作用 :尝试修改传入的 Integer 参数,但由于 Java 是值传递 (传递的是引用的副本),这里的修改不会影响调用方的原始变量

  • 关键点 :该方法创建了一个新的 Integer 对象,但只修改了方法内部的局部引用变量,对外部变量没有影响

下列代码输出结果为()

|----------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Animal{ ``public void move(){ ``System.out.println(``"动物可以移动"``); ``} } class Dog ``extends Animal{ ``public void move(){ ``System.out.println(``"狗可以跑和走"``); ``} ``public void bark(){ ``System.out.println(``"狗可以吠叫"``); ``} } public class TestDog{ ``public static void main(String args[]){ ``Animal a = ``new Animal(); ``Animal b = ``new Dog(); ``a.move(); ``b.move(); ``b.bark(); ``} } |

A 动物可以移动

狗可以跑和走

狗可以吠叫

B 动物可以移动

动物可以移动

狗可以吠叫

C 运行错误

D 编译错误

正确答案:D

解析:

  1. Animal a = new Animal();

    • 创建对象 :一个真正的 Animal 类实例。

    • 调用 a.move() :执行 Animal 类自身的 move 方法。

    • 输出动物可以移动

  2. Animal b = new Dog();

    • 创建对象 :一个 Dog 类实例,但将其向上转型Animal 类型的引用 b 来指向它。

    • 内存中的实际情况 :对象本质是 Dog,拥有 Dog 的所有方法(move, bark)。但编译器看待它的"视角"是 Animal

    • 调用 b.move()

      • 编译阶段 :编译器检查 b 的类型 (Animal),确认 Animalmove 方法,允许通过。

      • 运行阶段 :JVM 发现 b 实际指向的是 Dog 对象,于是调用 Dog 类中重写的 move 方法。这是多态的体现。

      • 输出狗可以跑和走

  3. 尝试调用 b.bark()

    • 编译阶段 :编译器检查 b 的类型 (Animal),发现 Animal 类中没有定义 bark 方法

    • 结果 :编译器立即报错,程序无法进入运行阶段。错误信息通常类似于:找不到符号Animal 类中没有 bark 方法

下面有关JDK中的包和他们的基本功能,描述错误的是?

A java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面

B java.io:  包含提供多种输出输入功能的类

C java.lang: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET

D java.util:  包含一些实用性的类

正确答案:B

解析:java.lang包是Java语言的基础包,包含了最基本的类,它不需要import就可以使用,网络相关的类实际上是在java.net包中。

相关推荐
Scott9999HH3 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海4 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a1117767 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao7 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区8 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大8 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf