public class OracleUtil { private static OracleUtil oracleUtil = new OracleUtil(); private BasicDataSource bds=null; private OracleUtil(){ try { Properties props = new Properties(); props.load(OracleUtil.class.getClassLoader().getResourceAsStream("connection.properties")); // 得到当前类的类加载器,以流的方式读取配置文件 bds=new BasicDataSource(); bds.setDriverClassName(props.getProperty("orcl.driver")); bds.setUrl( props.getProperty("orcl.connection")); bds.setUsername( props.getProperty("orcl.name")); bds.setPassword(props.getProperty("orcl.password")); bds.setInitialSize(5); bds.setMaxActive(9); bds.setMaxIdle(7); bds.setMinIdle(4); bds.setMaxWait(5000); } catch (IOException e) { e.printStackTrace(); } } public static OracleUtil getOracleUtil(){ return oracleUtil; } public Connection getConnection() { Connection conn = null; try { conn = bds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; }
public class SearchOracleIP { OracleUtil oracleUtil; Connection conn; PreparedStatement pstmt; ResultSet rs; Map map; public Map SearchByIP() { oracleUtil=OracleUtil.getOracleUtil(); conn = oracleUtil.getConnection();
conn = oracleUtil.getConnection();oracleUtil不是静态的引用类型变量吗?为什么可以调用非静态的getConnection();方法呢?
1、oracleUtil 是个静态变量(本质还是引用一个对象)
2、oracleUtil.getConnection(); 调用oracleUtil引用的对象的那个getConnection 方法;
是没有问题的。
oracleUtil 不是静态变量名 是变量引用 oracleUtil
OracleUtil oracleUtil;
oracleUtil=oracleUtil.getOracleUtil();这样绝对是null
[code="java"]oracleUtil=OracleUtil.getOracleUtil();[/code]\
获取的是一个OracleUtil的实例,实例当然可以调用成员方法
这是一个典型的单例模式吧
private static OracleUtil oracleUtil = new OracleUtil();
上面已经实例化了,再看构造方法是私有的
可以看下单例模式的懒汉方法~
谁说静态的引用类型变量不可以调用非静态的方法了, 你搞反了吧, 是静态的方法不可以调用非静态的变量或方法.