反射中getFields()与getDeclaredFields()区别

* getFields()与getDeclaredFields()区别:getFields()只能访问类中声明为公有的字段,私有的字段它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法

* getMethods()与getDeclaredMethods()区别:getMethods()只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法

* getConstructors()与getDeclaredConstructors()区别:getConstructors()只能访问类中声明为public的构造函数.getDeclaredConstructors()能访问类中所有的构造函数,与public,private,protect无关

时间: 2024-10-27 12:37:58

反射中getFields()与getDeclaredFields()区别的相关文章

JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别

关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来看看这两者的区别吧: getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段. getDeclaredFields():获得某个类的所有声明的字段,即包括public.private和proteced,但是不包括父类的申明字段. 同样类似的还有getConstructors()和getDeclaredConstructors().getMethods()和getDe

在java反射中 Class.forName和classLoader的区别

解释 在java中,Class.forName()和ClassLoader()都可以对类进行加载,ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是"通过一个类的全限定名来获取描述此类的二进制字节流",获取到二进制流后放到JVM中.Class.forName()方法实际上也是调用的CLassLoader来实现的. Class.forName(String className)这个方法的源码是: 最后调用的方法是forName0这个方法,在这个forN

C#中 反射中的Assembly(装载程序集):

反射中的Assembly(装载程序集):可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息. 1  String assemblyName = @"NamespaceRef";//命名空间 2     String strongClassName = @"NamespaceRef.China";//需要动态生成的类交China Assembly.Load(assemblyName).CreateInstance(strongClassName);

.NET反射中BindingFlags的值

BindingFlags.Default 不指定绑定标志 BindingFlags.IgnoreCase 表示忽略 name 的大小写,不应考虑成员名的大小写 BindingFlags.DeclaredOnly 只应考虑在所提供类型的层次结构级别上声明的成员.不考虑继承成员. BindingFlags.Instance 只搜索实例成员 BindingFlags.Static 只搜索静态成员 BindingFlags.Public 只搜索公共成员 BindingFlags.NonPublic 只搜

在反射中Member{get{..}set{..}}与Member{get;set;}的区别?

最近的在写代码的时候,需要用到反射来获取类中的所有公开属性值,于是写下如下代码: StringBuilder sb = new StringBuilder(); foreach (var f in this.GetType().GetFields()) { sb.AppendLine(string.Format( "{0}={1};", f.Name, f.GetValue(this))); } return sb.ToString(); 工作正常,后又在另一处对另外一个类需要获取属性

反射中getMethods 与 getDeclaredMethods 的区别

public Method[] getMethods()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法.public Method[] getDeclaredMethods()对象表示的类或接口声明的所有方法,包括公共.保护.默认(包)访问和私有方法,但不包括继承的方法.当然也包括它所实现接口的方法. public static void main(String[] args) throws ClassNotFoundException, Illeg

Java反射中Class.forName与classLoader的区别

Java中的class.forName和classLoader都可以用来对类的加载. class.forName除了把类加载到JVM中,还会对类进行解释,执行类的static代码块: classLoader只是把类加载到JVM中,只有在调用newInstance的时候才会去执行static代码块: class.forName的源码如下,对static块的执行是可用控制的,第二个参数为True则执行 public static Class<?> forName(String className)

java反射中,Class.forName 和 ClassLoader 加载类的区别

解释 在java中Class.forName()和ClassLoader都可以对类进行加载.ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是"通过一个类的全限定名来获取描述此类的二进制字节流",获取到二进制流后放到JVM中.Class.forName()方法实际上也是调用的CLassLoader来实现的 Class.forName(String className):这个方法的源码是 <tbody><tr><td cl

在 Java 的反射中,Class.forName 和 ClassLoader 的区别

1. 解释 在java中Class.forName()和ClassLoader都可以对类进行加载.ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全限定名来获取描述此类的二进制字节流”,获取到二进制流后放到JVM中.Class.forName()方法实际上也是调用的CLassLoader来实现的. Class.forName(String className)  的源码如下: 1 @CallerSensitive 2 public static