Java反射机制实例类

/** 
  * 直接创建对象调用方法 
*/ 
private static void classObject(){ 
  
try { 
   
//参数值 
   Object []value=new Object[]{"1","2"}; 
   
//参数类型 
   Class par[]=new Class[]{String.class,String.class}; 
   Class c
=Class.forName("zjnx.sibas.ReflectTest"); 
   
//创建类对象 
   Object object=c.newInstance(); 
//得到方法对象 
   Method method=object.getClass().getDeclaredMethod("towStringEq", par); 
   
//调用方法 
   boolean flag=Boolean.parseBoolean(method.invoke(object, value).toString()); 
   System.out.println(
"flag:"+flag); 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 

** 
  
* 调用有参构造函数,调用方法 
  
*/ 
private static void clsssdeclaredObject(){ 
  
try { 
   
//参数值 
   Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)}; 
   
//参数类型 
   Class par[]=new Class[]{String[].class,int.class}; 
   
//构造函数参数 
   Class declared[]=new Class[]{String.class}; 
   
//构造函数值 
   Object declaredValue[]=new Object[]{"1"}; 
   Class c
=Class.forName("zjnx.sibas.ReflectTest"); 
   
   
//初始化构造函数 
   Constructor constructor = c.getDeclaredConstructor(declared); 
//新建对象 
   Object object=constructor.newInstance(declaredValue); 
//得到方法对象 
   Method method=object.getClass().getDeclaredMethod("printValue", par); 
   
//调用方法 
   method.invoke(object, value); 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 


private static void classMothodObject(){ 
  
try { 
   
//构造函数参数 
   
//参数值 
   Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)}; 
   
//参数类型 
   Class par[]=new Class[]{String[].class,int.class}; 
   
//构造函数参数 
   Object declared[]=new Object[]{"1"}; 
   
//类完整路径 
   String className="zjnx.sibas.ReflectTest"
   
   Object object
=ReflectTest.getInstance(className, declared); 
   
//Object object=ReflectTest.getInstance(className, null); 
   
//得到方法对象 
   Method method=object.getClass().getDeclaredMethod("printValue", par); 
   
//调用方法 
   method.invoke(object, value); 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 
/** 
  * 按照指定的类名称 并按照指定的参数进行构造而获取实例 
     * 
     * 限制性条件为: objects 中的className 必须和构造参数中的类型一致。 
  * 
     * 如果Object 中存在 超越 参数类型的方法将导致初始化失败!!!! 例如 getInstance("Cr", {new 
  * Integer(2)}); 将无法应用在构造 方法 Cr(Number num) 
  * 
@param className 类名称 
  * 
@param objects 构造方法的类名称 
  * 
@return 返回构造出的实例 
  * 
@throws Exception 初始化错误时返回此项例外 
  
*/ 
public static final Object getInstance(String className, Object[] objects) { 
  
try { 
   Class clz 
= Class.forName(className); 
           
            
if (objects==null ||objects.length==0
            { 
                
return clz.newInstance() ; 
            } 
   Class[] paramClaszz 
= new Class[objects.length]; 
   
for (int i = 0; i < objects.length; i++) { 
    paramClaszz[i] 
= objects[i].getClass(); 
   } 
   Constructor constructor 
= clz.getDeclaredConstructor(paramClaszz); 
   
return constructor.newInstance(objects); 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 
  
return null
    /** 
     * 是不是某个类的实例 
     * 
@param obj 实例 
     * 
@param cls 类 
     * 
@return 如果 obj 是此类的实例,则返回 true 
     
*/ 
    
public boolean isInstance(Object obj, Class cls) { 
        
return cls.isInstance(obj); 
    } 
    
/** 
     * 得到某个对象的公共属性 
     * 
@param owner, fieldName 
     * 
@return 该属性对象 
     * 
@throws Exception 
     
*/ 
    
public Object getProperty(Object owner, String fieldName) { 
     
try { 
      Class ownerClass 
= owner.getClass(); 
      Field field 
= ownerClass.getField(fieldName); 
      Object property 
= field.get(owner); 
      
return property; 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 
  
return null
    } 
    /** 
     * 得到某类的静态公共属性 
     * 
@param className   类名 
     * 
@param fieldName   属性名 
     * 
@return 该属性对象 
     * 
@throws Exception 
     
*/ 
    
public Object getStaticProperty(String className, String fieldName){ 
     
try { 
      Class ownerClass 
= Class.forName(className); 
      Field field 
= ownerClass.getField(fieldName); 
      Object property 
= field.get(ownerClass); 
      
return property; 
  } 
catch (Exception e) { 
   e.printStackTrace(); 
  } 
  
return null
    } 
     
private boolean towStringEq(String str1,String str2) { 
  System.out.println(
"str1:"+str1+"  str2:"+str2); 
  
if (str1.equals(str2)) { 
   
return true
  }
else
   
return false
  } 

private void printValue(String []arr,int i) { 
  System.out.println(
"i:"+i); 
  
for (int j = 0; j < arr.length; j++) { 
   System.out.println(
"arr["+j+"]:"+arr[j]); 
  } 
原文地址:https://www.cnblogs.com/jifeng/p/2147714.html