哥们纠结一个问题为什么静态引用类型变量可以调用非静态的方法
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();方法呢?

5个回答

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();
上面已经实例化了,再看构造方法是私有的
可以看下单例模式的懒汉方法~

utopialxw
utopialxw 不好意思 是饿汗式
7 年多之前 回复

谁说静态的引用类型变量不可以调用非静态的方法了, 你搞反了吧, 是静态的方法不可以调用非静态的变量或方法.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问