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

Java高级Day43-类加载

117.类加载

静态和动态加载

反射机制是java实现动态语言的关键,也就是通过反射实现类动态加载

  1. 静态加载:编译时加载相关的类,如果没有则报错,依赖性太强

  2. 动态加载:运行时加载需要的类,如果运行时不用该类,则不报错,降低了依赖性

public class ClassLoad_ {public static void main(String[] args){Scanner scanner = new Scanner(System.in);System.out.println("请输入key");String key = scanner.next();switch(key) {case "1":Dog dog = new Dog();//静态加载,依赖性强dog.cry();break;case "2"://反射 -> 动态加载Class cls = Class.forName("Person");Object o = cls.newInstance();Method m = cls.getMethod("hi");m.invoke(o);System.out.println("ok");break;defalut:System.out.println("do nothing...")}}
}
​
//因为new Dog() 是静态加载,因此必须编写Dog
//Person类是动态加载,所以没有编写Person也不会报错,执行到Person类才会报错

类的加载时机

  1. 当创建对象时(new)

  2. 当子类被加载时,父类也加载

  3. 调用类中的静态成员时

  4. 通过反射

类加载流程图

image-类加载

加载和连接是由JVM机控制的,初始化是程序员可以自己控制的

类加载五个阶段

加载阶段:

JVM在该阶段的主要目的是将字节码从不同的数据源(class文件,jar包等)转化为二进制字节流加载到内存中,并生成一个代表该类的java.lang.Class对象

连接阶段---验证:

  1. 目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全

  2. 包括:文件格式验证(是否以魔数oxcafebabe开头)、元数据验证、字节码验证和符号验证引用

  3. 可以考虑使用-Xverify:none 参数来关闭大部分的类验证措施,缩短虚拟机类加载的时间

连接阶段---准备:

  1. JVM会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始值,如0,0L,null,false等)这些变量所使用的内存都将在方法区中进行分配

