1.
第一个错误是 wait() 方法要以 try/catch 包覆,或是掷出 InterruptedException 才行
因此答案就是因为缺少例外捕捉的 InterruptedException
第二个错误的地方是, synchronized 的目标与 wait() 方法的物件不相同,会有 IllegalMonitorStateException ,不过 InterruptedException 会先出现,所以这不是答案
最后正确的程式码应该是这样:
void waitForSignal() {
Object obj = new Object();
synchronized (obj) {
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
obj.notify();
}
}
2.
a选项linkedlist类是实现了List接口,而不是继承
b选项
AbstractSet类实现
Set接口
c选项HashSet继承 AbstractSet类,同时也实现set
3.
1:创建时的区别:
Statement statement = conn.createStatement();
PreparedStatement preStatement = conn.prepareStatement(sql);
执行的时候:
ResultSet rSet = statement.executeQuery(sql);
ResultSet pSet = preStatement.executeQuery();
由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少遍,都不会再去进行编译,
而 statement 不同,如果执行多变,则相应的就要编译多少遍sql,所以从这点看,preStatement 的效率会比 Statement要高一些
4.
含有抽象方法的类(包括直接定义了抽象方法;继承一个抽象父类,但没有完全实现父类包含的抽象方法;实现一个接口,但没有完全实现接口包含的抽象方法)只能被定义成抽象类。
A:用于修饰抽象类或者抽象方法
B:final修饰的类不能被继承
C:抽象类不能被实例化,无法使用new关键字调用抽象类的构造器创建抽象类的实例,即使抽象类不包含抽象方法,也不能被实例化。
5.