java 反射技术

来源:互联网 发布:启动tomcat数据库被锁 编辑:程序博客网 时间:2024/05/16 09:01
package cn.yws.reflect;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * java反射技术 * @author Administrator * */public class Test {public static void main(String[] args) throws Exception {GetInfo(Student.class,true);//new LoadedClass();Class cls = Class.forName("cn.yws.reflect.LoadedClass");        System.out.println("当前类是数组:" + cls.isArray());        System.out.println("当前类是枚举:" + cls.isEnum());        System.out.println("当前类是接口:" + cls.isInterface());        System.out.println("当前类是接口:" + cls.isMemberClass());        //cn.yws.reflect.LoadedClass cn.yws.reflect.Test$Student        Class<?> cls2 = Class.forName("cn.yws.reflect.LoadedClass");        //cls2.getConstructor(new Class[]{}).newInstance(new Object[]{});        //Class cls2=Teacher.class;        Object obj = cls2.newInstance();         Class[] para = null;        Method m = cls2.getMethod("say", para);        Object [] arg = null;        m.setAccessible(true);        m.invoke(obj, arg);                            Class<?> cls_teacher =Outerteacher.class;        Object obj_teacher = cls_teacher.newInstance();                Field fd1 = cls_teacher.getField("name");        fd1.set(obj_teacher, "Tom");               Field fd2 = cls_teacher.getField("age");        fd2.setInt(obj_teacher, 23);                Class[] para_teacher = null;        Method m_teacher = cls_teacher.getMethod("say", para_teacher);        Object [] arg_teacher = null;        m_teacher.invoke(obj_teacher, arg_teacher);                      }private static void GetInfo(Class cls,Boolean isALL) {System.out.println("类名:" + cls.getName());System.out.println();System.out.println("数据成员信息:");Field[] fd = cls.getDeclaredFields();if(isALL){fd=cls.getFields();}for (int i = 0; i < fd.length; i++) {System.out.println(fd[i]);}System.out.println();        System.out.println("方法成员信息:");         Method[] mt = cls.getDeclaredMethods();         if(isALL)         {         mt=cls.getMethods();         }         for(int j = 0; j < mt.length; j++)         {            System.out.print(mt[j].getReturnType().getName());            System.out.print(" ");            System.out.print(mt[j].getName());            System.out.print("(");            Class[] paraCls = mt[j].getParameterTypes();            for(int k = 0; k < paraCls.length; k++)            {                if(k > 0)                {                    System.out.print(", ");                }                System.out.print(paraCls[k].getName());                                }            System.out.println(")");        }}     abstract class People {private int id;private String sex;public People(){}public abstract String sayHello(String name);public String marry(String name){return id+" marry to "+name;}}interface MyInterface{    void say();}class Teacher {public String name;public int age; public void say() {System.out.println("Hello, I'm Teacher!" +name+age);}}class Student extends People implements MyInterface{public String myName;public int age;public Student(){}public Student(String myName, int age) {super();this.myName = myName;this.age = age;}public String introduce() {String ret = "My name is " + myName + ", my age is " + age;return ret;}@Overridepublic String sayHello(String name) {String ret = "Hello, " + name + ", My name is" + myName;return ret;}@Overridepublic void say() {System.out.println("Hello, I'm Student!");}}}

package cn.yws.reflect;public class LoadedClass{    static    {        System.out.println("类LoadedClass载入");//静态代码,只有类加载入内存时才被执行    }        public LoadedClass()    {        System.out.println("类LoadedClass实例化");//构造器,每次产生实例时都将被调用    }    public void say()    {    System.out.println("say hehe");    }}

package cn.yws.reflect;public class Outerteacher {public String name;public int age; public void say() {System.out.println("Hello, I'm Teacher!" +name+age);}}


0 0
原创粉丝点击