您的位置:首页 > 其它

Class.forName()的作用

2013-03-25 12:50 218 查看
package j13_5;

public class Main {

static{

System.out.println("Class Main loaded");

}

public Main(){

System.out.println("create a instance of A");

}

public static void main(String[] args) throws Exception{

Class.forName("j13_5.Main");

}

}

输出:

Class Main loaded

create a instance of Main

从这里可以看的出, Class.forName()是能使Main类中的static block中的命令执行。

package j13_5;

public class Main {

static{

System.out.println("Class Main loaded");

}

public Main(){

System.out.println("create a instance of Main");

}

public static void main(String[] args) throws Exception{

//Class.forName("j13_5.Main");

Main a = new Main();

Main b = new Main();

}

}

输出:

Class Main loaded

create a instance of Main

create a instance of Main

从这里可以看出,new也会使Main类中的static block中的命令执行,不过只执行一次。

我想说明的是连接MySql数据库的时候,Class.forName("com.mysql.jdbc.Driver")的作用,执行static block中的命令,其目的是为了使将Driver对象注册到DriverManager中,保证相应的Driver类已经被加载到 jvm中。

package com.mysql.jdbc

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
// ~ Static fields/initializers
// --------------------------------------------- //   A
// Register ourselves with the DriverManager
//
static {
t ry {   //使将Driver对象注册到DriverManager中
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
// ~ Constructors
// -----------------------------------------------------------
/**
* Construct a new driver and register it with DriverManager
*
* @throws SQLException
*              if a database error occurs.
*/
public Driver() throws SQLException {
// Required for Class.forName().newInstance()
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: