java类加载的几种方式

回顾下java基础、很多人可能不知道java中类加载的过程,记得很久以前面试被问过一道面试题如下:

Q:类的加载有几种方式?
  • new
  • Class.forName()
  • ClassLoader.loadClass()
Q:调用ClassLoader.loadClass()的时候jvm做什么事情?
  • 这个时候只是把该类加载到jvm中并对它进行了格式校验,并解析该文件,分配内存并赋值默认值,并且将符号引用替换成直接引用(内存地址)。
Q:这个时候再调用Class.forName()做了什么事情?
  • 这个时候由于类已经载入,所以不会再次进行加载,所以这个时候会检查类是否加载如果已加载则就初始化。初始就是执行静态代码块初始化。
Q:那么假如我定义了一个public int a=10什么时候这个a=10呢?
  • 实例化的时候,用newInstance()的时候才开始赋值的,这也就是为什么static中不能引用外部非staic变量或者方法的原因。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章