2006-05-25日 反射在构造函数上的应用

原创 2006年05月25日 15:39:00

1.   研究一下如下方法    class.forName().newInstance()

如果我需要写一个需要操作数据库的操作,然而各家公司所用的数据库不一样,有用oracle,DB2或者mysql,那怎么样做才能做到更改方便,适应能力强的程序呢?

我们可以把数据库需要加载的类通过properties文件指明,然后提供一个facade类,其实也就是一个接口,它有加载数据库的通用方法,然后用reflection机制的classforName和newInstance方法来动态加载,呵呵,这里似乎也借鉴了spring通过xml文件来做反转控制的理念

public class MainApplication {
//...
private Properties props;
private CustomerDatabase custDB;
//...
public synchronized CustomerDatabase createDBFacade() {
if ( custDB == null ) {
try {
String dbClassName
= props.getProperty( "db.class",
"com.wci.app.StubCustomerDB");
Class cls = Class.forName(dbClassName);
custDB = (CustomerDatabase) cls.newInstance();
}
catch (ClassNotFoundException ex) {
// ...
}
catch (InstantiationException ex) {
// ...
}
catch (IllegalAccessException ex) {
// ...
}
}
return custDB;
}
}

这里要说明的是class对象的newInstance等同于用没有参数的构造函数去实例化一个对象,简单吧,呵呵

 

2.嗯,还有别的要注意的 Construct类

还是看看我写的一个测试类吧,这里有1.和2的例子

import java.lang.reflect.*;
public class NewInstanceEqualsNoArgumentConstruction
{
 private int var1;
 private int var2;
 public NewInstanceEqualsNoArgumentConstruction()
 {
 }
 public NewInstanceEqualsNoArgumentConstruction(int a,int b)
 {
  var1=a;
  var2=b;
 }
 public void setVar1(int c)
 {
  var1=c;
 }
 public void setVar2(int c)
 {
  var2=c;
 }
 public int sum()
 {
  return var1+var2;
 }
 public static void greeting()
 {
  System.out.println("这个是没有实例化情况下用class来做到的问号语言,有意思吧,呵呵");
 }
 public static void main(String[] args)
 {   try
  {
  
   /////////////////////////////////////////////////////////////////////////////////////////////////////
      Class c=NewInstanceEqualsNoArgumentConstruction.class;
     Constructor ct=c.getConstructor(new Class[]{int.class,int.class});

   NewInstanceEqualsNoArgumentConstruction m=(NewInstanceEqualsNoArgumentConstruction)ct.newInstance(3,4);
   NewInstanceEqualsNoArgumentConstruction n=(NewInstanceEqualsNoArgumentConstruction)c.newInstance();
   //////////////////////////////////////////////////////////////////////////////////////////////////////
   n.setVar1(1);
   n.setVar2(2);
   System.out.println("和是: "+n.sum());
   System.out.println("有参数的构造函数得到的和是: "+m.sum());
  }
  
  catch(InstantiationException e)
  {
   e.printStackTrace();
  }
  
  catch(IllegalAccessException e)
  {
   e.printStackTrace();
  }
  
  catch(SecurityException e)
  {
   e.printStackTrace();
  }
  
  catch(NoSuchMethodException e)
  {
   e.printStackTrace();
  }
  
  catch(Exception e)
  {
   e.printStackTrace();
  }

 }
}

Java基础05:面向对象;类与对象;匿名对象;成员变量;局部变量;封装;构造函数

关键字:面向对象;类与对象;匿名对象;成员变量;局部变量;封装;构造函数 一、面向对象         目前主流的编程思想有:面向过程和面向对象。         面向过程的思想是将完成一件任务所需...

黑马程序员——面向对象05(概述、封装、构造函数、this)

——- android培训、java培训、期待与您交流! ———- 1.1:面向对象 1,理解:面向对象是基于面向过程的,面向对象强调的是具有功能的对象。2,面向对象的特点 (1),...

构造函数、成员变量、成员方法、静态方法、数组的反射应用

构造函数、成员常量、成员方法的反射应用

构造函数的继承(转自http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html)

主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。 今天要介绍的是,对象之间的"继承"的五种方法。 比如,现在有一个"动物"对象的构造函数。   function...

黑马程序员_JAVA笔记05 ——面向对象1(类与对象关系、封装、构造函数、this)

------- android培训、java培训、期待与您交流! ---------- 1  理解面向对象         面向对象是相对面向过程而言,其实面向对象和面向过程都是一...

黑马程序员_day05 面向对象(匿名对象,构造函数,this关键字)

---------------------- android培训、java培训 期待与您交流! ---------------------- 一:理解面向对象:  1,面向对象是相对面向过程而言。...

day_05_构造函数_this指针_析构函数

十四构造函数和初始化表 4拷贝构造函数 5初始化表 十五this指针与常成员函数 1this指针 2常成员函数常函数 十六析构函数Destructor 1语法 2当对象被销毁时该类的析构函数将被自动执...

day05对象与类,函数,构造函数,this

//面向对象,三个特征:封装,继承,多态 //以后开发,其实就是找对象使用,没有对象,就创建一个对象 //找对象,建立对象,使用对象,维护对象的关系 /* 类和对象的关系 现实生活中的对象:张...

学生类的构造函数

  • 2017年11月22日 14:18
  • 765B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2006-05-25日 反射在构造函数上的应用
举报原因:
原因补充:

(最多只允许输入30个字)