当前位置: 首页 > news >正文

企业官网建设_创意网站建设图书网站开发数据库的建立

企业官网建设_创意网站建设,图书网站开发数据库的建立,在威联通上搭建wordpress,wordpress 导航站模板一、类加载的意义与整体流程 在Java中,每一个.java文件经过编译都会生成.class字节码文件。但字节码本身并不能直接运行,必须通过 类加载(Class Loading)将其转化为JVM内存中的数据结构,才能被程序调用。 类加载过程就…

一、类加载的意义与整体流程

        在Java中,每一个.java文件经过编译都会生成.class字节码文件。但字节码本身并不能直接运行,必须通过  类加载(Class Loading)将其转化为JVM内存中的数据结构,才能被程序调用。

        类加载过程就像一座精密的工厂流水线,将原材料(字节码)加工成可运行的类对象。

        类的完整生命周期包含7个阶段:加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载。其中验证、准备、解析统称为  连接(Linking)阶段。

二、类加载的五大阶段详解

1. 加载(Loading):字节码的搬运工

核心任务:将字节码载入方法区,并生成Class对象

  • 二进制获取:通过全限定名(如java.lang.String)获取字节流,来源包括JAR包、网络、动态代理等
  • 数据结构转换:将静态存储结构转换为方法区的运行时结构
  • Class对象生成:在堆内存中创建java.lang.Class实例,作为访问入口

类加载器小贴士:加载工作由类加载器完成,采用双亲委派机制确保安全。例如加载java.lang.Object时,最终由启动类加载器完成。

2. 验证(Verification):安全守门员

四重安全检测机制

  1. 文件格式验证:魔数检查(是否以0xCAFEBABE开头)、版本号验证等
  2. 元数据验证:语义检查(是否继承final类、抽象方法实现等)
  3. 字节码验证:程序逻辑验证(类型转换是否合法、跳转指令正确性等)
  4. 符号引用验证:确保后续解析能正常执行(检查引用的类/方法是否存在)
四重安全检测机制
// 示例:符号引用验证失败案例
public class Demo {public void test() {// 如果SomeClass不存在,解析时会抛出NoClassDefFoundErrorSomeClass.doSomething(); }
}

3. 准备(Preparation):内存分配的预演

  • 类变量内存分配:为static变量分配内存(JDK7+存储在堆中)
  • 初始值设定
    • 普通static变量:设置数据类型的零值(int=0, boolean=false等)
    • final static变量:直接赋代码中的值
public class Example {public static int value = 123;     // 准备阶段value=0public static final int F_VALUE = 456; // 准备阶段F_VALUE=456
}

4. 解析(Resolution):符号到引用的转换

将常量池中的符号引用替换为直接引用

  • 符号引用:以一组符号描述所引用的目标(如全限定名)
  • 直接引用:指向目标的指针、偏移量等能直接定位的内存地址
符号引用类型转换目标
类/接口方法区类型信息
字段内存偏移量
方法方法表索引

5. 初始化(Initialization):真正的诞生时刻

执行类构造器<clinit>()方法,完成:

  • static变量的赋值
  • static代码块的执行

初始化触发条件(满足任一即触发):

  1. new实例对象、访问/设置静态字段(非final)、调用静态方法
  2. 反射调用(如Class.forName()
  3. 初始化子类时发现父类未初始化
  4. JVM启动时指定的主类
  5. 使用MethodHandle/VarHandle的调用点
public class InitDemo {static {System.out.println("静态代码块执行"); }public static int value = initValue();private static int initValue() {System.out.println("静态方法调用");return 100;}
}
// 首次访问InitDemo.value时,输出顺序:
// 静态代码块执行 → 静态方法调用

三、类卸载:生命的终结

卸载三要素:

  1. 该类的所有实例已被GC回收
  2. 没有其他地方引用该类
  3. 加载该类的ClassLoader实例已被GC

重要特性:由系统类加载器加载的类几乎不会被卸载,而自定义类加载器加载的类可能被卸载。例如OSGi框架通过自定义加载器实现模块热部署。

四、高频面试问题解析

Q1:准备阶段和初始化阶段对static变量的处理有何不同?

  • 准备阶段:设置默认零值
  • 初始化阶段:执行代码中的赋值操作

Q2:以下代码会输出什么?

public class Singleton {private static Singleton instance = new Singleton();public static int value1;public static int value2 = 0;private Singleton() {value1 = 1;value2 = 1;}public static void main(String[] args) {System.out.println(Singleton.value1); // 输出1System.out.println(Singleton.value2); // 输出0}
}

解析:初始化顺序导致value2被覆盖。具体执行顺序:

  1. 准备阶段:instance=null, value1=0, value2=0
  2. 初始化阶段:
    • 执行new Singleton() → value1=1, value2=1
    • 执行value2显式赋值 → value2=0

Q3:如何打破双亲委派模型?
通过重写ClassLoader的loadClass()方法,典型应用:

  • Tomcat:Web应用类隔离
  • SPI机制:线程上下文类加载器

码字不易,希望可以一键三连,我们下期文章再见!!!

http://www.yayakq.cn/news/475220/

相关文章:

  • 哪些设计网站可以赚钱谷歌外贸平台有哪些
  • 梁山网站建设小程序注册认证流程
  • 北京网站技术开发公司vi设计收费标准
  • 建站平台绑定域名曲阜网站制作
  • 自己怎样做优惠券网站房产网站做那个比较好
  • 用python做网站前端大庆做网站的
  • 怎么介绍自己做的网站效果图免费网站一键生成
  • 泉州高端网站建设高校文明建设网站
  • 做配电柜在哪个网站发布信息个人做网站和百家号赚钱
  • 访问国外网站 速度慢推荐一些做电子的网站
  • 做网站编辑器网页设计图片旋转代码
  • 用爬虫做数据整合网站影视广告制作公司
  • 内网网站如何建设大连模版网站
  • 重庆网站建设公司名单中国工商做年报网站
  • 桐乡哪里有做网站的搜索引擎网站建设
  • 山东省品牌建设促进会网站wordpress 的分享插件下载
  • 网站访问量统计代码怎么做做视频用的网站有哪些
  • wordpress云播放器自己给网站做优化怎么做
  • 重庆制作网站有哪些百度制作公司网页
  • 网站空间商怎么做软件界面设计软件
  • 湖南网站建设有限公司php网站开发环境配置
  • 临桂建设局网站流量平台有哪些
  • 瓷砖 中企动力 网站建设wordpress rewrite_rules
  • 陕西建设集团韩城公司网站未来做那些网站致富
  • 优斗士网站建设杭州婚恋网站建设
  • 做行业网站投资多少小红书seo排名帝搜软件
  • 常州网站推广方法企业网站建设工作总结
  • 青岛关键词网站排名重庆seo公司怎么样
  • 广东网站建设需要多少钱公众号开发网站公司
  • 专业免费网站建设一般多少钱数据中台厂商