有关java反射的几个小方法的作用和区别

  1.Class类中 getXXX()和getDeclaredXXX()的作用和区别:

  前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类。后者获取所有的字段(or方法or构造函数),即所有修饰符修饰的(public,private,protectd),但是并不包括父类的申明字段。

  例:getFields()获得某个类的所有的公共(public)的字段,包括父类。
getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

同样类似的还有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。

  2.java中getSuperClass()和getClass()区别:

  前者为获取继承的类(父类),后者为获取当前类。前者为Class类中的方法,后者为Object类

  3.Field 中的isAccessible真正的含义是什么?

  isAccessible()值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。实际上setAccessible是启用和禁用访问安全检查的开关,并不是为true就能访问为false就不能访问。由于JDK的安全检查耗时较多.所以通过setAccessible(true)的方式关闭安全检查就可以达到提升反射速度的目的

  4.isAssignableFrom()和 instanceof

  isAssignableFrom是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。通常调用格式是Class1.isAssignableFrom(Class2)。调用者和参数都是java.lang.Class类型。  
  instanceof是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。 格式是:oo instanceof TypeName。第一个参数是对象实例名,第二个参数是具体的类名或接口名

原文地址:https://www.cnblogs.com/JavaZhangXu/p/7149420.html