场景:
在练习
错题
错题1描述:
假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4,2,5,0,3,0]。 执行下面的方法numQuest(),最终的输出结果是什么?
private List<Integer> nums;
//precondition: nums.size() > 0
//nums contains Integer objects
public void numQuest() {
int k = 0;
Integer zero = new Integer(0);
while (k < nums.size()) {
if (nums.get(k).equals(zero))
nums.remove(k);
k++;
}
}
A. [3, 5, 2, 4, 0, 0, 0, 0]
B. [0, 0, 0, 0, 4, 2, 5, 3]
C. [0, 0, 4, 2, 5, 0, 3, 0]
D. [0, 4, 2, 5, 3]
原因分析:
结果中数组的第一个元素 0 是 原数组中的第二个0。
这个程序就是在删除数组中的0 ,但是会有个小问题,就是连续的0会只删除一个。
原因:当执行remove的时候,ArrayList 数组的 size 会变小一个,原本的位置上的 0 会被后面的 0 给替代;而在执行完remove后执行了k++;所以跳过了第二个0
答案: D
错题2描述:
抽象类方法的访问权限默认都是public。( )
A. 正确
B. 错误
原因分析:
关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的
JDK 1.9时,接口中的方法可以是private的
答案:B
错题3描述:
关于Java语言描述正确的是? ( )
A. java和C++都保留了指针
B. java和C++都有三个特征:封装、继承和多态
C. java的垃圾回收机制是指程序结束时系统自动回收内存
D. 以上说法都不正确
原因分析:
现在懂了,
java和C++都有三个特征:封装、继承和多态
答案:B
错题4描述:
以下代码执行的结果显示是多少()?
A. num * count = 505000
B. num * count = 0
C. 运行时错误
D. num * count = 5050
原因分析:
看错了,以为是count+=i ,没想到是count+=count一直是0
答案:B
错题5描述:
关于volatile关键字,下列描述不正确的是?
A. 用volatile修饰的变量,每次更新对其他线程都是立即可见的。
B. 对volatile变量的操作是原子性的。
C. 对volatile变量的操作不会造成阻塞。
D. 不依赖其他锁机制,多线程环境下的计数器可用volatile实现。
原因分析:
错了n遍,受不了
对volatile变量的操作是原子性的(×)
不依赖其他锁机制,多线程环境下的计数器可用volatile实现。(×)
答案:B D