全部来自 AI 原创生成并经逐题审校的题目,带 精品 标记的为 AI 复审通过。整卷生成请去组卷。
某系统中定义了方法:static void check(int x) { if (x < 0) throw new IllegalArgumentException("x<0"); } 以及接口声明 void load() throws IOException, SQLException。关于其中 throw 与 throws 的使用,下列说法正确的是:A. throw 位于方法签名之后,可一次声明多个异常类型 B. throws 位于方法体内,其后必须跟 new 创建的异常对象 C. throw 位于方法体内,其后跟一个具体异常对象;throws 位于方法签名之后,可声明多个异常类型 D. check 方法内既用了 throw 也用了 throws,二者作用完全相同
登录后查看答案
有如下代码: public static int test() { int x = 10; try { return x; } finally { x = 99; } } 调用 test() 的返回值是多少? A. 10 B. 99 C. 0 D. 抛出异常
某支付系统中,「账户」类需提供公共字段(余额、户主)与部分已实现的通用校验逻辑,且各类账户存在共同血统;同时,系统希望让账户、优惠券、积分包等彼此无继承关系的类都支持统一的「可退款」能力契约。关于抽象类与接口的选型,下列说法正确的是: A. 应把「可退款」设计为抽象类,因为抽象类可以实现默认逻辑 B. 应把「账户」设计为接口,因为接口支持多实现更灵活 C. 「账户」用抽象类表达血统与公共实现,「可退款」用接口表达能力契约 D. 两者完全等价,任选其一即可,无需考虑设计语义
设类 A 中定义了 void f(A x){ 输出"A-f(A)" },类 B extends A 中定义了 void f(B x){ 输出"B-f(B)" } 和 void f(A x){ 输出"B-f(A)" }。现执行 A obj = new B(); obj.f(new B()); 关于该调用的绑定方式与输出结果,下列判断正确的是: A. 参数为 B 类型,故编译期静态绑定到 B.f(B),输出 B-f(B) B. obj 编译类型为 A,编译期绑定到 A.f(A),运行期因 B.f(A) 与之构成重写而动态绑定,输出 B-f(A) C. 三个方法互为重载,编译器无法确定调用哪个,产生编译错误 D. 编译期按 obj 的运行类型 B 绑定到 B.f(B),输出 B-f(B)
已知类 Vehicle 中定义了方法 run(),类 ElectricCar 继承 Vehicle 并重写了 run(),同时 ElectricCar 新增了特有方法 charge()。执行如下代码: Vehicle v = new ElectricCar(); v.run(); v.charge(); 下列说法正确的是: A. v.run() 输出 ElectricCar 重写后的版本,v.charge() 编译出错 B. 两行代码均正常运行,输出 ElectricCar 的行为 C. v.run() 编译出错,因为 v 是 Vehicle 类型引用 D. v.charge() 正常运行,因为对象实际是 ElectricCar 类型
下列对方法重写与方法重载的辨析,正确的是: A. 重载要求子类重新定义父类中已有方法,参数列表必须完全相同 B. 重写是在同一个类中定义多个同名方法,靠参数列表区分,编译期即确定调用哪个 C. 重写发生在继承关系中,子类方法与父类方法签名相同,运行期按对象实际类型动态绑定;重载在编译期按参数列表静态绑定 D. 重载与重写都在运行期绑定,区别仅在于是否使用 extends 关键字
某 Java 类中属性 age 已声明为 private,类外代码执行 obj.age = -5; 时编译报错。若删除 private 改为默认访问权限,则该赋值语句可通过编译且 age 变为 -5。下列说法最准确的是: A. 用 private 修饰属性即完成了封装,编译报错已证明封装成功 B. 封装要求私有属性配套提供公有的 setAge(int a) 等存取方法,并在方法内校验数据合法性,仅加 private 而不提供存取方法不算完整封装 C. 只要不提供任何存取方法,私有属性就比提供存取方法更安全,封装程度更高 D. 只要在 setAge 方法中写一句 this.age = a; 不做任何校验,就等同于实现了完整封装
某程序定义了一个 Counter 类,其中有一个成员变量 count(默认值为 0)。main 方法中依次执行:Counter c1 = new Counter(); Counter c2 = c1; Counter c3 = new Counter(); c1.count = 5; c2.count++; c3.count = 2; 请问此时 c1、c2、c3 各自的 count 值分别是多少? A. c1 为 5,c2 为 6,c3 为 2 B. c1 为 6,c2 为 6,c3 为 2 C. c1 为 6,c2 为 6,c3 为 3 D. c1 为 5,c2 为 5,c3 为 2
阅读如下代码: class Student { private String name; private int age; Student() { this("未命名", 18); } Student(String name, int age) { this.name = name; this.age = age; } } 关于代码中两处 this 的用法,下列说法正确的是: A. 第一处 this(...) 可放在 Student() 方法的任意一行 B. 第二处 this.name 中的 this 指代当前正在构造的对象,用于区分同名成员变量与参数 C. this("未命名", 18) 调用的是 Student(String name, int age) 之外的构造方法 D. 两处 this 均可省略而不影响程序含义与结果
有如下Java代码: static void update(int[] b, int flag) { flag = 5; b[2] = flag; b = new int[]{1, 1, 1, 1}; b[0] = 99; } 主方法中执行: int[] nums = {4, 6, 8}; int mark = 1; update(nums, mark); 调用结束后,nums[0]、nums[2] 和 mark 的值依次是? A. 99、5、5 B. 4、5、5 C. 99、5、1 D. 4、5、1
某票务系统有 total = 100 张共享票,两个线程 t1、t2 均执行如下售票方法 sell():方法体内用 synchronized (this) 包裹「判断 total > 0 后执行 total--」的操作,t1 与 t2 调用的是同一个 Ticket 对象的同一方法。另外类中还有一个方法 check(),其内部的「读 total」操作用 synchronized (另一个普通 Object 对象 lock2) 包裹。以下说法正确的是:A. sell() 内的同步代码块失效,total-- 仍可能出现竞态条件 B. sell() 之间能正确互斥,但 check() 与 sell() 之间不互斥 C. t1 与 t2 会因锁对象不同而发生死锁 D. check() 与 sell() 之间也互斥,因为都在访问 total
某线程 t 先后被执行以下操作:① new Thread() 创建后尚未调用 start();② 调用 start() 后等待 CPU 调度;③ 被调度器选中开始执行 run() 方法;④ 在 run() 中调用 sleep(1000);⑤ sleep 时间到且再次被调度器选中;⑥ run() 方法执行完毕。关于 t 经历的线程状态,下列说法正确的是: A. 步骤②中 t 进入运行态,因为 start() 会直接启动线程执行 B. 步骤④中 t 进入新建态,休眠结束后再回到运行态 C. 步骤④中 t 进入阻塞(计时等待)态,步骤②进入的就绪态到运行态的转换由线程调度器决定,无显式触发方法 D. 步骤⑥后 t 进入阻塞态,可再次调用 start() 使其重新运行
某程序用 BufferedOutputStream 向文件写入数据:先写入 5000 字节,调用 flush() 后又写入 300 字节,随后程序异常终止,既未再调用 flush() 也未关闭流。假设缓冲区大小为 8192 字节且此前缓冲区为空,文件中实际能读取到的字节数是多少? A. 5300 B. 5000 C. 300 D. 0
某程序需要将一个初始为空串的变量,通过循环 1000 次逐步追加字符 x。方案甲在循环内写 s = s + "x"(s 为 String 类型);方案乙先执行 new StringBuilder(),循环内只调用 append 方法,循环结束后调用一次 toString()。不考虑字面量常量池中的对象,只统计程序运行中新建的对象:方案甲与方案乙分别新建了多少个对象? A. 1000 和 2 B. 1000 和 1 C. 999 和 1 D. 999 和 2
下列关于 Java 泛型作用的说法,正确的是: A. 泛型在运行时检查元素类型,可防止程序在运行时抛出 ClassCastException B. 泛型的主要作用是在编译期约束元素类型,避免强制类型转换并提高类型安全性 C. 使用泛型后,ArrayList 中可以同时混存 String 和 Integer 类型的元素 D. 泛型信息在程序运行时仍然完整保留,可通过反射直接获取元素类型
某接口定义片段为:interface Speaker { String GREET = "Hi"; void speak(); void whisper(); }。现有类声明 class Robot implements Speaker,若不修改接口,下列哪种做法可使 Robot 类通过编译?A. 在 Robot 类中至少实现 speak() 方法即可 B. 在 Robot 类中实现 speak() 和 whisper(),并将 GREET 重新赋值为其他字符串 C. 将 Robot 声明为 abstract class Robot implements Speaker,可不实现任何抽象方法 D. 实现方法时可将 speak() 的访问权限声明为 protected
某图书类 Book 将成员变量 price 声明为 private,且不提供任何公有存取方法。同学甲认为:只要加了 private 修饰就等于完成了封装。同学乙随后补写了 public double getPrice() 和带范围校验的 public void setPrice(double p)(仅当 0≤p≤500 时才赋值)。现在外部方法调用 b.setPrice(600); System.out.print(b.getPrice());(b 的 price 初值为 80.0)。下列说法正确的是:A. 输出 600.0,甲观点正确 B. 输出 80.0,甲观点错误,封装需成对提供读写方法并在写方法中校验数据 C. 编译错误,setPrice 不能为 public D. 输出 0.0,因为非法值被自动归零
某程序中定义了方法:static void f(int[] a, int b){ a[0]=100; a=new int[]{7}; b=200; },主方法中有代码:int[] nums={1,2,3}; int n=5; f(nums,n); 执行后 nums[0] 与 n 的值分别为( ) A. 100 和 200 B. 100 和 5 C. 7 和 200 D. 7 和 5
有如下代码: int[] data = {2, 5, 8}; static void g(int[] a, int k) { a[1] = k; a = new int[]{7, 7, 7}; a[2] = 100; k = 50; } 调用 g(data, 3) 后,data[0]、data[1]、data[2] 的值依次是: A. 2 5 8 B. 7 7 7 C. 2 3 8 D. 7 7 100
某程序需在运行时先采集一条传感器读数,再依据该读数判断是否继续采集;由于判断条件必须基于第一次采集结果,循环体至少要执行一次。关于三种循环的选择,下列说法正确的是( ) A. 应选用 while 循环,因其先判断后执行,逻辑更安全 B. 应选用 do-while 循环,因其先执行循环体后判断条件,天然保证至少执行一次 C. 应选用 for 循环,因其必须先初始化条件才能运行 D. 三种循环在此场景下完全等价,可任意互换而不改变执行流程