Java反射

173 阅读1分钟

package reflex;


public class America {

    public America() {
    }

    public void goAmerica(String name, int age){
        System.out.println("America girl info---"+name+"----"+age);
    }

}
package reflex;


public interface China {
    public static final String name="Rollen";
    public static  int age=20;
    public void sayChina();
    public void sayHello(String name, int age);


}

package reflex;


public class Person extends America implements China {
    private String sex;

    public Person(String sex){
        this.sex=sex;
    }

    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Person() {

    }


    @Override
    public void sayChina() {
        System.out.println("hello ,china");
    }

    @Override
    public void sayHello(String name, int age) {
        System.out.println(name+"---->"+age);
    }
}


package reflex;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Hello {

    public static void main(String[] args) {
        Class<?> demo = null;
        // Person person = new Person();
        //System.out.println(person.getClass().getName());

        try {
            demo = Class.forName("reflex.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Class<?> intes[] = demo.getInterfaces();
        for (int i = 0; i < intes.length; i++) {
            System.out.println("实现的接口  " + intes[i].getName());
        }
        Class<?> baseClass = demo.getSuperclass();
        System.out.println("继承的父类" + baseClass);

        Constructor<?> cons[] = demo.getConstructors();
        for (int i=0;i<cons.length;i++){
            System.out.println("所有的构造方法   "+cons[i]);
        }

        System.out.println("===============本类属性========================");
        // 取得本类的全部属性
        Field[] fields = demo.getDeclaredFields();
        for(int i= 0; i< fields.length;i++){
           int mo= fields[i].getModifiers();
           String priv= Modifier.toString(mo);

           Class<?> type = fields[i].getType();//变量类型
           System.out.println("本类变量信息--"+priv+"----"+type.getName()+"----"+fields[i].getName());
        }
        System.out.println("===============实现的接口或者父类的属性========================");

        Field[] filed1 = demo.getFields();
        for (int j = 0; j < filed1.length; j++) {
            //权限修饰符
            int mo = filed1[j].getModifiers();
            String priv = Modifier.toString(mo);
            // 属性类型
            Class<?> type = filed1[j].getType();
            System.out.println("接口父类信息---"+priv + "-----" + type.getName() + "---- "
                + filed1[j].getName() );
        }
        System.out.println("=============== //调用Person类中的sayChina方法========================");
        try {
            Method method = demo.getMethod("sayChina");
            method.invoke(demo.newInstance());
            Method method1 = demo.getMethod("sayHello",String.class,int.class);
            method1.invoke(demo.newInstance(),"jim",20);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("=============== //继承类的goAmerica========================");

        try {

            Method method1 = demo.getMethod("goAmerica",String.class,int.class);
            method1.invoke(demo.newInstance(),"han",20);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("=============== //操作属性=======================");

        try {
            Object obj = demo.newInstance();
            Field field = demo.getDeclaredField("sex");field.setAccessible(true);
            field.set(obj, "女");
            System.out.println(field.get(obj));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}