• Java 反射的基本应用


    package com.lf.testreflection;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    import org.junit.Test;
    
    public class ClassTest{
        
        @Test
        public void testSomthing()throws Exception {
            //创建运行时类的对象
            Class cla = Person.class;
            // 创建运行时Person的对象
            Person person = (Person)cla.newInstance();
            // 通过cla获取对象的属性
            Field field = cla.getDeclaredField("name");
            // 设置可以访问的权限
            field.setAccessible(true);
            // 设置相应的属性值
            field.set(person, "kity");
            //获取相应的属性(public可以使用下面方法获取)
            field = cla.getField("address");
            field.set(person, "NewYo");
            field = cla.getDeclaredField("age");
            field.setAccessible(true);
            field.set(person, 18);
            
            System.out.println(person);
            // 获取无参方法
            Method method = cla.getMethod("learn");
            method.invoke(person);
            // 获取有参方法
            Method method2 =cla.getMethod("readSomething",String.class);
            method2.invoke(person, "ainsy");
            // 获取多参方法
            Method method3 =cla.getMethod("readSomething",int.class,String.class);
            method3.invoke(person, 20,"ainsy");
            // 获取所有的属性
            Field[] fields = cla.getDeclaredFields();
            for (Field field2 : fields) {
                // 每个属性的修饰符
                System.out.print(field2.getModifiers()+"  ");
                // 每个属性名
                System.out.print(field2.getName()+"  ");
                // 获取属性的类型
                Class type = field2.getType();
                System.out.println(type);
            }    
            
            // 调用运行时本身的.class属性
            Class cla2 = Person.class;
            //打印类路径
            System.out.println(cla2.getName());
            
            // 通过运行时类的对象获取
            Person p = new Person();
            Class cla3 = p.getClass();
            System.out.println(cla3.getName());
        }
    }
  • 相关阅读:
    BZOJ1029:[JSOI2007]建筑抢修(贪心,堆)
    1054. [HAOI2008]移动玩具【BFS】
    1297. [SCOI2009]迷路【矩阵乘法】
    1192. [HNOI2006]鬼谷子的钱袋【进制】
    2243. [SDOI2011]染色【树链剖分】
    1051. [HAOI2006]受欢迎的牛【强连通分量】
    codevs 2074 营救 WW
    codevs 1191 数轴染色
    codevs 2855 游乐园的迷宫 bfs
    codevs 2806 红与黑
  • 原文地址:https://www.cnblogs.com/lantu1989/p/6097371.html
Copyright © 2020-2023  润新知