脚本宝典收集整理的这篇文章主要介绍了

Java的反射中一些重要的方法

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

原理

  • JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

  • Java中有个Object 类,是所有Java 类的继承根源,其内声明了数个应该在所有Java 类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class 对象。Class对象十分特殊。他是Java中所有类的实例,借助它可以实现对一个对象的操作。

实例

1. 准备工作

  • 创建Person类

    public class Person { private String name; private String age; private void shot(){     System.out.println("!!!"); } protected void shot1() {     System.out.println("111"); } public String getAge() {     return age; } public String getName() {     return name; } public void setAge(String age) {     this.age = age; } public void setName(String name) {     this.name = name; } }

2. 创建Class对象

  • 通过getClass()

    Person person = new Person(); Class<?> class2 = person.getClass();
  • 通过Class.forName()

    Class<?> class1 = Class.forName("test0118.testR.Person");
  • .class

    Class<?> class3 = Person.class;

3. 对对象属性进行操作

  • 获取类的属性

    • getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法.

    • getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法

      Field[] fields = class1.getDeclaredFields(); Field[] fields2 = class1.getFields(); for (Field field : fields) {     System.out.println(Modifier.toString(field.getModifiers()) + field.getName()); } for(Field field:fields2){     System.out.println(Modifier.toString(field.getModifiers())+field.getName());//由于Person类中并没有公有字段,所以该循环不输出任何值 } /** 输出:   privatename privateage */
  • 获取类属性的修饰符
    上述代码中有一个方法Modifier.toString(field.getModifiers())即是获取该属性的修饰符,field.getModifiers()返回一个int值,将该值转化为对应的描述要用到Modifier.toString()方法。

  • 对类的属性进行操作

    Field field = class1.getField("name"); Object object = class1.newInstance(); field.setAccessible(true);//打破了封装的特性,允许对私有属性直接进行操作 field.set(object, "123"); System.out.println(field.get(object));
  • 获取类的方法

    • getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法。

    • getDeclaredMethods()对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。当然也包括它所实现接口的方法。

      Method[] methods = class1.getDeclaredMethods(); Method[] methods2 = class1.getMethods();
  • 获取方法的参数和返回值的类型

    • method.getParameterTypes():获取方法参数类型,返回Class<?>数组

    • method.getReturnType():获取方法返回值类型,返回Class<?>对象

      Class<?>[] ty = method.getParameterTypes(); Class<?> rty = method.getReturnType();
  • 使用反射调用方法

    • method.invoke(对象,参数...)

      Object object = class1.newInstance(); Method method = class1.getMethod("setName", Class.forName("java.lang.String")); method.invoke(object, "123123"); Method method2 = class1.getMethod("getName"); System.out.println((String) method2.invoke(object)); System.out.println(method.getReturnType());

总结

以上是脚本宝典为你收集整理的

Java的反射中一些重要的方法

全部内容,希望文章能够帮你解决

Java的反射中一些重要的方法

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过