我写了半天,没好用Class refClassName = Class.forName(ref);
refClassName ---->? How to do
谢谢

解决方案 »

  1.   

    Class.forName();用得多的就是在jdbc的时候.
    直接用就是了啊.
    Class.forname("oracle.jdbc.driver.OracleDriver");
      

  2.   

    定义一个对象?
    生成对象的话(转换类型)Class.forName(“。。”)。newIn....() 这个方法
      

  3.   


    那是传过来的str 啊!!! 
      

  4.   

    http://blog.csdn.net/bipeng/archive/2008/01/22/2059725.aspx这里有一篇文章你看看
      

  5.   


    Class<objest> refClassName = Class.forName("java.lang.String"); //取到了一个Class对象
    String str=(String)refClassName.newInstance();//得到一个实例
      

  6.   

    定义一个接口,然后用(类)Class.forName(str).newInstance();
    str是一个实现接口的类
      

  7.   

    定义一个接口,然后用(接口)Class.forName(str).newInstance(); 
    str是一个实现接口的类,刚写错了
      

  8.   

    http://blog.csdn.net/a_nuo/archive/2008/05/22/2469336.aspx
    这片文章详细讲述了Class,希望对你有用
      

  9.   

    这里有一个较为完整的反射例子,以java.util.Date为示例,当然还需要try catch环绕
    Class cls=Class.forName("java.util.Date"); //通过类路径加载类到虚拟机,生成类对象,类加载器为默认加载器。
    Constructor constructor= cls.getConstructor(long.class);//获得该类的一个含参数构造函数,要提供参数类模板对象
    Method method=cls.getMethod("getTime", null);//获得该类的一个方法对象,此方法有一个long类型的返回值。此方法无参数,所以参数模板传入null
    Field field= cls.getDeclaredField("fastTime");//获得该类的一个私有属性对象,该属性为long类型
    Object obj=constructor.newInstance(10000000L);//通过构造函数对象构造一个该类的对象,参数为10000000L
    Object times=field.get(obj);//获得该类的一个对象此私有属性的值。
    Object times2=method.invoke(obj, null);//执行该对象的方法并得到一个返回值。
      

  10.   

    我给你说的简单点,上面看了那么多我眼睛都花了~
    -------------------
    Class c=Class.forName(str);
    str是个字符串,这个字符串包括定义类的路径,和定义类的名字例如:oracle.jdbc.driver.OracleDriver
    路径:oracle.jdbc.driver
    名字:OracleDriver
      

  11.   

    Class.forName(str)只是对类的加载,既把字节码放入内存,并没有实例化。一般我们在动态创建一个对象的时候用的比较多。如:
    Test t=(Test)Class.forName("com.Test").newInstance();
    System.out.println(Test.class==Class.forName("com.Test"));结果是true
      

  12.   

    还要注意一点:
    Test t=(Test)Class.forName("com.Test").newInstance(); 
    这样做不是安全的,首先你要保证Test要有一个无参数的构造方法,否则会抛异常。
    public class Test{
    public Test(){}//如果没有其它构造方法,那么这个也可以不写,即系统默认的构造方法
    }
      

  13.   

    Class.forName(str).newInstance()
    得到Object
    再类型转换
      

  14.   

    12正解,你还可以用ClassLoader获得一个类,比如java.util.Vector
      

  15.   

    谢谢,不过,没对上啊楼上的,行不通吧,如果能转型,我又何必用Object呢
      

  16.   

    感谢你的讲解,可是,Test是传过来的字符String 啊,我不能显示的写出来啊
      

  17.   

    可是,Test是传过来的字符String 啊,我不能显示的写出来啊LZ什么意思啊,我没明白
      

  18.   

    public class CreateObj{
    public static void main(String[] args){
        Test t=(Test)new CreateObe().getInstance("com.zgh.Test");
        t.show();
    }
    public Object getInstance(String path){
       return Class.forName(path).newInstance();
    }}
    下面是Test类:
    package com.zgh;
    public class Test{ 
    public Test(){}//如果没有其它构造方法,那么这个也可以不写,即系统默认的构造方法 
    //public Test(String name){System.out.println(name)}//如果有此构造方法的话,那么上面的那个构造方法一定要有,否则就不能用newInstance()方法创建对象了
    public void show(){
    System.out.println("success");
    }
    }
      

  19.   


    一般来说使用 Class.forName 生成对象的方法,是为了更好地进行解耦处理的。一般需要预先定义一个接口(比如叫:MyTest),而具体的实现类则放在配置文件中
    (比如配置的是:com.test.MyTestImpl),这样我们只要得到 com.test.MyTestImpl
    这个字符串,就可以动态生成类了(假设是无参构造):String impl = "com.test.MyTestImpl";    // impl 是从配置中读取到的字符串
    MyTest myTest = (MyTest)Class.forName(impl).netInstance();需要注意的是,我们将其强转为 MyTest 接口,这样我们的应用程序的耦合度就降低了,
    这就是面向接口编程。假设,我们现在具体的实现方式更改了(比如:采用更好的技术来实现了),这样的话,
    我们可以新建一个 com.test.MyTestImpl2 的实现类(需要注意的是,我们不能在原来的
    com.test.MyTestImpl 上更改,只能新建一个),这样只要将配置文件中的配置改为这个
    的话,原来写好的 Java 代码就可以一行不改地换掉一个实现类。这样的话,我们写好的这个类的灵活性就很高了,具体的实现并不是写死在代码里面的,是
    可以通过配置文件进配置的。上面的这种是 Class#forName  Class#newInstance 最大的用途,至于楼主说到的,要强转
    为指定的字符串的话,在所有目前已经发布的 JDK 中是做不到的。