  2. public class Class01 {public static void main(String[] args) {//说明一下类加载的链接阶段-准备}
    }
    class A{//属性-成员变量-字段//分析类加载的链接阶段-准备 属性是如何处理//1. n1是实例属性,不是静态变量,因此在准备阶段,是不会分配内存的//2. n2是静态变量,分配内存 n2是默认初始化0,在初始化阶段变为20//3. n3是static final是常量,它和静态变量不一样,会一次性分配,因为一旦赋值就不变,准备阶段就是30public int n1 = 10;public static int n2 = 20;public static final  int n3 =30;
    }

连接阶段-准备:

虚拟机将常量池内的符号引用替换为直接引用的过程

初始化阶段:

  1. 到初始化阶段,才真正开始执行类中定义的Java程序代码,此阶段是执行< client >()方法的过程

  2. < client >()方法是由编译器按语句在源文件中出现的顺序,依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句,并进行合并

    public class Class01 {public static void main(String[] args) {//演示类加-初始化阶段//1.加载B类,并生成B的class对象//2.链接 num = 0//3.初始化阶段  依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句,并合并/*clinit() {System.out.println("B 静态代码块被执行..")//num = 300;num = 100;}合并:num = 100*///4.new后会多 "A()的构造器被执行..."
    ​//new A();//会导致类加载System.out.println(A.num);//100,如果直接使用类的静态属性,也会导致类的加载}
    }
    class A{static {System.out.println("A的静态代码块被执行...");num = 300;}
    ​static int num = 100;public A() {System.out.println("A()的构造器被执行...");}
    }
  3. 虚拟机会包装一个类的< client >()方法在多线程环境中被正确的加锁,同步,如果多个线程同时区初始化一个类,那么只会有一个线程去执行这个类的< client >()方法,其他线程都需要阻塞等待,知道活动线程执行< client >()方法完毕

相关文章:

Java高级Day43-类加载

117.类加载 静态和动态加载 反射机制是java实现动态语言的关键&#xff0c;也就是通过反射实现类动态加载 静态加载&#xff1a;编译时加载相关的类&#xff0c;如果没有则报错&#xff0c;依赖性太强 动态加载&#xff1a;运行时加载需要的类&#xff0c;如果运行时不用该类…...

【LeetCode 算法笔记】155. 最小栈

目录 问题描述单个栈实现双栈实现不开辟额外空间 问题描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop()…...

面试题 05.01. 插入

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给定两个整型数字 N 与 M&#xff0c;以及表示比特位置的 i 与 j&#xff08;i < j&#xff0c;且从 0 位开始计算&#xff09;。…...

稠密向量检索、稀疏向量检索、BM25检索三者对比

在当今的信息检索领域&#xff0c;随着人工智能和自然语言处理技术的发展&#xff0c;稠密向量检索和稀疏向量检索成为了两种主要的研究方向。稠密向量检索依托于高维空间中的向量表示&#xff0c;能够捕捉文档的深层语义信息&#xff0c;而稀疏向量检索则侧重于关键词的匹配&a…...

UEFI学习笔记(六):EDK II 模块:Libraries,DriversApplication

UEFI学习笔记&#xff08;六&#xff09;&#xff1a;EDK II Modules&#xff1a;Libraries&#xff0c;Application&Drivers 一、模块&#xff08;Modules&#xff09;的概念1、Library模块2、Application模块3、Driver模块4、Application和Driver的区别 二、EDK II 实现U…...

详解 Pandas 的透视表函数

Pandas 的透视表函数主要为 pivot() 和 pivot_table()&#xff0c;主要的功能为对 DataFrame 的行和列进行重新组合来重塑数据。 一、pivot 函数 pivot 函数只能对数据进行重塑&#xff0c;不能进行聚合 1. 数据准备 import pandas as pddf1 pd.DataFrame({department_id: […...

基于python+django+vue的农业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…...

动态内存管理之malloc,free,calloc和realloc函数

Hello&#xff0c;各位小伙伴们&#xff0c;小编在这里祝福各位中秋佳节快乐呀&#xff0c;今天让我们来学习一下动态内存管理吧&#xff01; 引言 像我们之前在开辟一段空间的时候你可能会使用整型变量来申请一块空间&#xff0c;或者使用数组来申请一段连续的空间&#xff…...

Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改

目录 一.背景 二.思路 三.代码流程 1.colos.xml自定义颜色 2.设置状态栏的背景颜色 3.对View进行操作 ①.对Clock(状态栏左侧的数字时钟)进行操作 ②.对电池(BatteryMeterView)进行操作 4.锁屏状态栏 5.patch汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…...

【CTF Reverse】XCTF GFSJ1092 easyEZbaby_app Writeup(Android+逆向工程+Java)

easyEZbaby_app 究极简单的安卓逆向 解法 得到一个 apk 安装包。 用 jadx 打开&#xff0c;搜索文本 flag&#xff0c;加载所有。 flag 是 obj obj2&#xff0c;来自用户的用户名和密码。 Override // android.view.View.OnClickListenerpublic void onClick(View view) {St…...

ubuntu 22.04 ~24.04 如何修改登录背景

ubuntu 22.04 ~24.04 如何修改登录背景 背景&#xff1a;由于22.04 登录gdm的变更&#xff0c;之前的修改登录背景的方案已经无法使用。现在给大家分享新的使用方法&#xff1a; 1&#xff0c;下载如下路径的脚本&#xff1a; https://download.csdn.net/download/xdhyqd/89…...

Andrej Karpathy谈AI未来:自动驾驶、Transformer与人机融合

引言 在人工智能领域&#xff0c;Andrej Karpathy 是一个无法忽视的名字。从他早期在 OpenAI 的工作&#xff0c;到后来担任 Tesla 的 AI 主管&#xff0c;他在自动驾驶、深度学习等方面的贡献广为人知。最近&#xff0c;卡帕西做客了著名的播客节目 No Priors&#xff0c;他在…...

Vue使用query传参Boolean类型,刷新之后转换为String问题

做项目时发现第一次进入页面时传参是正常的Boolean类型&#xff0c;刷新之后变成了String&#xff0c;这是浏览器进行的一次强制转换&#xff1b; vue-router 传参&#xff0c;不管是 params 形式还是query形式传参&#xff0c;在页面刷新后&#xff0c;params 和 query 对象中…...

开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界(一)

一、前言 学习Qwen2-VL ,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。 Qwen2-VL 具有卓越的图像和视频理解能力,以及多语言支…...

国学盛典 致敬先贤 《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕

9月10日&#xff0c;《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕。中国著名表演艺术家、曾饰演央视86版电视剧《西游记》中“孙悟空”的六小龄童先生与两百余人传统文化传播者、践行者、爱好者齐聚一堂&#xff0c;共同交流。本次会议由中国文化促进会福文化工作委…...

sqlgun新闻管理系统

一&#xff0c;打开主页 1.输入框测试回显点 -1union select 1,2,3# 出现回显点2 2.查看数据库表名 -1union select 1,database(),3# 3.查看表名 -1union select 1,2,group_concat(table_name) from information_schema.tables where table_schemasqlgunnews# 4.查看admin中…...

react hooks--useState

概述 useState 可以使函数组件像类组件一样拥有 state&#xff0c;也就说明函数组件可以通过 useState 改变 UI 视图。那么 useState 到底应该如何使用&#xff0c;底层又是怎么运作的呢&#xff0c;首先一起看一下 useState 。 问题&#xff1a;Hook 是什么? 一个 Hook 就是…...

C/C++:优选算法(持续更新~~)

一、双指针 1.1移动零 链接&#xff1a;283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操…...

【qt信号槽-6】槽函数不执行的一种原因——未知线程

背景&#xff1a; 项目需要调用第三方库&#xff0c;又要涉及多线程&#xff0c;遇到了在connect成功之后&#xff0c;槽函数依然不执行的情况。按照常理&#xff0c;槽函数不执行无非就几种情况&#xff1a; 要么connect未成功。 要么disconnect&#xff0c;或者对象被销毁…...

Leetcode面试经典150题-162.寻找峰值

解法都在代码里&#xff0c;不懂就留言或者私信 想清楚的话会特别简单&#xff0c;你可能想不到这是个二分。。。 class Solution {/**本题题目规定我们只能用O(logN)的时间复杂度来解题&#xff0c;这显然就是让二分嘛而题目给的数组本身是无需&#xff0c;怎么二分呢其实我…...

7款AI论文写作工具推荐:爱毕业aibiye等平台提供自动排版及LaTeX模板适配

工具快速对比排名&#xff08;前7推荐&#xff09; 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…...

Phi-4-mini-reasoning逻辑推理效果展示:图灵测试级数学对话与错误自检能力

Phi-4-mini-reasoning逻辑推理效果展示&#xff1a;图灵测试级数学对话与错误自检能力 1. 模型简介 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理。作为Phi-4模型家族的一员&#xff0c;它经过专门微调以提升数…...

Chrome 安全机制深度解析(二)告别 unsafe-inline:CSP 进阶实战与攻防博弈,构建真正无法绕过的内容防线

配置了 CSP 依然被 XSS 打穿&#xff0c;问题往往不在攻击有多高明&#xff0c;而在于你始终舍不得删掉那两个词&#xff1a;unsafe-inline、unsafe-eval。真正的强安全 CSP&#xff0c;从来不是妥协的产物&#xff0c;而是一套从策略设计到工程落地的完整体系。上一篇我们讲到…...

win11操作系统

‌电脑显卡 是否是DirectX12 使用 DirectX 诊断工具&#xff08;dxdiag&#xff09;‌ 按下 Win R&#xff0c;输入 dxdiag&#xff0c; win 11 安装电脑配置要求&#xff1a; 核心硬件配置 处理器‌&#xff1a;1 GHz 或更快的兼容 64 位处理器&#xff08;双核心或多核心…...

别再死记硬背MVC了!通过Unity连连看实战,我搞懂了数据与UI分离的5个真实好处

从连连看实战看数据与UI分离的五大工程化收益 在游戏开发领域&#xff0c;设计模式常常被视为"高级概念"而被初学者敬而远之。但当我真正在Unity中实现一个简单的连连看游戏时&#xff0c;才深刻体会到MVC模式中数据与UI分离带来的实际价值。这不是教科书上的理论说教…...

BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南

BiliBiliCCSubtitle&#xff1a;3分钟掌握B站字幕下载与格式转换的终极指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否经常需要从B站视频中提取字幕内…...

OpenClaw初学者套装:Qwen3.5-9B镜像+5个基础技能

OpenClaw初学者套装&#xff1a;Qwen3.5-9B镜像5个基础技能 1. 为什么选择这个组合&#xff1f; 上周六下午&#xff0c;我盯着电脑里散落各处的会议纪要、参考文章和代码片段&#xff0c;突然意识到自己每天要重复几十次"CtrlF→切换窗口→复制粘贴"的操作。作为一…...

2025最权威的十大AI学术神器推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于人工智能生成内容也就是AIGC愈发普及的当前情形下&#xff0c;把它的机械痕迹以及同质化特…...

城通网盘限速破解终极指南:ctfileGet工具让你免费享受10倍下载速度

城通网盘限速破解终极指南&#xff1a;ctfileGet工具让你免费享受10倍下载速度 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经被城通网盘的限速下载折磨得痛不欲生&#xff1f;面对几十KB/s…...

告别重复造轮子:用快马AI一键生成无名小站高效开发模板

作为一个经常需要快速搭建小型网站的后端开发者&#xff0c;我最近发现了一个能极大提升开发效率的方法——用InsCode(快马)平台的AI生成功能来创建可复用的基础模块代码。今天就以"无名小站"的后台管理系统为例&#xff0c;分享我的实践心得。 为什么需要代码生成工…...