用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

神马    -  云代码空间

—— 任何傻瓜都能写出计算机可以理解的代码,好的程序员能写出人能读懂的代码。

java中Class.forName的含义

2013-01-11|2168阅||

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

Class.forName(xxx.xx.xx) 返回的是一个类, .newInstance() 后才创建一个对象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
Class aClass = Class.forName(xxx.xx.xx);
Object anInstance = aClass.newInstance();

Class.forName("").newInstance()返回的是object
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);
        }


    }


}


顶 2踩 1收藏
文章评论
    发表评论

    个人资料

    • 昵称: 神马
    • 等级: 高级设计师
    • 积分: 5284
    • 代码: 1024 个
    • 文章: 154 篇
    • 随想: 57 条
    • 访问: 358 次
    • 关注

    站长推荐