zoukankan      html  css  js  c++  java
  • java的类加载机制

    1、类的加载、连接、与初始化

                          

    • 加载:在硬盘上查找,并加载累的二进制数据进内存

    类加载是指将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据。

    • 连接

    -验证:确保被加载类的正确性

    -准备:为类的静态变量分配内存,并将其初始化为默认值

    -解析把类中的符号引用转换为直接引用

    • 初始化:为类的静态变量赋正确的初始值、  

    类的初始化时机:

    • 主动使用:
      • 创建类的实例
      • 访问某个类的活接口的金泰变量,或者对静态变量赋值
      • 调用类的静态方法
      • 反射,如:class.forName()
      • 初始化一个类的子类
      • java虚拟机启动时被标明为启动类的类
    • 初始化步骤  
      • 加入这个类还没有被加载和连接,那就先进行加载和连接
      • 假如类存在直接的父类,并且这个父类还没有被初始化,那就先初始化直接的父类
      • 假如勒种存在初始化语句,那就一次执行这些语句(从上到下,如static{}
    • 除了上述六种情况,其他使用Java类的方式都看看做是被动使用,不会导致类的初始化
    • 当java虚拟机初始化一个类时,要求它的所有父类都已经被初始化,但是这条规则并不适用于接口。
      •   在初始化一个类时,并不会先初始化他所实现的接口。
      •   在初始化一个接口时,并不会先初始化它的父接口。

               因此,一个负借口并不会以为它的子接口或者实现类的初始化而初始化,只有当程序首次使用特定接口的静态变量时,才会导致该接口的初始化。

    附文:http://hxraid.iteye.com/blog/747625

     

  • 相关阅读:
    openwrt 更改 debug 等级(hostapd)
    openwrt 中procd
    openwrt增加串口登录需要密码
    openwrt设置语言的过程
    小程序感悟123
    如何用php实现分页效果
    如何利用h5将视频设置为背景
    关于js中定时器的返回值问题
    canvas二:绘制圆和其他曲线
    canvas一:基本认识
  • 原文地址:https://www.cnblogs.com/zhangyfr/p/6707407.html
Copyright © 2011-2022 走看看