1.什么是反射?

通俗的来说就是,通过java的类名创建Class对象,然后我们可以通过class对象的newInstance的方法获得我们所需要的对象,而且这个过程是在程序运行中创建的,我们可以称之为动态编译,这样很大的提高了代码的灵活性,并降低了代码之前的耦合度。这样我们常见的例子就是Class.forName("JDBC");我想我们在加载jdbc的时候都用过这个方法,这样就是反射,具体的例子这里不在这里复述,本文重点在于如果提供反射效率;

2.我们在反射细节中如果提供反射效率?

因为反射是解析字节编码,所以在动态加载的时候,JVM无法对这些代码进行优化。所以我们能做的就是在代码上做一些改善的优化。

1.不要用getMethods()后再遍历筛选,如果知道方面的名字的情况下,尽量使用直接根据方法名的情况下获取方法getMethos(methodsName);

2.使用缓存保存:

public Method getMethod(String name, Class<?>... parameterTypes)
throws NoSuchMethodException, SecurityException {
checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
Method method = getMethod0(name, parameterTypes);
if (method == null) {
throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
}
return method;
}

private Method getMethod0(String name, Class<?>[] parameterTypes) {
if ((res = searchMethods(privateGetDeclaredMethods(true),
name,
parameterTypes)) != null) {
return res;
}
if (!isInterface()) {
Class<? super T> c = getSuperclass();
if (c != null) {
if ((res = c.getMethod0(name, parameterTypes)) != null) {
return res;
}
}
}
Class<?>[] interfaces = getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
Class<?> c = interfaces[i];
if ((res = c.getMethod0(name, parameterTypes)) != null) {
return res;
}
}
return null;
}

private static Method searchMethods(Method[] methods,
String name,
Class<?>[] parameterTypes)
{
Method res = null;
String internedName = name.intern();
for (int i = 0; i < methods.length; i++) {
Method m = methods[i];
if (m.getName() == internedName
&& arrayContentsEq(parameterTypes, m.getParameterTypes())
&& (res == null
|| res.getReturnType().isAssignableFrom(m.getReturnType())))
res = m;
}

return (res == null ? res : getReflectionFactory().copyMethod(res));
}
3.使用当前高性能的反射库;

更多相关文章

  1. javaScript函数中执行C#代码中的函数
  2. 如何将Java中的类型与反射进行比较
  3. 反编译APK 得到JAVA代码和资源文件源码
  4. java.io.File vs java.nio.Files这是新代码中的首选?
  5. 拖动层的javasvript代码 十行代码即可写出兼容版拖动层
  6. 我无法让这个简单的ajax代码工作
  7. javascript实现拖动层效果代码(许愿墙)
  8. 牛客网Java刷题知识点之同步方法和同步代码块的区别(用synchroniz
  9. 在java自动生成hashCode代码问题? 请大神赐教

随机推荐

  1. :Android实现程序前后台切换效果
  2. Android TextView的字符过滤功能
  3. 【android学习笔记】收藏的网上查找的and
  4. Android TV 焦点控制逻辑
  5. java
  6. android sdk 文件目录含义介绍
  7. __builtin_clz(); __builtin_ctz(); __bu
  8. android 布局边框阴影1dp
  9. 【源码分享下载】每日更新之Android快速
  10. android通知栏进度条