您的位置:首页 > 编程语言 > Java开发

JAVA中CLASS.FORNAME的含义

2015-08-08 18:35 357 查看
Class.forName(xxx.xx.xx) 返回的是一个类, .newInstance() 后才创建一个对象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段

Class aClass = Class.forName(xxx.xx.xx);

Object anInstance = aClass.newInstance();

[b]*Class.forName(“”).newInstance()返回的是object*[/b]

but there is some limit for this method to create instance

that is your class constructor should no contain parameters, and you should cast the instance manually.

Class Driver{

protected static Driver current;

public static Driver getDriver(){

return current;

}

}

Class MyDriver extends Driver{

static{

Driver.current=new MyDriver();

}

MyDriver(){}

}

用时:

Class.forName(“MyDriver”);

Driver d=Driver.getDriver();

有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

Class.forName(xxx.xx.xx) 返回的是一个类,

.newInstance() 后才创建一个对象

Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段

在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:

public class MyJDBCDriver implements Driver {

static {

DriverManager.registerDriver(new MyJDBCDriver());

}

}

所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了

下面给一个例子:Class的最大作用就是实现了动态加载类,为多态提供了很好的帮助

class A
{
void aa()
{
System.out.println ("A里的");

}

}
class B extends A
{
void aa()
{
System.out.println ("B里的");

}

}
class C extends A
{
void aa()
{
System.out.println ("C里的");

}

}

public class ClassDemo
{

public static void main(String[] args)
{
ClassDemo t=new ClassDemo();
t.show("C");
}
void show(String name)
{
try
{
A show=(A)Class.forName(name).newInstance();
show.aa();
}
catch(Exception e)
{
System.out.println (e);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: