Class.forName和ClassLoader.loadClass区别

Class.forName(className)方法,其实调用的方法是Class.forName(className,true,classloader);注意看第2个boolean参数,它表示的意思,在loadClass后必须初始化。比较下我们前面准备jvm加载类的知识,我们可以清晰的看到在执行过此方法后,目标对象的 static块代码已经被执行,static参数也已经被初始化。

再看ClassLoader.loadClass(className)方法,其实他调用的方法是ClassLoader.loadClass(className,false);还是注意看第2个 boolean参数,该参数表示目标对象被装载后不进行链接,这就意味这不会去执行该类静态块中间的内容。因此2者的区别就显而易见了。

最后还有必要在此提一下new方法和newInstance方法的区别

newInstance: 弱类型。低效率。只能调用无参构造。

new: 强类型。相对高效。能调用任何public构造。

推荐阅读更多精彩内容

  • 1 基本信息 每个开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,...
    java小菜鸟阅读 2,343评论 0 15
  • ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见...
    时待吾阅读 721评论 0 1
  • 我叫杨星,是一个充满正能量的傣族姑娘,我来自云南省红河州边远的一个小县城——元阳,因为是典型的巨蟹座,所以居家的我...
    柒月Grace阅读 91评论 1 1
  • 要参加么? 2015年国庆前夕,决定挑战一下人生的第一场半马——写作半程马拉松。 之所以挑战,那是因为我想知道自己...
    怪咖娜娜阅读 275评论 1 2
  • 思绪万千却凌乱如发 丝丝缕缕又未有起始 夜晚微风也许不止吹乱我的发 也撩乱我的思绪 燥热的气温就像调皮的...
    姓董名什么阅读 73评论 0 1