找到Java异常输出时为什么经常有"$Proxy.."的原因了

在代码:java.lang.reflect.Proxy.getProxyClass(ClassLoader, Class<?>...) 中,可以发现这一段代码:

            String proxyPkg = null; // package to define proxy class in


   /*

    * Record the package of a non-public proxy interface so that the

    * proxy class will be defined in the same package.  Verify that

    * all non-public proxy interfaces are in the same package.

    */

   for (int i = 0; i < interfaces.length; i++) {

int flags = interfaces[i].getModifiers();

if (!Modifier.isPublic(flags)) {

   String name = interfaces[i].getName();

   int n = name.lastIndexOf('.');

   String pkg = ((n == -1) ? "" : name.substring(0, n + 1));

   if (proxyPkg == null) {

proxyPkg = pkg;

   } else if (!pkg.equals(proxyPkg)) {

throw new IllegalArgumentException(

   "non-public interfaces from different packages");

   }

}

   }


   if (proxyPkg == null) { // if no non-public proxy interfaces,

proxyPkg = ""; // use the unnamed package

   }


   {

/*

* Choose a name for the proxy class to generate.

*/

long num;

synchronized (nextUniqueNumberLock) {

   num = nextUniqueNumber++;

}

String proxyName = proxyPkg + proxyClassNamePrefix + num;

其中:

         private static long nextUniqueNumber = 0;

         private static Object nextUniqueNumberLock = new Object();


可以发现,主要是nextUniqueNumberLock 这个字段是一直在增长的。所以才会有"$Proxy7"、"java.lang.ClassCastException: $Proxy19"、"java.lang.NoSuchMethodException: $Proxy84"...等等的输出了。


转载于:https://my.oschina.net/u/214483/blog/202345

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值