我有一行这样的代码:
ConfiguationManagerUtils.class.getResource(resourceName);
我不明白为什么在这里使用反射。像静态类方法一样调用它有什么区别:
ConfiguationManagerUtils.getResource(resourceName);
它根本不使用反射。在第一个代码段中调用的getResource(String)
方法根本不会在ConfigurationManagerUtils
上声明 - 它是在Class
类上声明的,作为实例方法。如果第二个代码片段也可以工作,那是因为有一个在ConfigurationManagerUtils
(或超类)中声明的静态getResource(String)
方法。这很可能与Class.getResource()
完全不同。
第一个代码片段只是使用类文字(ConfigurationManagerUtils.class
)来获取对Class
实例的引用,它可以在其上调用getResource(String)
实例方法。
在此代码中,您调用对象的非静态方法Class
引用您的ConfiguationManagerUtils
类:
ConfiguationManagerUtils.class.getResource(resourceName);
在此代码中,调用ConfiguationManagerUtils
类的静态方法。
ConfiguationManagerUtils.getResource(resourceName);
这不是使用反射,您只是访问ConfiguationManagerUtils
的class
属性。
这两个调用之间存在很大差异。
ConfiguationManagerUtils.class.getResource(resourceName); 调用
ConfiguationManagerUtils
的类对象的方法getResource()
。不是您在类 ConfiguationManagerUtils 中定义的那个。ConfiguationManagerUtils.getResource(resourceName); 调用类
ConfiguationManagerUtils
中的方法。即, 该方法在类内部的代码中定义ConfiguationManagerUtils
.