Java基础练习题-错题集(三)
(1)我们在程序中经常使用“System.out.println()”来输出信息,语句中的System是包名,out是类名,println是方法名。
选项:
A. 对
B. 错
(2)以下哪些继承自 Collection 接口()
选项:
A. List
B. Set
C. Map
D. Array
(3)下列哪些情况下会导致线程中断或停止运行()
选项:
A. 抛出InterruptedException异常
B. 线程调用了wait方法
C. 当前线程创建了一个新的线程
D. 高优先级线程进入就绪状态
(4)以下说法中正确的有?
选项:
A. StringBuilder是 线程不安全的
B. Java类可以同时用 abstract和final声明
C. HashMap中,使用 get(key)==null可以 判断这个Hasmap是否包含这个key
D. volatile关键字不保证对变量操作的原子性
=========================================解题思路=================================
(1)正确答案:B
System是java.lang中的类,out为System中的一个静态成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类的方法,所有可以调用类.静态方法.println()方法。
public final class System { public final static InputStream in = null; public final static PrintStream out = null; }
(2)正确答案:A B
集合常考点:
(3)正确答案:AB
A 选项:Interrupt 确实会导致线程中断,备注点:若换一种说法 捕获到异常就代表线程不会中断和停止
B 选项:线程调用 wait()方法,释放了锁,会强制导致当前正在执行的线程中断,需要 notify()或 notifyall()来“唤醒“
C 选项:当线程创建一个新的线程时,CPU 时间片不会剥夺当前线程运行的“权利”
D 选项:当高优先级线程进入就绪状态,也需要等待当前线程的运行结束才可以继续运行,此时当前线程处于运行中 RUBBABLE 状态中的 READY 就绪态
(4)正确答案:AD
A选项:
首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因 String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
String:适用于少量的字符串操作的情况;
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况;
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
B选项:abstract修饰的类是抽象类,是可以继承的,而final修饰的类表示不能再被继承,故肯定不能共同使用。故B错
C选项:HashMap中提供的get(key)获取的是变量,无法判断是否存在key。所以C是错的
D选项:volatile关键字是一种轻量级的同步机制,只保证数据的可见性,而不保证数据的原子性。故D对
volatile关键字的作用可参考:https://blog.csdn.net/xinghui_liu/article/details/124379221