java 容易被遗忘的点
最近看了些设计模式,发现自己在一些java点上存在疏忽,整理整理:
1、Proxy和InvocationHandler
在java中动态代理用到的类,实现代理效果
Proxy.newProxyInstance的3个参数说明:
根据传入的第二个参数interfaces动态生成一个类$Proxy0,该类实现interfaces中的接口;
第一个参数classloder将刚生成的$Proxy0类加载到jvm中
第三个参数,调用$Proxy0的构造函数 创建$Proxy0的对象
代理可以应用到aop、spring中的事物管理等;
2、Observable类 和Observer接口
# import java.util.Observable;
# import java.util.Observer;
主要方法包括:Observable类的setChanged()、notifyObservers()、addObserver();
Observer的public void update(Observable o, Object arg);
3、ExecutorService和Executors
java用来执行并发操作的工具类
4、SoftReference 和weakreference
做缓存和gc处理用。
5、守候进程
final static long N=100000;
public void run(){
try{
System.out.println("测试 Finally 会不被执行");
for(long i=0;i<N;i++){long a=i+1;
System.out.println("a====="+a);
}
}
finally{
System.out.println("Finally 被执行");
}
}
public static void main(String[] args){
Thread f = new Thread(new Finally());
f.setDaemon(true);
f.start();
}
finally方法不一定执行,因为finally为守候进程,当主程序结束时,没有非守候进程的话,jvm将停止。
6、finally执行测试
System.out.print("测试finally单纯修改返回值");
int i = 1;
try {
return i;
} finally {
i = i + 10;
}
返回的i为1;
6、ThreadLocal的用法
确保在多线程,各个线程获得自己的对象,ThreadLocal。set(),ThreadLocal。get();
可以用来在各个dao中保存connection连接。