Java-API简析_java.lang.ClassLoader类(基于 Latest JDK)(浅析源码)

news2024/9/21 3:03:18

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131345825
出自【进步*于辰的博客】

其实我的【Java-API】专栏内的博文对大家来说意义是不大的。因为暂且没有源码讲解,而且需要看Java-API,直接看Java-API文档就行了,也不用看博文。所以呢,这篇博文主要是写给我自己看的,也就是Java-API笔记。
因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。

文章目录

  • 1、概述
  • 2、构造方法摘要
    • 2.1 protected null
    • 2.2 protected ClassLoader parent

1、概述

在这里插入图片描述
类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称(见下文),那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。

每个 Class 对象都包含一个对定义它的 ClassLoader 的引用。

数组类的 Class 对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建。数组类的类加载器由 Class.getClassLoader() 返回,该加载器与其元素类型的类加载器是相同的;如果该元素类型是基本类型,则该数组类没有类加载器。

应用程序需要实现 ClassLoader 的子类,以扩展 Java 虚拟机动态加载类的方式

类加载器通常由安全管理器使用,用于指示安全域

ClassLoader 类使用委托模型来搜索类和资源。每个 ClassLoader 实例都有一个相关的父类加载器。需要查找类或资源时,ClassLoader 实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。虚拟机的内置类加载器(称为 “bootstrap class loader”)本身没有父类加载器,但是可以将它用作 ClassLoader 实例的父类加载器。

通常情况下,Java 虚拟机以与平台有关的方式,从本地文件系统中加载类。例如,在 UNIX 系统中,虚拟机从 CLASSPATH 环境变量定义的目录中加载类。

