InputStream   is = DBConn.class.getClassLoader().getResourceAsStream("database.propertie")
database.propertie是一个文件。
getClassLoader()表示返回类加载器,关键是为什么要加个class这个class是关键字class DBConn.class.  这个什么意思呢
下面是源代码:public class DBConn {
private static String jdbcDriver = null;
private static String jdbcUrl =null ;
private static String jdbcUser = null;
private static String jdbcPasswd = null;
static{
InputStream is = null;
try {
is = DBConn.class.getClassLoader().getResourceAsStream("database.properties");
Properties p = new Properties();
p.load(is);//加载流
//解析流
jdbcDriver = p.getProperty("jdbcDriver");
jdbcUrl = p.getProperty("jdbcUrl");
jdbcUser = p.getProperty("jdbcUser");
jdbcPasswd = p.getProperty("jdbcPasswd");


} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

public static Connection getConn (){
/**
 * @return指定数据库的连接对象
 */

Connection  conn =null;
try {
Class.forName(jdbcDriver);
conn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPasswd);//导入import java.sql.DriverManager;且捕获异常。
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}/**
 * @关闭用到的对象。
 *
 */
public static void closeAll(ResultSet rt,Statement st,Connection conn){

if(rt != null){
try {
rt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}public static void main(String[] args) {
DBConn.getConn();
}
}

解决方案 »

  1.   

    DBConn.class 返回一个代表DBConn的Class对象。有了Class对象才能getClassLoader()。还可以做些反射的事
      

  2.   

    DBConn.class 返回一个代表DBConn的Class对象
    就是类的类有点绕,面向对象里称为元类
    拿到这个就可以通过反射进行操作
      

  3.   

    如果不加class 那JVM就不知道要加载哪个类的加载器啦,加了class就可以返回一个class对象,也就是告诉了JVM 这个类是DBConn而不是别的。再说远点,因为反射是在编译器去调用那些未知的class所以必须要得到Class Object,才能调用反射的APIs
      

  4.   

    这是java虚拟机的反射机制,在虚拟机里,每一个类(字节码)对应一个Class对象,可以理解为Class对象管理这些类,然后通过这个超级对象得到你想要的具体对象。
    DBConn.class 返回一个管理DBConn的Class对象
    DBConn.class.getClassLoader()得到这个DBConn类的加载器