全部来自 AI 原创生成并经逐题审校的题目,带 精品 标记的为 AI 复审通过。整卷生成请去组卷。
某线程 t 依次经历以下操作:① 通过 new Thread() 创建,尚未调用 start();② 调用 start() 后等待 CPU 调度;③ 被调度器选中开始执行 run() 方法;④ 执行过程中调用 sleep(1000);⑤ 休眠时间到后被调度器再次选中继续执行;⑥ run() 方法执行完毕。按顺序写出 t 经历的状态序列:____、____、____、____、____、____。
登录后查看答案
线程 X 进入某对象的 synchronized 代码块后,先调用了 sleep(500),随后(被唤醒后)在同一块中调用了 wait()。已知 Thread 类的 sleep 方法休眠时对所持对象锁的处理与 Object 类的 wait 方法相反,且 wait 必须依靠 notify/notifyAll 唤醒而 sleep 到时自动醒来。请在比较两者后填空:sleep 休眠期间线程 X ____(填“释放”或“不释放”)该对象锁,而执行 wait 后线程 X ____(填“释放”或“不释放”)该对象锁,且 wait 只能通过 ____(填“notify/notifyAll 通知”或“时间到自动”)方式结束等待。
在 Java 中,线程对象通过 new 创建但尚未调用 start() 方法时,处于____状态;调用 start() 后线程进入就绪状态,是否被调度执行由____决定;线程执行 Thread.sleep() 休眠时进入的是____状态(填写“运行”或“阻塞”)。
在 Java 中,某类实现了 Serializable 接口,其字段 score 被 transient 修饰,字段 name 未被修饰。将该类的一个对象(score=95,name="Tom")经 ObjectOutputStream 写入文件后,再用 ObjectInputStream 的 ____ 方法读回。恢复后的对象中,name 的值为 "Tom",而 score 的值为 ____(即其类型对应的默认值)。
某方法中有如下代码(假设编译器不做常量折叠等任何优化,且仅统计直接产生的 String 对象,不统计编译器内部可能使用的 StringBuilder 等辅助对象): String a = "log" + "in" + "ok"; String b = new String("user"); String s = "id"; for (int i = 0; i < 3; i++) { s = s + "*"; } 其中,第 1 行字面量拼接产生 3 个 String 对象;第 2 行 new 明确创建 1 个;for 循环中每次执行 s = s + "*" 都会新建 1 个 String 对象。 则上述代码运行结束后,共创建 String 对象的个数是____个,此时变量 s 的值为____。
Java 中,BufferedOutputStream 在内存中维护一个缓冲区,数据先写入该缓冲区,累积后再一次性写入底层输出流,从而减少____次数,提升读写性能。若程序调用 write() 写入数据后既未调用 flush() 也未调用 close() 就异常终止,缓冲区中尚未落盘的数据将____。
在 Java 异常体系的继承结构中,受检异常(如 IOException)和非受检异常(如 RuntimeException 及其子类)都归属同一个父类分支。请填空:受检异常与非受检异常共同直接或间接继承自的、Throwable 的直接子类是 ____;而表示严重系统问题的、不应被 try-catch 捕获处理的另一分支是 ____。
在 Java 异常体系的继承结构中,RuntimeException 直接继承自 Exception,而 Exception 又直接继承自 Throwable。已知某类 X 直接继承自 RuntimeException,某类 Y 直接继承自 Error。若按继承链向上追溯,X 与 Y 首个共同的祖先类是 ____,且 X 所代表的那一类异常在异常分类体系中属于____异常(填"受检"或"非受检")。
已知父类 Shape 中定义了方法 double area(Shape s),子类 Circle 中又定义了方法 double area(Circle c)。从方法签名的角度看,这两个方法的名称相同而参数列表不同,且分布在两个具有继承关系的类中,这种现象属于重写与重载的____(填"重写"或"重载");若调用时传入的实参实际指向 Circle 对象,最终执行哪个 area 方法是在编译期确定还是在运行期确定?____(填"编译期"或"运行期")。
已知类 Employee 定义了方法 work(),类 Manager 继承 Employee 并重写了 work(),同时 Manager 新增了特有方法 manage()。执行语句 Employee e = new Manager(); 后:第一空,e.work() 实际执行的是____类中的 work() 方法;第二空,若直接调用 e.manage(),则编译____(填“通过”或“不通过”);第三空,若要通过 e 调用 manage(),须先使用关键字____进行类型判断,再向下转型为 Manager 类型。
设有定义语句 int a[2][3] = {1, 2, 3, 4};(未显式分行),C 语言按行优先顺序将初始化列表中的数据依次填入二维数组,不足部分自动补 0。则元素 a[1][0] 的值为____,元素 a[1][2] 的值为____。
有代码:int[] a = new int[5]; 通过循环依次赋值 a[0]=7, a[1]=2, a[2]=9, a[3]=4, a[4]=6;随后调用方法 reverse(a) 将数组元素原地逆置。逆置完成后 a[2] 的值为____。另有一段代码:String[] s = new String[3]; 未做任何赋值,此时 s[0] 的默认值为____,若直接执行 s[0].length(),程序将抛出(填写异常类名)____。
已知类 Student 中程序员只定义了一个构造方法:Student(String name) { this.name = name; }。现执行语句 Student s = new Student(); 欲创建对象,则该代码____(填:能/不能)通过编译,原因是手写带参构造后,系统不再提供____构造方法。
在 Java 中,为完成封装,通常将类的成员变量用 ____ 修饰符声明为私有,同时对外提供公有的 getter 方法用于读取、setter 方法用于写入,并可在写入方法中对数据进行合法性校验。
在 Java 中执行语句 int[] nums = new int[8]; 后,该数组共有 8 个元素,其最大合法下标是 ____。若程序中写下 nums[8] = 5;,运行时会抛出 ArrayIndexOutOfBoundsException 异常。
设有定义 int s[2][3] = {{7, 8, 9}, {4, 5, 6}};,则数组元素 s[1][2] 的值为____,元素 s[0][2] 的值为____。
某售票系统中有两个线程 t1、t2 同时访问同一方法 sell(),方法体为 synchronized(this){ /* 扣减共享票数 */ }。现 t1 执行时已进入同步块,此时 t2 尝试进入同一对象实例的 sell() 方法,则 t2 的状态为____;若将代码改为两个线程各自 new 了一个不同的 Ticket 对象并调用各自的 synchronized(this) 方法,则线程间____(填“会”或“不会”)互斥,原因是二者锁定的____不同。
线程 A 在 synchronized 方法内先后执行了 this.wait() 和 Thread.sleep(1000) 两个休眠调用。从锁的角度看:其中 wait() 会____对象锁,而 sleep() ____释放对象锁(填“释放”或“不释放”);从唤醒方式看,sleep() 到时间后自动恢复运行,而 wait() 必须由其他线程调用同一对象的____方法才能被唤醒;此外这两个方法所属的类不同:wait() 定义于____类,sleep() 定义于____类。
在 Java 多线程中,sleep() 方法定义于 Thread 类,而 wait() 方法定义于 Object 类。当线程在同步代码块中执行 sleep() 时,它____(填“释放”或“不释放”)对象锁;执行 wait() 时则____(填“释放”或“不释放”)对象锁。此外,wait() 被调用后必须由其他线程调用____方法才能被唤醒继续执行。
某程序用 BufferedOutputStream 向文件写入数据,write() 已调用多次,但未调用 flush() 或 close(),程序随即异常终止,结果文件中缺少了最后写入的一部分数据。从缓冲流的工作机制看,这是因为数据还滞留在____中尚未写入底层输出流;缓冲流之所以能提升性能,是因为它将多次小的读写合并,从而减少了____的次数。