package cn.dzr.jdbc.dao;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
public class DaoFactory {
private static UserDao dao = null;
private static DaoFactory instance = new DaoFactory();
private DaoFactory()
{
try
{
System.out.println("进入try方法");
Properties prop = new Properties();
File file = new File("src/daoconfig.properties");
InputStream in = new FileInputStream(file);
in = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.properties");
prop.load(in);
String userDaoName = prop.getProperty("UserDaoClass");
System.out.println(userDaoName);
Class clazz = Class.forName(userDaoName);
System.out.println("类加载完成!!");
dao = (UserDao)clazz.newInstance();
System.out.println("创建类成功!"+dao.getClass().getName());
}
catch(Exception e)
{
throw new ExceptionInInitializerError(e);
//初始化错误!
}
}
public static DaoFactory getInstance()
{
return instance;
}
public UserDao getUserDao()
{
return dao;
}
}
代码如上。
问题1:
private static UserDao dao = null;
private static DaoFactory instance = new DaoFactory();教程里说,这里的两句代码的顺序不能更换,原因是更换之后,因为dao = null 会在创建实例后执行,结果导致return的时候,返回一个空的dao.之后,经过测试,果然会出现这样的情况。
但是,我将dao改成非静态成员,或者只定义,不赋初值,结果dao的位置可以放在任意的地方,代码均能正确的执行。这里不理解的地方:
dao已经存在,否则new DaoFactory()里调用dao就会失败。
既然dao已经存在,private static UserDao dao = null; 不是已经被执行了么?
在 private static DaoFactory instance = new DaoFactory();
private static UserDao dao = null;
这里的过程到底是如何呢。
先把所有的成员变量都加载了,然后再执行构造方法?
接着按从上到下的顺序把每一条赋值语句(一些变量可能有初始化值,比如上面的设置为Null)都执行一次么?2, in = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.properties");
这句代码,检索的范围有多宽呢。只要配置文件是在这个工程里,都会被找到么?
3, 虚拟机是多线程执行么?
进入try方法
java.lang.NullPointException。
类加载完成!!
创建类成功!
空指针异常偶尔有情况会出现如上这种情况。
解决方案 »
- 关于在有返回值的方法中抛出RuntimeException
- 大家用netbeans还是eclipse
- 编译运行成功,但是界面邮编的JTable无法显示【附代码】
- 为什么用double,float,BigDecimal分别来实现2.0-1.9,结果却不同?
- 数组列表的方法,我有点问题!谢谢了!
- 哪位大侠能给一本学习XML的书~最好是中文的
- 是用getBundle();的问题
- 请教一个问题,在jform里面,如果我想给jmenu加入事件关联,给怎么办?
- 关于java RMI 在不同主机上无法绑定问题
- openoffice+jodconverter并发转换
- java实现类之间数据的传递,求解啊。
- private好像也不安全啊
http://wenku.baidu.com/view/73e53a353968011ca30091d9.html
问题2
是在src下面
问题3同问