36/365 java 类的加载 链接 初始化 ClassLoader

news2025/1/4 15:44:01

1.类的加载,链接,初始化

注意点:

  • Class对象是在类的加载过程中生成的(类的数据(static,常量,代码)在方法区,Class类对象在堆中),这个Class类对象作为方法区中类数据的访问入口
  • 类的链接过程中:为static变量分配了内存(方法区)和设置了默认初始值
  • 类的初始化:先执行类构造器(对类变量赋值,执行静态代码块),再调用构造方法。

 

 

2.类的初始化

何时会发送类的初始化?

当对类进行主动引用时,会发生类的初始化

 对应的,当对类进行被动引用时,不会发生类的初始化

类的被动引用测试代码:

package AnnotationTest;

public class A5 {
    static{
        System.out.println("Initialize class A5 (main) ");
    }

    public static void main(String[] args) {


        System.out.println(Rabbit.id);

        Rabbit[] r = new Rabbit[10];

        System.out.println(Rabbit.f);
    }
}

class Animal{

    static {
        System.out.println("Initialize class Animal");
    }
    static int id = 10;
}

class Rabbit extends Animal{
    static {
        System.out.println("Initialize class Rabbit");
    }
    static int num = 99;
    static final int f = 2;
}

3.类的加载器

 双亲委派机制:

当一个类加载器收到一个类加载请求时,会将请求先委托给父类加载器去完成,若父类加载器无法完成,才会由这个加载器来加载该类。

所以如果出现自定义的类与Java库中类重名时(比如java.util.ArrayList),会加载Java库中 的类,而非自定义的类。

四类加载器:

  • Bootstrap ClassLoader:无法直接获取,通过子类getParent(),只能得到null
  • Extention ClassLoader
  • Application ClassLoader:会加载classpath下的所有类,包括了用户自定义的类
  • User ClassLoader:加载指定路径的类

测试代码:

package AnnotationTest;

public class A6 {
    public static void main(String[] args) throws ClassNotFoundException {

        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);

        ClassLoader parent = systemClassLoader.getParent();
        System.out.println(parent);

        ClassLoader root = parent.getParent();
        System.out.println(root);

        ClassLoader loader = Class.forName("AnnotationTest.A6").getClassLoader();
        System.out.println(loader);

        loader = Class.forName("java.util.ArrayList").getClassLoader();
        System.out.println(loader);

