目录
3.What is Static Method in Java()
7.@SuppressWarnings(“deprecation”)的功能是什么?
9-15
1.下列哪些操作会使线程释放锁资源?
1.sleep会使当前线程睡眠指定时间,不释放锁
2.yield会使当前线程重回到可执行状态,等待cpu的调度,不释放锁
3.wait会使当前线程回到线程池中等待,释放锁,当被其他线程使用notify,notifyAll唤醒时进入可执行状态
4.当前线程调用 某线程.join()时会使当前线程等待某线程执行完毕再结束,底层调用了wait,释放锁
2.在Java中下面Class的声明哪些是错误的?
1、抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。
2、抽象方法必须由子类来进行重写。
3、只要包含一个抽象方法的类,该类必须要定义成抽象类,不管是否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、abstract不能与final并列修饰同一个类。
6、abstract 不能与private、static、final或native并列修饰同一个方法。
3.What is Static Method in Java()![](https://i-blog.csdnimg.cn/blog_migrate/b928f9a001a6e665902086145130ab9f.png)
A:静态方法是一个属于类而不属于对象(实例)的方法。(√)
B:静态方法只能访问静态数据。无法访问非静态数据(实例变量)。(√)
C:静态方法只能调用其他静态方法,不能从中调用非静态方法。(√)
D:静态方法不能通过类名直接访问,也不需要任何对象。(×) 静态方法可以直接用类名访问。
4.以下代码执行的结果是多少()?
public class Demo {
public static void main(String[] args) {
Collection<?>[] collections = {new HashSet<String>(), new ArrayList<String>(), new HashMap<String, String>().values()};
Super subToSuper = new Sub();
for(Collection<?> collection: collections) {
System.out.println(subToSuper.getType(collection));
}
}
abstract static class Super {
public static String getType(Collection<?> collection) {
return “Super:collection”;
}
public static String getType(List<?> list) {
return “Super:list”;
}
public String getType(ArrayList<?> list) {
return “Super:arrayList”;
}
public static String getType(Set<?> set) {
return “Super:set”;
}
public String getType(HashSet<?> set) {
return “Super:hashSet”;
}
}
static class Sub extends Super {
public static String getType(Collection<?> collection) {
return "Sub"; }
}
}
知识点:静态分派
[JVM]静态分派与动态分派_风一样的男人的博客-CSDN博客
5.运行代码,输出的结果是()
public class P {
public static int abc = 123;
static{
System.out.println("P is init");
}
}
public class S extends P {
static{
System.out.println("S is init");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(S.abc);
}
}
答案:D
属于被动引用不会出发子类初始化
1.子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会导致子类初始化
2.通过数组定义来引用类,不会触发此类的初始化
3.常量在编译阶段会进行常量优化,将常量存入调用类的常量池中, 本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。
6.执行以下程序,最终输出可能是:
循环在空格输出前,所以循环输出之后肯定有空格输出,而循环的数字中肯定有4,所以选C
7.@SuppressWarnings(“deprecation”)的功能是什么?
1.Java三大注解分别是@Override @Deprecated @Suppresswarnings
2.@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错
3.@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等
4.@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务
8. 下面代码的运行结果是()
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
- 成员变量有初始化
- 局部变量中没有初始化,在mian方法中不初始化不会提示有错,但是运行会报错(除非使用{},在{}里面赋值)。
9.下面有关servlet和cgi的描述,说法错误的是?
CGI和servlet 的总结与对比:
1. CGI: 主要用Perl、Shell Script或C编写
Servlet:用java语言编写
2. CGI:每个请求都会启动一个新的进程,每个进程只为一个客户所服务,导致服务器内存和cpu开销大。
Servlet:每个请求会产生新的线程,而不是进程,减少系统中进程数量,并发处理能力强。多个客户能在同一个进程中的同时得到服务。
3. CGI进程在服务完成后就被销毁,所以效率上低于servlet。
Servlet进程(实例)处于服务器进程中,只有在服务器被卸载时才会被卸载。
4. CGI是不可移植的,是运行于特定平台上的。
Servlet是可移植的,运行于JVM上的。
10.下面有关SPRING的事务传播特性,说法错误的是?
1.PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
2.PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
3.PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
4.PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
5.PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6.PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
7.PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。