在java中有几种方法来制造对象。
除了new!
谢谢

解决方案 »

  1.   

    Class.forName("className").newInstance()
      

  2.   

    老大 除了Class.forName("className").newInstance()
    这个方法还有其它的吗?
    我是个菜鸟!!!!
    呵呵
      

  3.   

    提供静态工厂方法。
    public class Obj {
    public static Obj getObj() {
    return new Obj();
    }
    }
      

  4.   

    在Java Api中还有其它的方法没有去取的对象啦?
      

  5.   

    但是只能调用无参的构造方法,还是new好,呵呵
      

  6.   

    Class.forName("className").newInstance()
    那位大哥能演示一下这个方法是怎么用的。我这边,好像经常报错。
      

  7.   

    Class.forName("className").newInstance()
    如果类不存在或者没有默认构造函数,就会抛出异常。
      

  8.   

    public class hello
    {
      public void sayHello()
      {
        System.out.println("hello java");
      }
    }
    ×××××××
    public class test
    {
      public static void main(String arg[])throws Exception
      {
        hello h = (hello)Class.forName("hello").newInstance();
        h.sayHello();
      }
    }我的代码如上,这样怎么报异常啊!
    异常如下:
    xception in thread "main" java.lang.ClassNotFoundException: hello
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:164)
    at com.landray.test2.main(test2.java:7)
      

  9.   

    你的 hello 类没有找到,你的代码我都能运行的。你的 hello 类是不是使用过 package 了?
      

  10.   

    那你的 hello 前面要加上包名,比如 test.hello。另外,需要注意的是,Java 中的类名一般采用大写字母开头,比较符合命名规范。
      

  11.   

    在Class.forName("package.className")就可以运行了,没有指定包,所以找不到类。
      

  12.   

    个位,个位,我还想问一下,new和Class.forname().newInstance()它们分别是在什么时候使用呢?
      

  13.   

    String [] aaa={"a","b","c"};
    佛曰:一切皆为虚幻,JAVA曰:一切皆为对像.
      

  14.   

    用new的方法加载类,前提是你必须知道类名,如果不知道类名可以用动态加载类的方法,即Class.forName(String className),当然你可能在API中见到不止着一种,有些参数不知这一个,但是思想都是一样的,动态加载。其用处:主要在于在插件中使用,利用发射的思想,进行类加载。你如果想了解更多的知识,推荐一本书:《java深度探险》。
      

  15.   

    public class hello
    {
      public void sayHello()
      {
        System.out.println("hello java");
      }
    }
    ×××××××
    public class test
    {
      public static void main(String arg[])throws Exception
      {
        hello h = (hello)Class.forName("hello").newInstance();
        h.sayHello();
      }
    }
    =======================================================新手,一个类中能声明两个类都是public吗?
      

  16.   

    新手,一个类中能声明两个类都是public吗?To realcbb 你不觉得你说的话很矛盾么?
      

  17.   

    To realcbb() 你怎么看成了是在一个类中吗????
    没有看到××××吗!
    不要装B!!!
      

  18.   

    个位,个位,我还想问一下,new和Class.forname().newInstance()它们分别是在什么时候使用呢?=======================================================================================new 一般用在需要写死的,不会再有扩展的对象上。而 Class.forName(),我认为使用起来比较灵活,需要配合配置文件或者 XML 文件来使用会比较方便些。比如:现在有一个数据库应用,设置了数据库访问的接口是:DaoInter.java,现使用 MS SQL Server 来实现该接口:MssqlDaoImpl,那我们就可以在 XML 文件中配置这一个实现类了,在代码中实现:DaoInter dao = (DaoInter) Class.forName(XXXX.getDaoImpl()).newInstance();其中 XXXX.getDaoImpl() 可以获得配置文件中的 MssqlDaoImpl 这个字符串,当然可能还包括包名。万一有一天改用 MySQL 数据库来实现该接口:MysqlDaoImpl,这样,我们现有的源代码可以一行都不需要动了,只需要增加一个 MysqlDaoImpl.java 和更改配置文件就可以了,符合 OCP 的设计原则。