java 反射知識回顧

package com.sysware.adapter.forclient.action;java

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Field;對象

public class Test {繼承

    @SuppressWarnings("rawtypes")
    public static void main(String[] args) {get

//        NoodleFactory nf = new NoodleFactory();
//        nf.createNoodle(NoodleFactory.GB);
        
//        ProductFactory pf = new ProuctFactoryC();
//        pf.getProdut1().show();
        
        
//        System.out.println("start");
//        
//        try {
//            Class.forName("com.sysware.adapter.forclient.action.User",false,Test.class.getClassLoader());
//            
//            System.out.println("123");
//        
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        
        try {
            
            //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            //獲取類描述符
            Class  clazz = Class.forName("com.sysware.adapter.forclient.action.Student");
            //進行實例化(默認使用空構造的實例化方法)
            Object obj = clazz.newInstance();
            //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            
            
            //-----------------------------------------------Method---------------------------------------
            
            //經過類描述符獲得全部的繼承關係下的全部公共方法
            Method[] method = clazz.getMethods();
            System.out.println("--------getMethods----------");
            for(Method m : method){
                System.out.println(m.getName());
            }
            //經過類描述符得該類下的方法
            Method[] md = clazz.getDeclaredMethods();
            System.out.println("--------getDeclaredMethods----------");
            for(Method m : md){
                System.out.println(m.getName());
            }
            
            //經過類描述符活的指定的方法
            Method med = clazz.getMethod("setAge", String.class);
            //調用該對象的該方法
            med.invoke(obj, "12");
            
            //經過類描述符活的指定的方法
            Method medd = clazz.getDeclaredMethod("show",null);
            //設置可訪問性(因爲該方法爲私有方法)
            medd.setAccessible(true);
            medd.invoke(obj, null);
            
            //---------------------------------------------Field----------------------------------------
            
            Field[] field = clazz.getFields();
            
            for(Field f:field){
                System.out.println(f.getName());
            }
            
            Field[] field2 = clazz.getDeclaredFields();
            
            for(Field f:field2){
                System.out.println(f.getName());
            }
            
            
            Field f = clazz.getDeclaredField("age");
            f.setAccessible(true);
            System.out.println("--"+f.get(obj));
            //設置字段的值
            f.set(obj, "test");
            System.out.println("++"+f.get(obj));
            
            //---------------------------------------------Constructor----------------------------------------
            
            Constructor[] constructor = clazz.getConstructors();
            for(Constructor c:constructor){
                System.out.println(c.getName());
            }
            
            Constructor[] constructor2 = clazz.getDeclaredConstructors();
            for(Constructor c:constructor2){
                System.out.println(c.getName());
            }
            
            
            //---
            Class cl = Class.forName("com.sysware.adapter.forclient.action.Famer");
            
            Constructor c3 = cl.getDeclaredConstructor(String.class);
            Object oj = c3.newInstance("2");
            
            Field fkd = cl.getDeclaredField("no");
            fkd.setAccessible(true);
            
            System.out.println(fkd.get(oj));
            
            
            io

        } catch (Exception e) {
            e.printStackTrace();
        }
        
        
        
    }
    
}
 class

相關文章
相關標籤/搜索