然而,有些类可能并非源自一个文件;它们可能源自其他来源(如网络),也可能是由应用程序构造的。defineClass() 方法将一个字节数组转换为 Class 类的实例。这种新定义的类的实例可以使用 Class.newInstance() 来创建。(反射

类加载器所创建对象的方法和构造方法可以引用其他类。为了确定引用的类,Java 虚拟机将调用最初创建该类的类加载器的 loadClass() 方法。

例如,应用程序可以创建一个网络类加载器,从服务器中下载类文件。示例代码如下所示:

ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass("Main", true).newInstance();
    . . .

网络类加载器子类必须定义方法 findClass()loadClassData(),以实现从网络加载类。下载组成该类的字节后,它应该使用方法 defineClass() 来创建类实例。示例实现如下:

class NetworkClassLoader extends ClassLoader {
    String host;
    int port;

    public Class findClass(String name) {
        byte[] b = loadClassData(name);
        return defineClass(name, b, 0, b.length);
    }

    private byte[] loadClassData(String name) {
        // load the class data from the connection
         . . .
    }
}

二进制名称
按照《Java Language Specification》的定义,任何作为 String 类型参数传递给 ClassLoader 中方法的类名称都必须是一个二进制名称
有效类名称的示例包括:

"java.lang.String"
"javax.swing.JSpinner$DefaultEditor"
"java.security.KeyStore$Builder$FileBuilder$1"
"java.net.URLClassLoader$3$1"

从以下版本开始:
1.0
另请参见:
resolveClass(Class)

2、构造方法摘要

2.1 protected null

使用方法 getSystemClassLoader() 返回的 ClassLoader 创建一个新的类加载器,将该加载器作为父类加载器。

2.2 protected ClassLoader parent

使用指定的、用于委托操作的父类加载器创建新的类加载器。


本文持续更新中。。。

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

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

相关文章

CentOS 7.9 安装 Jenkins

CentOS 7.9 安装 Jenkins 文章目录 CentOS 7.9 安装 Jenkins一、概述二、安装1、安装 OpenJDK2、安装 Jenkins3、启动 Jenkins4、给 Jenkins 放行端口 三、初始化 Jenkins 配置1、访问2、解锁 Jenkins3、配置清华大学的源地址4、安装插件5、创建管理员用户6、完成安装 四、功能…

TypeScript ~ TS 掌握自动编译命令 ③

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

锐捷睿易:云端绑定别人账号,命令方式解绑

一、适用场景 云端绑定了别人的账号,但又不能让他解绑,只能自己解绑从新绑定自己MACC 前提:需要设备联网状态才可以解绑 二、配置步骤 1、登录macc,首页点击设备解绑 2、输入收集的设备序列号,点击获取专属URL&…

chatgpt赋能python:Python清空console的方法

Python清空console的方法 随着Python的应用越来越广泛,我们经常会遇到需要清空Python console的情况。比如,我们可能需要重新开始一段代码的执行,或者想要隐藏过去的交互记录。在这篇文章中,我们将介绍几种方法来清空Python cons…

安装配置nvm-windows对Node.js与npm进行版本控制

一、nvm 由于Node.js版本原因,可能会出现一些错误,如IDEA中Node.js环境下npm报错Error:0308010C:digital envelope routines:unsupported。而且不同的项目,所采用的Node.js的版本不同,重新卸载安装配置,太过繁琐。所以…

chatgpt赋能python:Python求加速度:从计算机视觉到自动驾驶

Python求加速度:从计算机视觉到自动驾驶 在计算机视觉、自动驾驶和机器人等领域,求加速度是常见的任务。Python是一种强大的编程语言,可以用于快速、简便地求解加速度。本篇文章将介绍如何在Python中求解加速度,并探讨加速度在实…

【无标题】很有趣的一个个CSS小球下落动画

代码如下 <!-- 两个div --> <div class"ball"></div> <div class"ground"></div>.ball {width: 30px;height: 30px;background-color: black;border-radius: 50%;position: relative;left: 90px;animation: failing 0.5s ea…

leetcode64. 最小路径和(动态规划-java)

最小路径和 leetcode64. 最小路径和题目描述 暴力递归 缓存代码演示 动态规划代码演示空间压缩代码演示 动态规划专题 leetcode64. 最小路径和 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/minimum-path-sum 题目描…

C高级6.23

一.整理用户相关的指令、整理磁盘相关的指令 用户相关的指令&#xff1a; 1.id -u 查看用户ID 2.id -g 查看组ID 3.whoami 查看用户名 4.sudo adduser 用户名 创建用户 5.给新用户添加sudo权限 给新用户添加sudo权限的步骤&a…

Spring 与 Servlet-1

整合 Spring 和 Servlet DAO 使用 JDBC 通过模板类进行整合&#xff0c;模板类由 Spring 框架提供&#xff0c;只需进行配置即可 1、依赖&#xff1a;spring-jdbc 和连接池 druid、数据库驱动 mysql-connect-java 2、引入了 IoC、DI 后对象的创建完全交给 Spring 负责&#…

chatgpt赋能python:求1-3+5-7:用Python解决这个算术问题

求1-35-7: 用Python解决这个算术问题 介绍 在Python编程领域中&#xff0c;算术问题是我们经常会遇到的。今天&#xff0c;我们将介绍如何用Python求1-35-7这个算式的结果。这个问题看起来很简单&#xff0c;但如果你是初学者&#xff0c;可能会有点难以理解。不必担心&#…

嵌入式中编写可移植 C/C++ 程序的要点方法

以前做过两年 C 程序移植工作&#xff0c;从 Win32 平台移植到 Linux 平台。大约有上百万行 C/C代码&#xff0c;历时一年多。 在开发 Win32 版本时&#xff0c;已经强调了程序的可植性&#xff0c;无奈 Win32 团队里对 Linux 精通的人比较少&#xff0c;很多问题没有想到&…

InstructGPT论文解读

介绍 上图可以看出InstructGPT(PPO-ptx)及变体&#xff08;variant trained without pretraining mix&#xff09;(PPO)显著优于GPT&#xff0c;1.3B的InstructGPT优于175B的GPT&#xff0c;SFT作为RLHF第一阶段的模型效果比GPT好。当然结果是由人来评价的。 RLHF包含三个步骤…

多EIP下的UDP通信异常分析

背景 SRE和程序在测试DDos多EIP防御方案的过程中&#xff0c;发现多EIP模式下, 监听的UDP端口连接会出现客户端访问异常。 表现为客户端发送一次数据后服务端这边主动断开了&#xff0c;或是客户端和服务端同时断开。 该问题会导致业务在多EIP方案下无法达到预期效果&#xff0…

【Visual Studio】Qt 获取系统时间,并实时更新时间,使用 C++ 语言,配合 Qt 开发串口通信界面

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 这个需求来源于这个工程&#xff1a;【Visual Studio】Qt 的实时绘图曲线功能&#xff0c;使用 C 语言&#xff0c;配合 Qt 开发串口通信界面。 文章目录 Qt…

chatgpt赋能python:Python求和1-100的方法

Python求和1-100的方法 Python语言简介 Python是一个广泛使用的高级编程语言&#xff0c;其设计哲学强调代码可读性和语法简洁性。Python语言作为一门多范式的编程语言&#xff0c;支持对象、函数式和结构化编程等多种形式。Python应用领域广泛&#xff0c;如机器学习、桌面应…

chatgpt赋能python:Python求1!:介绍

Python求1!&#xff1a;介绍 在Python编程中&#xff0c;阶乘是一个常见的数学运算。阶乘指定的数的所有小于或等于其本身的正整数之积&#xff0c;例如&#xff0c;1!等于1&#xff0c;2&#xff01;等于2乘以1&#xff0c;3!等于3乘以2乘以1&#xff0c;以此类推。 在这篇文…

【工程项目管理】工程项目管理实践报告

前言&#xff1a; 1.大学课程的大作业&#xff0c;觉得存起来也没什么用就干脆发出来了。。。 2.很可能有不严谨之处&#xff0c;各位看官如若发现欢迎指出~ 创作者文章管理系统 1 实践环节作业1&#xff1a;选题及任务分解WBS &#xff08;1&#xff09;选题 a.项目名称&a…

【1 beego学习 -MAC框架与ORM数据库】

0 beego的启动流程 1 入口 package mainimport ( //全局使用的路由和models_ "studyDemo/models"_ "studyDemo/routers"beego "github.com/beego/beego/v2/server/web" )func main() {beego.Run() }2 根据请求路由加载对应的控制器 package r…

【计算机组成原理】微程序控制器

目录 一、微程序控制器概述 二、微程序控制器设计方法 三、微指令执行过程 四、控制字段的编码方式 五、下址字段的设计方法 六、微程序入口地址的产生方法 一、微程序控制器概述 微程序&#xff1a;微指令构成的有序集合&#xff0c;一条指令对应一段微程序 微指令&…