全部来自 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. 抛出异常
有如下代码片段: public static int test() { int r = 0; try { throw new RuntimeException(); } catch (RuntimeException e) { r = 5; return r; } finally { r = 10; } } 调用 test() 的返回值为____。若将 finally 块中语句改为 return r,则返回值变为____。
已知父类 P 仅定义了构造方法 P(String tag){ this.tag = tag; } 和字段 protected String tag = "P",未定义无参构造。子类 S extends P 中定义字段 String tag = "S",其构造方法为:S(){ super("BASE"); },另有一个方法 void show(){ System.out.println(super.tag + ":" + tag); }。执行 new S().show(); 后,程序输出为____。
某支付系统中,「账户」类需提供公共字段(余额、户主)与部分已实现的通用校验逻辑,且各类账户存在共同血统;同时,系统希望让账户、优惠券、积分包等彼此无继承关系的类都支持统一的「可退款」能力契约。关于抽象类与接口的选型,下列说法正确的是: 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 关键字
判断:设类 Device 定义了方法 start(),类 Printer 继承 Device 并重写了 start(),同时 Printer 新增了特有方法 print()。执行语句 Device d = new Printer(); 后,通过引用 d 可以直接调用 print() 方法,且 d.start() 在运行时执行的是 Printer 中重写后的版本。
某 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 类 Student 中定义了成员变量 int score,并有两个构造方法:Student(int score){ this.score = score; } 和 Student(){ this(80); }。在 main 方法中执行 Student s = new Student(); 后,对象 s 的 score 成员变量的值为____;若将第二个构造方法改为 Student(){ score = 90; this(80); },则该代码能否编译通过(填「能」或「不能」):____。
有如下代码片段:int s = 4, t = 7; boolean r = (s++ > 4) && (++t > 10); 执行后,r、s、t 的值分别为____、____、____。
有如下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
某类中已有方法 void show(int[] a, int n)。现新增以下四个方法:①int show(int[] a, int n);②void show(double[] a, int n);③void show(int[] a);④void show(int[] b, int m)。其中能与原方法构成方法重载的有____个(填写数字)。
设有程序段:int a; char c; scanf("%d", &a); getchar(); scanf("%c", &c); 运行时从键盘分两行输入:第一行输入 9 后按回车键,第二行输入字母 M 后按回车键。请写出执行完该程序段后,a 的值是____,c 的值是____。
线程 t 已通过 new 创建并调用了 start() 方法,当前处于等待 CPU 调度的状态。某同学分析如下:(1) 此时 t 处于就绪状态;(2) 若 t 抢到 CPU 开始执行 run() 方法,则进入运行状态,从就绪到运行的转变是由程序显式调用某个方法触发的;(3) 在运行中若 t 调用 sleep(1000),将主动释放 CPU 并进入阻塞状态,1000 毫秒后重新进入就绪状态等待调度;(4) run() 方法执行完毕后,t 进入死亡状态,再次调用 start() 可使其重新运行。以上四条分析全部正确的判断为正确,否则为错误。
某票务系统有 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() 使其重新运行