A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小黑马 黑马帝   /  2012-9-7 16:20  /  1173 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package com.heima.factory;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

import com.heima.dao.UserDao;

public class DaoFactory1 {
   
    public static void main(String[] args){//这个是工厂类,main是为了测试
        DaoFactory1 factory1 = DaoFactory1.getInstance();
        UserDao dao = factory1.getDao();
        System.out.println(dao);
        
    }
    private static DaoFactory1 factory = new DaoFactory1();
    private static UserDao userDao = null;
    private DaoFactory1(){   
        try {
            Properties prop = new Properties();            
/*            此种方法不够灵活,配置文件换了位置就找不到了
            InputStream is = new FileInputStream("src"+File.separator+"daoconfig.properties");   
            
*/            
            InputStream is = DaoFactory1.class.getClassLoader().getResourceAsStream("daoconfig.properties");
            prop.load(is);            
            String clazzName = prop.getProperty("userDaoClass");        
            System.out.println("aa");  //执行了
            Class clazz =  Class.forName(clazzName);
            System.out.println("bb");   //执行了
            UserDao user = (UserDao) clazz.newInstance();
            System.out.println(user); //对象有地址
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    };   
    public static DaoFactory1 getInstance(){
        return factory;
    }
    public static UserDao getDao(){        
        return userDao;
    }
}
这是一个工厂类,为了实例化UserDao返回实例化对象userDao
执行结果
aa
bb
com.heima.dao.impl.UserDaoJdbcImpl@186d4c1
null

为什么最后返回是null值呢?


3 个回复

倒序浏览
{:soso_e128:}
回复 使用道具 举报
本帖最后由 李秀昂 于 2012-9-7 18:44 编辑

private static UserDao userDao = null;
...
UserDao user = (UserDao) clazz.newInstance();

你定义了一个成员变量UserDao通过工厂里的getDao()方法返回了UserDao的实例,但是你的程序里面根本没有给它赋值,下面这句里面就不要重新定义一个UserDao,直接赋值给这个成员变量userDao就行了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马