***


              ,    ,   :    ,       。  
    ●    Class     :  
    1.getClass()  
        public static void main(String[] args) {  
            Person p = new Person();  
            Class<?> c = p.getClass();//  Class    
            System.out.println(c.getName());  
        }  
    2. .Class    
        public static void main(String[] args) {  
            Class<?> c = Person.class;//  Class    
            System.out.println(c.getName());  
        }  
    3.Class.forName()  
        public static void main(String[] args)throws Exception {  
            Class<?> c = null;  
                c = Class.forName("classdemo.instance.Person");//  Class    
                System.out.println(c.getName());  
        }  
      
    ●   Class        
    1、           
         new        ,    Class  。  
    (1).   .      Class    
    (2).  Class   public T newInstance()  
        public static void main(String[] args)throws Exception {  
            Class<?> c = null;  
                c = Class.forName("classinstance2.Person");//  Class              
                Person p =(Person) c.newInstance();//   Person            
                System.out.println(p);  
        }  
    2、           
            ,           ,         
               。  
    (1).            :public Constructor<?>[] getConstructors()  
    (2).  Construct  :public T newInstance(Object... initargs)  
                  ,            。  
        public static void main(String[] args)throws Exception{  
            Class<?> c = null;  
            Person p = null;  
                c = Class.forName("classinstance3.Person");//  Class    
                Constructor<?>[] con = c.getConstructors();//        
                p = (Person) con[0].newInstance("MLKJ",20);//   Person    
                System.out.println(p);  
        }  
      
    ●   Clas         
    1.       :public Class<? super T> getSuperclass()  
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("classDemo1.Person");  
            Class<?> su = c.getSuperclass();//         
            System.out.println(su.getName());//         
        }  
    2.         :public Class<?>[] getInterfaces()  
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("classDemo1.Person");  
            Class<?> inter[] = c.getInterfaces();//         
            for (int i = 0; i < inter.length; i++) {  
                System.out.println(inter[i].getName());//         
            }  
        }  
                ,   Class          
    3.            :public Constructor<?>[] getConstructors()  
        Constructor           :  
        |-       :public int getModifiers()  
        |-         :public Class<?>[] getParameterTypes()  
      Modifer           :public static String toString(int mod)  
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("classDemo1.Person");  
            Constructor<?> con[] = c.getConstructors();//          
            for (int i = 0; i < con.length; i++) {  
                int mod = con[i].getModifiers();//         
                String str = Modifier.toString(mod);//       
                Class<?>[] par = con[i].getParameterTypes();//        
                System.out.print(str+" ");//         
                System.out.print(con[i].getName()+"(");//          
                for (int j = 0; j < par.length; j++) {//        
                    System.out.print(par[j].getName()+" arg-"+j);//        
                    if(j<par.length-1){// ,      
                        System.out.print(",");  
                    }  
                      
                }  
                System.out.println(")");  
            }  
        }  
    4.          :public Method[] getMethods()  
        Method          :  
        |-          :public Class<?> getReturnType()  
        |-        :public Class<?>[] getParameterTypes()  
        |-         :public Class<?>[] getExceptionTypes()  
        public static void main(String[] args) throws Exception {  
            Class<?> c = Class.forName("classDemo1.Person");//   Class    
            Method[] me = c.getMethods();//        
            for (int i = 0; i < me.length; i++) {  
                String str = Modifier.toString(me[i].getModifiers());//         
                Class<?> ret = me[i].getReturnType();//              
                String metName = me[i].getName();//        
                Class<?>[] par = me[i].getParameterTypes();//        
                Class<?>[] ex = me[i].getExceptionTypes();//          
                System.out.print(str + " ");//         
                System.out.print(ret + " ");//         
                System.out.print(metName + "(");//        
                for(int j=0;j<par.length;j++){//        
                    System.out.print(par[j].getName()+" args-"+j);  
                    if(j<par.length-1){  
                        System.out.print(",");  
                    }  
                }  
                System.out.print(")");  
                if(ex.length>0){//        throws  
                    System.out.print("throws ");  
                }  
                for(int j=0;j<ex.length;j++){//          
                    System.out.print(ex[j].getName());  
                    if(j<par.length-1){  
                        System.out.print(",");  
                    }  
                }  
                System.out.println();  
            }  
        }  
    5.            
        |-           :public Field[] getFields()throws SecurityException  
        |-        :public Field[] getDeclaredFields()throws SecurityException  
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("classDemo1.Person");  
            {  
                Field[] f = c.getFields();  
                for (int i = 0; i < f.length; i++) {  
                    String str = Modifier.toString(f[i].getModifiers());  
                    System.out.print(str+" ");  
                    System.out.println(f[i].getType().getName());  
                }  
            }  
            {  
                Field[] f = c.getDeclaredFields();  
                for (int i = 0; i < f.length; i++) {  
                    String str = Modifier.toString(f[i].getModifiers());  
                    System.out.print(str+" ");  
                    System.out.println(f[i].getType().getName());  
                }  
            }  
        }  
    ●           
    1.             
              .  (),    ,          。  
    1.Class    public Method getMethod(String name,Class<?>... parameterTypes)  
              Method  。  
    2.  Method    , Method   :public Object invoke(Object obj, Object... args)  
          。  
    1.        ,          
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("InvokeMethodDemo.Person");//  Class       
            Method m = c.getMethod("AA");//  Method    
            m.invoke(c.newInstance());//      
        }  
    2.        ,         
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("InvokeMethodDemo.Person");//  Class       
            Method m = c.getMethod("getInfo");//  Method    
            String str = (String)m.invoke(c.newInstance());//      
            System.out.println(str);  
        }  
    3.       ,         
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("InvokeMethodDemo.Person");//  Class       
            Method m = c.getMethod("say",String.class,String.class);//  Method    
            String str = (String)m.invoke(c.newInstance(),"AA","love");//      
            System.out.println(str);  
        }  
    4.  get set    
        import java.lang.reflect.Method;  
    public class InvokeGetSet {  
        public static void main(String[] args)throws Exception {  
            Class<?> c = Class.forName("InvokeMethodDemo.Person");  
            Object o = c.newInstance();  
            set("name","AA",o,String.class);  
            set("age",30,o,int.class);  
            get("name",o);  
            get("age",o);  
        }  
        /** 
         * @param name        
         * @param value      
         * @param obj           
         */  
        public static void set(String name,Object value,Object obj,Class<?> type)throws Exception{  
            Method met = obj.getClass().getMethod("set"+initStr(name), type);  
            met.invoke(obj, value);  
        }  
        public static void get(String name,Object obj)throws Exception{  
            Method met = obj.getClass().getMethod("get"+initStr(name));  
            Object value = met.invoke(obj);  
            System.out.println(value);  
        }  
        public static String initStr(String name){  
            StringBuffer sb = new StringBuffer();  
            sb.append(name.substring(0, 1).toUpperCase()).append(name.substring(1));  
            return sb.toString();  
        }  
    }