反射练习

来源:互联网 发布:微信众筹源码 编辑:程序博客网 时间:2024/05/03 14:36

package com.itheima;

import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;


public class TestReflect {

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception{
  // TODO Auto-generated method stub
  String str="wrew";
  
  Class clas1=str.getClass();
  Class clas2=String.class;
  Class clas3=Class.forName("java.lang.String");
  
  /*
  sop(int.class==Integer.class);
  sop(int.class.isPrimitive());
  sop(Boolean.class.isArray());
 
  
  Constructor[]cons=Class.forName("java.lang.String").getConstructors();
  for(Constructor con:cons)
  { 
   sop(con);
  }
 
   sop(clas1==clas2);
         sop(clas3==clas2);
   */
  
  Constructor cons1=String.class.getConstructor(StringBuffer.class);
  String str1=(String)cons1.newInstance(new StringBuffer("nbvf")); 
  //sop(str1.charAt(0));
   
  ReflectPoint rp=new ReflectPoint(3,5);
  Field fieldy=rp.getClass().getField("y");
  //sop(fieldy.get(rp));
  
  
  Field fieldx=rp.getClass().getDeclaredField("x");
  fieldx.setAccessible(true);//暴力反射
  //sop(fieldx.get(rp));
  
  changeStringValue(rp);
  //sop(rp);
  
  Method methodCharAt=String.class.getMethod("charAt", int.class);
  //sop(methodCharAt.invoke(str1, 1));//方法上的方法
  
  //TestArguments.main(new String[]{"12","1232"});
  
  String startingClassName=args[0];
  Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class);
  mainMethod.invoke(null, new Object[]{new String[]{"12","1232"}});
  
  
     int[]a1=new int[]{1,2,3};
     String[]a2=new String[]{"a","b","c"};
     int[]a3=new int[5];
    
     System.out .println(a1.getClass()==a3.getClass());
    // sop(a1.getClass()==a2.getClass());
     sop(a1.getClass().getSuperclass().getName());
     sop(a2.getClass().getSuperclass().getName());
    
     //Object obj1=a1;
    // Object obj2=a2;
    // Object[] obj3=a1;
       Object[] obj4=new Object[]{"234",1,'d'};
    
    
    // sop(Arrays.asList(obj4));
    
     Object obj=null;
    // printobject(a2);
     printobject(obj4);
 }
 

 
 private static void printobject(Object obj) {
  // TODO Auto-generated method stub
  
  Class clazz=obj.getClass();
  if(clazz.isArray())
  { 
   int len=Array.getLength(obj);
   for(int i=0;i<len;i++)
   { 
    sop(Array.get(obj, i));
   }
  }
  else
  { 
   sop(obj);
  }
  
 }

 

 private static void changeStringValue(Object obj) throws Exception {
  // TODO Auto-generated method stub
   
  Field[]fields=obj.getClass().getFields();
  for(Field field:fields)
  {
     if(field.getType()==String.class)
     { 
     String oldValue=(String)field.get(obj);
     String newValue=oldValue.replace('b', 'a');
     field.set(obj, newValue);
     } 
  }
 }

 

 public static void sop(Object obj)
 { 
  System.out.println(obj);
 }
}

class TestArguments{
 public static void main(String[] args)
 { 
  for(String arg:args)
  { 
   System.out.println(arg);
  }
 }
}

0 0
原创粉丝点击