进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 程序开发 -> JAVA -> 文章内容  
在Java中动态执行类的静态方法

在Java中,通过Class.forName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用Class.forName(configClassName).getInstance()就可以构造一个特定的实现类实例,而不用每次修改源代码。这样对于程序来讲只用关心接口的定义,用户只用进行配置文件的设置就完成了同一功能的不同实现的切换。

  但是如果实现类需要通过静态方法来进行初始化的时候,动态加载的过程就会复杂一些。同样的以数据库连接池为例,通常连接池的构造函数都会被定义为私有的,而通过自定义的getInstance()静态方法来得到唯一实例。这种情况下简单的通过Class.forName().getInstance()就无法正确构造实例。

  幸好Java所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。通过反射机制,我们能够完成基本上所有的运行时决定的动作(虽然这一实现要比其他动态语言,比如PHP,的eval()的使用要复杂的多)。

  下面通过实际的例子说明如何在运行时动态访问类的静态方法。

-------------------------------------------------------
*/
import java.lang.reflect.*;

public class myTestClass{
 private static Object pLock = new Object();

 private static myTestClass p_instance = null;
 private String s_configName = "";
 private boolean b_isFromResource = true;

 public static Object getInstance(String sConfigName,
 Boolean bIsFromResource){
  synchronized(pLock){
   if(null == p_instance){
    p_instance =new myTestClass(sConfigName,bIsFromResource);
   }
  }
  return p_instance;
 } 

 private myTestClass(String sConfigName,Boolean bIsFromResource){
  s_configName = sConfigName;
  b_isFromResource = bIsFromResource.booleanValue();
 }

 public void echoInfo(){
  System.out.println("current arguments : configName=["+
   s_configName+"],isFromResource=["+b_isFromResource+"]");
 }

 public static void main(String[] args) throws Exception{
  // 设置方法的传入参数的类型.
  Class[] parameterTypes = new Class[]{
   java.lang.String.class,
   java.lang.Boolean.class
  };

  Method mGetInstance = null;
  String className = "myTestClass";

  Class curTestClass = Class.forName(className);
  try{
   mGetInstance = curTestClass.getMethod("getInstance",parameterTypes);
  }
  catch(NoSuchMethodException e){
   e.printStackTrace();
   mGetInstance = null;
  }

  if(mGetInstance != null){
   myTestClass pObj = (myTestClass)
    mGetInstance.invoke(null,new Object[]{
     "src/myconfig.properties",
     Boolean.FALSE
    }
   );
   pObj.echoInfo();
  }
  else{
   throw
    new Exception("myTest Init Failed from class" +
     className +
     System.getProperty("line.seperator","\n") +
     "method getInstance(String, Boolean) exists.");
  }
 }
}

在百度中搜索:在Java中动态执行类的静态方法
在Google中搜索:在Java中动态执行类的静态方法
在Yahoo中搜索:在Java中动态执行类的静态方法

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· 在Java中利用JCOM实现仿Excel编程详解
· 在JS中使用RecordSet对象的GetRows方法
· 在JavaScript中实现命名空间
· 在Javascript中,什么是闭包(Closure)
· 在JDK 6.0中基于StAX分析XML数据
· [组图] 在Java中用类装载框架控制类加载
· [图文] 浅谈Excel报表在Java程序中的应用
· 在java中找到需要的资源文件路径
· 通过反射填充泛型集合List的静态方法
· ASP.NET:通过反射填充泛型集合List的静态..
 
· 面向Java程序员的db4o指南: 数组和集合
· Java与.NET 谁才能主宰未来?
· Java编程技术中汉字问题的分析及解决
· Java 泛型的理解与等价实现
· 在Java中利用JCOM实现仿Excel编程详解
· [图文] Java小技巧:关于Cookie的操作
· Java中消除实现继承和面向接口编程
· Java实战篇:设计自己的Annotation
· 使用Java程序的泛型应该注意的几个地方
· JPCAP——Java中的数据链路层控制

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)