CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

如何由string类型的类名生成类的实例?

楼主sgboy(sgboy)2005-08-03 10:49:53 在 Java / J2SE / 基础类 提问

已经获得了类的名称,是String类型的,例如myClass  
  String   myClassName="myClass";  
  如何生成myClass的实例  
  myClass   mc=new   myClassName();     这样不可以啊 问题点数:20、回复次数:7Top

1 楼evonli()回复于 2005-08-03 10:55:42 得分 5

Class.forname(myclassname)Top

2 楼ffansky(ffansky)回复于 2005-08-03 11:01:09 得分 0

myClassName   不是对象吗?Top

3 楼shenpipi(皮皮)回复于 2005-08-03 11:01:46 得分 5

Object   o=Class.forName(myClassName).newInstance();  
  myClass   mc=(myClass)o;Top

4 楼sgboy(sgboy)回复于 2005-08-03 11:17:33 得分 0

怎么会报错呢?  
   
  import   java.io.*;  
  public   class   myClass{  
  public   myClass(){  
  System.out.println("myClass   constructed...");  
  }  
  }  
   
  import   java.io.*;  
  import   java.lang.*;  
  public   class   test{  
  public   test(){  
  }  
  public   static   void   main(){  
  myClass   mc;  
  String   myClassName="myClass";  
   
  try{  
  mc=(myClass)Class.forName(myClassName).newInstance();  
  }catch(Exception   e){  
  }  
   
  }  
  }  
   
  Top

5 楼aico(aico)回复于 2005-08-03 11:31:53 得分 10

myClass   mc;  
  这样的声明是不行的,除非你的myClass确实在classpath中。如果是动态加载的类就不能这样。  
  为简单起见,现在认为你的myClass在classpath中。  
  String   myClassName   =   "myClass";  
  Class   class   =   Class.forName(myClassName);  
  myClass   mc   =   (myClass)class.newInstance();  
  这种方法适用于调用myClass的无参数构造器。  
  如果想调用它的有参数构造器,就麻烦一点,例如它的构造器为:  
  class   myClass  
  {  
            String   myparam;  
            public   myClass(String   param)  
            {  
                    myparam   =   param;  
            }  
  }  
  则可以适用反射,进行对象构造:  
  String   myClassName   =   "myClass";  
  Class   class   =   Class.forName(myClassName);  
  Constructor   con   =   class.getConstructor(new   Class[]{java.lang.String});  
  myClass   mc   =   (myClass)con.newInstance(new   String[]{"helloworld"});  
  为了简单,我在代码例子中未加异常处理,实际编程时应对谨记。  
  或者,你可以对myClass的所有构造器进行遍历,  
  Constructor[]   cons   =   class.getConstructors();  
  调用其中一个构造器进行构造,例子不再详细写了。  
  当然,对于无参数构造器,也可以用这种方式。Top

6 楼sgboy(sgboy)回复于 2005-08-03 11:36:21 得分 0

晕啊,我改了一个   public   static   void   main(String[]   args)  
  就可以了Top

7 楼aico(aico)回复于 2005-08-03 11:38:56 得分 0

sorry,此处有笔误:  
  Constructor   con   =   class.getConstructor(new   Class[]{java.lang.String});  
  应为  
  Constructor   con   =   class.getConstructor(new   Class[]{java.lang.String.class});  
  或者  
  Constructor   con   =   class.getConstructor(new   Class[]{Class.forName("java.lang.String")});  
  或者  
  Constructor   con   =   class.getConstructor(new   Class[]{"".getClass()});  
   
   
   
  Top

相关问题

  • 生成类的实例
  • 生成动态类实例的问题,难
  • 类生成实例时,编译报错undefined reference to `CSocketClass::CSocketClass[in-charge](int)'
  • 怎样定义只能生成一个实例的类??
  • 如何用程序生成一个本地机器上一个类的实例?
  • 请问怎么才能使一个类只生成一个实例?
  • 如果知道一个类名,生成它的具体的实例?
  • C#中如何才能做到将类名作为参数来生成实例?
  • 怎样用反射根据类型名称生成一个实例?
  • 如何动态生成控件实例?

关键词

  • myclassname
  • myclass
  • getconstructor
  • 类
  • 构造器
  • mc
  • forname
  • constructor con
  • 调用
  • newinstance

得分解答快速导航

  • 帖主:sgboy
  • evonli
  • shenpipi
  • aico

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo