全部来自 AI 原创生成并经逐题审校的题目,带 精品 标记的为 AI 复审通过。整卷生成请去组卷。
某学生编写图形界面程序,需要监听鼠标移动事件,但只关心 MouseMotionListener 接口中的 mouseDragged 方法,不关心 mouseMoved 方法。他声称:由于适配器类(如 MouseMotionAdapter)对接口方法作了空实现,因此继承适配器类后,即使一个方法也不重写,程序编译运行也能正常进行,且拖动事件发生时同样会执行他自定义的处理逻辑。请判断该说法是否正确。
登录后查看答案
判断:某类实现了 Serializable 接口,其中字段 score 未被 transient 修饰。将一个该类对象用 ObjectOutputStream 序列化写入文件后,再用 ObjectInputStream 反序列化恢复该对象,则恢复出的对象中 score 字段的值与序列化时该对象的 score 值相同;若将 score 改为 transient 修饰后重复上述过程,则恢复出的对象中 score 字段的值为该类型的默认值(如 int 型为 0)。
判断:小张需要逐行统计一个 UTF-8 编码中文文本文件中的内容并进行字符串比对。为了提升读取速度,他先用 FileInputStream(字节流)配合 8KB 缓冲区逐字节读出,再按单个字节直接转成 char 进行处理。因为缓冲区很大、速度很快,所以这种做法既能保证中文不被截断乱码,又是处理该文本任务的最佳选择。
判断:设类 Device 定义了方法 start(),类 Printer 继承 Device 并重写了 start(),同时 Printer 新增了特有方法 print()。执行语句 Device d = new Printer(); 后,通过引用 d 可以直接调用 print() 方法,且 d.start() 在运行时执行的是 Printer 中重写后的版本。
线程 t 已通过 new 创建并调用了 start() 方法,当前处于等待 CPU 调度的状态。某同学分析如下:(1) 此时 t 处于就绪状态;(2) 若 t 抢到 CPU 开始执行 run() 方法,则进入运行状态,从就绪到运行的转变是由程序显式调用某个方法触发的;(3) 在运行中若 t 调用 sleep(1000),将主动释放 CPU 并进入阻塞状态,1000 毫秒后重新进入就绪状态等待调度;(4) run() 方法执行完毕后,t 进入死亡状态,再次调用 start() 可使其重新运行。以上四条分析全部正确的判断为正确,否则为错误。
某学生编写程序读取一个仅含中文和英文字符的 UTF-8 编码文本文件,逐字节读取后按字节拼接输出,结果出现乱码。他因此断言:凡是出现乱码就说明字节流不能用于读取文件,必须改用字符流才能读取任何文件。请判断该说法是否正确。
判断下列说法的正误:在 Java 集合框架中,ArrayList 底层为数组、LinkedList 底层为双向链表,因此任何场景下 ArrayList 的增删操作都比 LinkedList 慢;又因为 ArrayList 支持随机访问,所以对于以尾部追加和按下标访问为主、极少在中间位置插入删除的场景,选用 ArrayList 比 LinkedList 更合适。
判断:在 Java 中,ArrayList 底层是数组,随机访问效率高,但在尾部追加元素也很高效;而 LinkedList 底层是链表,在头部插入元素比 ArrayList 更高效。因此无论何种使用场景,ArrayList 的增删操作都一定比 LinkedList 慢。
判断下列说法是否正确:在 Java 中,NullPointerException 和 ArrayIndexOutOfBoundsException 都继承自 RuntimeException,属于非受检异常,因此方法中可能抛出这两类异常的代码即使不被 try-catch 捕获、方法签名中也不用 throws 声明,编译仍能通过;而 FileNotFoundException 属于受检异常,编译器强制要求对其进行捕获处理或用 throws 声明,否则编译报错。
判断:若父类 P 中只定义了构造方法 P(int n),未定义无参构造方法,则子类 Q extends P 的构造方法若首行未显式写 super(...),编译将报错。
判断下列说法的正误:在 Java 中,构造方法内使用 this(参数列表) 可以调用本类的另一个构造方法,但该语句必须位于构造方法的第一行,因此以下代码能够正确编译并运行: class Student { String name; Student() { this("默认"); } Student(String name) { this(); this.name = name; } }
判断:在 Java 中执行 int[][] b = new int[2][]; b[0] = new int[3]; b[1] = new int[5]; 后,b.length 的值为 2,且 b[0].length 与 b[1].length 的值可以不同,因此语句 System.out.println(b[0][3]); 会抛出 ArrayIndexOutOfBoundsException。
在 Java 中,某同学依据“容量大小由字节多少决定”得出如下结论:long 类型占 8 个字节,float 类型只占 4 个字节,因此把 long 型变量赋值给 float 型变量属于大容量向小容量转换,必须使用强制转换语法 (float),而把 float 型变量赋值给 long 型变量则可以自动类型转换。请判断该结论是否正确。
有如下代码片段: int p = 7, q = 2; boolean r = (p % q == 1) | (++q > 0) && (p < 0); 某同学判断:由于 (p % q == 1) 为 true,整个表达式用普通或开头仍会短路,右侧全部不执行,因此 q 的值执行后仍为 2。请判断该同学的说法是否正确。
判断下列表述的正误:「Java 的跨平台性意味着同一份 JVM 可以在 Windows、Linux、macOS 等不同操作系统上通用;正因为 JVM 本身跨平台,编译后的字节码才能实现一次编译、到处运行。」