        System.out.println(System.getProperty("java.class.path"));

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Canvas 实现台球假想球精准定位

1. 前言 台球是一个让人非常着迷的运动项目,充满了各种计算逻辑,十分有趣。 对于初学者,母球、目标球、袋口三者在一条线上的时候,是非常容易进球的,但对于三者不在一条线上时,就是需要假想球的帮助&…

Windows 上安装 Insomnia 代替 Postman

Windows 上安装 Insomnia 代替 PostmanInsomnia 概述官网地址下载和安装 Insomnia使用 InsomniaInsomnia 概述 Insomnia 是一个开源桌面应用程序,它提供了设计、调试和测试API的简单方法。 通过对开发者友好的界面、内置的自动化和可扩展的插件生态系统&#xff0…

自动驾驶中间件:量产落地的关键技术

/ 导读 /对于初入自动驾驶行业的人来说,各色各样的新型传感器、线控系统、芯片域控制器、算法软件似乎是自动驾驶未来实现的重中之重,对于中间件大多数人可能都不太熟悉,有些甚至从未听说过其存在。但中间件却也是极为重要的一环,…

设计模式-创建型模式

目录 4.创建型模式 4.1 单例设计模式 4.1.1 单例模式的结构 4.1.2 单例模式的实现 4.1.3 存在的问题 4.1.4 JDK源码解析-Runtime类 4.2 工厂模式 4.2.1 概述 4.2.2 简单工厂模式 4.2.3 工厂方法模式 4.2.4 抽象工厂模式 4.2.5 模式扩展 4.2.6 JDK源码解析-Collecti…

Kotlin~生成器模式

介绍 主要作用 逐步构造复杂对象,该对象的属性更多的扩展属性,如Glide的使用。 组成 Builder:提供逐步创建产品的步骤 Director:创建可复用的特定产品(规定Builder规定一系列的步骤创建产品,非必须&…

21新版FL Studio水果电音编曲Daw宿主软件好不好用?

首先是FL Studio(以下简称FL)的逻辑和其它宿主软件都不太一样,FL的逻辑就与众不同。FL的逻辑也可以分为三部分:通道机架、混音台和播放列表。在Live里每个发送轨都可以插入一个乐器以及若干个效果器。你有200个发送轨,…

vcenter 起不来报错VMware ESX 找不到虚拟磁盘“vCenter Server 7.0U3_12.vmdk”。请确认路径有效并重试

针对无快照时丢失.vmdk描述符文件:基础磁盘文件为-flat.vmdk是存在的 那个可以进行恢复操作步骤如下1.确定 flat.vmdk基础磁盘文件的大小(字节)2.创建与flat.vmdk相同大小的新的空虚拟磁盘。3.重命名新创建的.vmdk磁盘的描述符文件匹配原始虚…

如何运行一个py项目

在pycharm中打开项目文件确保安装python环境此时是使用python3.7版本,没有的话需要添加环境:add interpreter在anaconda(安装参考https://blog.csdn.net/m0_67357141/article/details/123633490)中选择基础环境(base&a…

Python中的列表

1.创建列表 使用中括号把要添加的元素括起来,不同元素用逗号隔开。 >>> rhyme [1, 2, 3, 4, 5, "上山打老虎"] >>> print(rhyme) [1, 2, 3, 4, 5, 上山打老虎]2.访问列表中的元素 (1)希望顺序访问列表中的元…

博弈论入门

分类 要素 常见博弈 完全信息静态博弈 纳什均衡 囚徒困境 古诺双寡头模型 古诺双寡头模型的条件 市场中有且仅有两家公司策略为同质商品的量,qiq_iqi​边际成本为c,生产成本就为c*q,在这里我们的边际成本是常数。需求曲线:Pa−b∗…

2009-01-从学校毕业步入社会

在一间坐满学生的教室中,台上同学正在对自己毕业答辩项目进行介绍,台下第一排坐着打分的老师,这群人正在进行计算机专业的毕业答辩,台下人群中一个叫刘文轩的同学紧张又期盼的看着前面正在进行答辩的同学,看着同学们优…

react中useReduer和useEffect

相信很多人对于变成中reduce、reducer命名都存在困惑,为了更好理解useRedecuer,我们不妨先来说说reduce。 如何理解reduce和reducer reduce:函数式编程当中的一个术语,reduce操作被称为Fold折叠 // 通过reduce,数组…

公司内部有奖知识答题活动怎么做

公司年会趣味问答、员工业务知识考核、消防安全、党史等知识测试......公司内部的答题活动已经成了众多管理者、HR日常工作中一部分。如何让组织者更轻松、更公平公正地举办答题活动?如何让员工更积极参与呢?试试答题小博士的有奖答题。有奖答题活动形式…

中晶FileScan 3222扫描仪 Code:-206,卡纸或滚筒出错

中晶FileScan 3222是中晶品牌下的一款扫描仪。 型号 3222 产品类型 平板式+馈纸式 扫描光源 LED

机器人中的数值优化之BFGS(convex and smooth)

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 Why Quasi-Newton Methods 2 Rate of convergence 3 Quasi-Newton Methods 3.1 Quasi-Newton approximation 3.2 preserve descent direction 3.3 secant condition 3.4 iterate B 3.5 Parsed solution B 4 Cont…

微信小程序学习第2天——模板语法与样式,全局配置与页面配置

文章目录一、WXML模板语法1、数据绑定2、事件绑定3、条件渲染4、列表渲染二、WXSS模板样式rpximport语法导入样式全局和局部样式三、全局配置全局配置文件及常用配置项windowtabBar四、页面配置一、WXML模板语法 1、数据绑定 数据绑定的原则:①在data中定义数据 ②…

亚信安慧携AntDB数据库入选信通院软件供应链厂商和产品名录

日前,中国信息通讯研究院(简称:中国信通院)在其主办的3SCON软件供应链安全大会上,发布了软件供应链厂商和产品名录。中国信通院云计算与大数据研究所副所长栗蔚表示,我国软件供应链安全发展面临制度体系待完…

微服务组件(高并发带来的问题 服务器雪崩效应 Sentinel入门)

高并发带来的问题 服务器雪崩效应 Sentinel入门高并发带来的问题模拟高并发服务器雪崩效应常见容错方案Sentinel入门(常见的容错组件)什么是Sentinel?订单服务集成Sentinel流控规则预热流控等待流控关联流控链路流控降级(提供一个兜底方案)慢调用比例异常比例异常数案例高并发…

显著图(Saliency map)

这里写目录标题概念应用算法传统算法静态显著性算法:对数光谱(SpectralResidual):静态显著性算法:细粒方法(FineGrained):人工智能算法基于眼动仪预测显著性区域方法积分梯度方法对比…

jsp学生宿舍管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 学生宿舍管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使…