


request,response,
session , application , pageContext,
page, out,
exception,
config




1,因为main方法位于class B的内部,所以想要执行main方法,首先要先加载B的class文件
2,加载B的class文件,会先执行B的静态域初始化(静态域包括静态变量和静态块),静态变量和静态块的执行顺序是根据其在源代码中的顺序决定的,本题中,静态变量执行优先于静态块的执行
3,在执行public static B t1 = new B();的时候,因为需要执行new B()对t1进行初始化,所以会再次加载B的class文件,而此次加载,JVM会认为是B的class文件的第二次加载了,不属于首次加载,所以在执行new B()的时候,不会在执行静态域了,因此,按照(静态域->普通代码块->构造方法)顺序,会执行普通代码块和构造方法,输出构造块
4,执行t2的初始化,也就是new B(),与上面第3点相同,输出"构造块"
5,回到第一次类加载,继续进行静态域执行,也就是执行static块,此时,输出"静态块"
6,执行main方法中的new B(),此时不会再执行静态域初始化了,而是只会执行普通代码块+构造方法,也就是输出"构造块"
7,最终输出的结果应该为: 构造块,构造块,静态块,构造块

CGI对每一个请求产生新的进程,服务返回就销毁,且一个进程只能服务于一个用户,造成很大的开销,效率上低于servlet
CGI是传统技术,不具有平台无关性,而servlet使用java编写,具有平台无关性



本题涉及到基本类型的封装类型的特殊性质,以及按值传递,和按引用传递
首先需要知道,byte的取值范围为-128~127, 且127 + 1 = -128
Byte a = 127 会发生自动装箱
1, add(++a)
首先可以明确的是,向add()中传递的Byte的value一定是-128,且这个-128是一个新生成的Byte对象,a不指向这个新生成的对象,a仍然只向原有的对象(这个是基本类型包装类的特殊性质,发生改变,就新构造一个对象)
2,进入到add()方法中,b = b++;
执行b = b++的时候,b仍然指向-128这个对象,b++会新生成一个Byte(-127),但是没有被b引用





ConcurrentHashMap的写put()是加锁的,读get()是不加锁的



但是,static修饰的方法,在实现类中,只能通过接口.static方法来引用,default方法,只能通过实现类对象来引用
接口中的方法,默认使用public abstract方法来修饰
接口中的字段,默认使用public static final 来修饰


对java扩展方法没有了解






根据评论,说一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。
这一点,还没有弄明白
