美文网首页
Java中反射的简单使用

Java中反射的简单使用

作者: 王魔王 | 来源:发表于2018-11-30 19:43 被阅读0次

    1、获取Class对象

    获取Class对象有三种方式,如下:

            //获取Class对象
            Class<Person> personClass = Person.class;
              Person personFirst = new Person();
            Class aClass = personFirst.getClass();
            //要使用类的全路径类名
            Class person = Class.forName("com.bawie.jingba.Person");
    

    2、获取属性

            //获取属性
            //获取所有的属性(只能获取public的,包括父类的)
            Field[] fields = personClass.getFields();
            //获取某个属性(只能获取public的,不包括父类的)
            Field nikeName = personClass.getField("nikeName");
            
            //获取所有属性(获取所有声明出的,包括私有的,不包括父类的)
            Field[] declaredFields = personClass.getDeclaredFields();
    
            //可以获取私有的某个属性
            //参数解释:idNum为属性的名字
            Field idNum = personClass.getDeclaredField("idNum");
            // 更改public属性值
            nikeName.set(personFirst, "王祖贤");
            //更改私有属性值
            idNum.setAccessible(true);
            idNum.set(personFirst, "18");
    

    3、获取构造方法

      //获取public无参构造方法(不包括父类)
            Constructor[] constructors = personClass.getConstructors();
            //获取全部无参构造方法(包括私有的,不包括父类)
            Constructor[] declaredConstructors = personClass.getDeclaredConstructors();
            
            //只能获取public有参构造方法
            Constructor constructor = personClass.getConstructor(String.class, String.class);
            //可以获取private有参数构造方法
            Constructor declaredConstructor = personClass.getDeclaredConstructor(String.class);
    

    4、实利化对象

           //通过反射示例化对象
            Person person1 = personClass.newInstance();
            Person o = (Person) constructor.newInstance("林青霞", "东方不败");
    

    5、获取方法

            //获取父类的public方法,以及自身的所有方法
            Method[] methods = personClass.getMethods();
    
            //获取本类中声明的方法(public和private),不包括父类的方法
            Method[] declaredMethods = personClass.getDeclaredMethods();
    
            //获取单个public方法
            Method eatMethod = personClass.getMethod("eat");
            Method hitMethod = personClass.getMethod("hit", int.class);
    
            //获取单个私有方法
            //参数解释:sleep为方法的名字
            Method sleepMethod = personClass.getDeclaredMethod("sleep");
    
           //调用方法
            eatMethod.invoke(personFirst);
            hitMethod.invoke(personFirst, 10);
            //调用私有方法
            sleepMethod.setAccessible(true);
            sleepMethod.invoke(personFirst);
    

    有关调用方法的解释:
    通过反射调用方法的时候,传递的第一个参数是要调用的对象,例如personFirst,而后面的参数,就根据方法本身的参数传递即可。
    例如:sleep方法、eat方法、hit方法是这样定义的

     private void sleep() {
            LogUtil.d( "睡觉");
        }
     public void eat() {
            LogUtil.d( "吃饭");
        }
     public void hit(int count) {
            LogUtil.d( "打豆豆" + count + "次");
        }
    

    相关文章

      网友评论

          本文标题:Java中反射的简单使用

          本文链接:https://www.haomeiwen.com/subject/gvckcqtx.html