加载器、反射、xml、DTD、schema、注解、单元测试

news2024/9/19 10:49:04

一、什么是类加载器

 

类加载器

类加载器:负责将.class文件(存储的物理文件)加载在到内存中

类加载的过程 

类加载时机

                                类在什么时候会被加载到内存中呢?

类加载时机

  1. 创建类的实例(对象)
  2. 调用类的类方法
  3. 访问类或者接口的类变量,或者为该类变量赋值
  4. 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
  5. 初始化某个类的子类 直接使用java.exe命令来运行某个主类

          ​​​​用到就加载,不用不加载           

类加载的过程 

 

 

                                ​​​​​​​                                                                            

        ​​​​​​​        ​​​​​​​        ​​​​​​​                      ​​​​​​​        ​​​​​​​  

类加载的过程的小结 

当一个类被使用的时候,才会加载到内存

类加载的过程如下:  

           加载、验证、准备、解析、初始化

类加载的过程 

                  加载          

                  验证           

 

                  准备           

 

                  解析           

                  解析           

            

                 初始化        

类加载器的分类 

类加载器的分类

启动类加载器(Bootstrap ClassLoader):虚拟机内置的类加载器。

 平台类加载器(Platform Classloader):负责加载JDK中一些特殊的模块。

 系统类加载器(System Classloader):负责加载用户类路径上所指定的类库。

 

package com.myclassloader;

/**
 *  获取类加载器
 */
public class ClassLoaderDemo1 {
    public static void main(String[] args) {
        //获取系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

        //获取系统类加载器的父加载器 --- 平台类加载器
        ClassLoader classLoader1 = systemClassLoader.getParent();

        //获取平台类加载器的父加载器 --- 启动类加载器
        ClassLoader classLoader2 = classLoader1.getParent();

        System.out.println("系统类加载器" + systemClassLoader);
        System.out.println("平台类加载器" + classLoader1);
        System.out.println("启动类加载器" + classLoader2);

    }
}

package com.day015_Teacher.demo02_ClassLoader;

public class MyLoader {
    public static void main(String[] args) {
        ClassLoader s = ClassLoader.getSystemClassLoader();
        System.out.println(s);

        // 使用任意一个java类的对象的字节码文件对象,也可以获取它的类加载器
        ClassLoader s2 = MyLoader.class.getClassLoader();
        System.out.println(s2);
    }
}

jdk.internal.loader.ClassLoaders$AppClassLoader@3fee733d
jdk.internal.loader.ClassLoaders$AppClassLoader@3fee733d

 

Process finished with exit code 0

所以:两种方式都是一样的 

类加载器 

方法名

说明

public static ClassLoader getSystemClassLoader() 

获取系统类加载器

public InputStream getResourceAsStream(String name)

加载某一个资源文件

 

package com.myclassloader;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ClassLoaderDemo2 {
    public static void main(String[] args) throws IOException {
        //static ClassLoader getSystemClassLoader() 获取系统类加载器
        //InputStream getResourceAsStream(String name)  加载某一个资源文件

        //获取系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

        //利用加载器去加载一个指定的文件
        //参数:文件的路径
        //返回值:字节流。
        InputStream is = systemClassLoader.getResourceAsStream("prop.properties");

        Properties prop = new Properties();
        prop.load(is);

        System.out.println(prop);

        is.close();
    }
}


{name=zhangsan, age=13}

Process finished with exit code 0

 

 

package com.day015_Teacher.demo02_ClassLoader;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;

public class ClassLoaderDemo2 {
    public static void main(String[] args) throws IOException {
        //static ClassLoader getSystemClassLoader() 获取系统类加载器
        //InputStream getResourceAsStream(String name)  加载某一个资源文件

        //用getClassLoader方法了,就是先获取系统类加载器,然后再利用类加载器读1.txt文件,生成一个字节输入流对象
        // 而系统类加载器默认读文件的路径是从src开始读的,所以能读到;
        //InputStream is = ClassLoaderDemo2.class.getClassLoader()  .getResourceAsStream("1.txt");

        // 不用getClassLoader方法,就是直接利用当前类的字节码文件对象读1.txt文件,生成一个字节输入流对象
        //  而当前文件的字节码文件对象默认读文件的路径是从当前文件的包下开始读的,所以读不到;就得到了null
        InputStream is = ClassLoaderDemo2.class.getResourceAsStream("1.txt");
       // System.out.println(is);
        //利用加载器去加载一个指定的文件
        //参数:文件的路径
        //返回值:字节流。
        //ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        //InputStream is = systemClassLoader.getResourceAsStream("1.txt");
        InputStreamReader isr = new InputStreamReader(is,"utf-8");

        Properties prop = new Properties();
        prop.load(isr);
        System.out.println(prop);
        is.close();
    }
}

 二、反射

反射的概述

反射概述

Java反射机制  

     是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

     对于任意一个对象,都能够调用它的任意属性和方法;    

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

     这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

        ​​​​​​​        ​​​​​​    

                                                                                

​​​​​​​

 反射概述

        程序员

 Java反射机制      

          是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

          对于任意一个对象,都能够调用它的任意方法和属性;  

          这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

 Java反射机制  

     利用反射可以无视修饰符获取类里面所有的属性和方法。

     先获取配置文件中的信息,动态获取信息并创建对象和调用方法

获取Class对象 

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

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

相关文章

微服务自动化【idea插件一键部署】

目录​​​​​​​ 1. Docker结合Idea插件使用 2. 私服搭建 registry 3. 私有仓库的使用 4. idea一键项目部署单独Docker镜像 5. idea一键项目部署Docker标记镜像【私库】 1. Docker结合Idea插件使用 1. 修改Docker服务文件,注释掉"ExecStart"这一行&#x…

火爆的超级人工智能ChatGPT,唯独鄙视中国人

ChatGPT你听说了吗?如果ChatGPT你还没有听说,作为一名程序员,那可能你就out了。使用ChatGPT受阻,为什么不让我们用?它是一款神器,很有意思,当前被大家众星捧月,初次用起来确实很神奇…

微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.5 相关性算分

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构22 DSL 查询语法22.5 相关性算分22.5.1 复合查询22.5.2 相关性算分22.5.3 …

前端精准测试实践

作者:京东云质量部 背景 随着前端技术发展,已经转变为数据绑定为主流的框架方式,与后端服务一样,前端代码实现也会涉及相互依赖,引用这些场景,那么应该如何准确的评估前端代码改动的影响范围?…

2小时开发《点球射门游戏》,动画演示思路(上),代码已开源

唠两句 最近被疫情关在家,时间多运动少,真的很无聊呀!也许是天意为之,居然来世界杯了,虽然这届世界杯很「冷」,但是多少还是为无聊的我们增加了一些无聊的趣事,比如勇哥在等世界杯开幕式的过程…

关于影响编码效果的画质调优总结

1、背景: 调试一个新项目,要求视频帧率为20fps、码率1.5m下,和竞品机对比效果。发现动态场景下的效果比竞品机差距比较明显(做的是安防类的监控相机,比较关注视频的效果),比如对着运动的车流时…

红队隧道应用篇之Netsh端口转发(一)

简介 netsh是从Windows 2000开始就有的一个用于配置网络设备的命令行工具 其中netsh interface portproxy是一个配置网络代理的命令, 可以配置ipv4或ipv6的端口转发代理以及双向端口转发代理 学习隧道应用前必须了解的知识:https://blog.csdn.net/xf555er/article/details/1…

softmax回归从零开始实现

1. 引入Fashion-MNIST数据集 并设置数据迭代器的批量大小为256 import torch from IPython import display from d2l import torch as d2lbatch_size 256 # 每次随机读256张图片,返回训练集和测试集的迭代器 train_iter, test_iter d2l.load_data_fashion_mnist…

职场日常:测试人员如何快速熟悉新业务?

身处职场,学习新业务在所难免,尤其是测试人员,具备良好的业务知识是我们做好质量保障的前提,不管是职场「新人」还是「老人」,快速熟悉业务的能力都是不可或缺的,这是我们安身立命的根本。 但,…

【第一章 Linux目录结构,网络连接三种模式,vi和vim】

第一章 Linux目录结构,网络连接三种模式,vi和vim 1.Linux和Unix: ①Unix针对于大型,高性能主机或服务器; ②Linux适用于个人计算机。 2.网络连接的三种模式: ①桥接模式:虚拟系统可以和外部系…

[附源码]JAVA毕业设计师生交流平台(系统+LW)

[附源码]JAVA毕业设计师生交流平台(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&…

一起用Go做一个小游戏(上)

引子最近偶然看到一个Go语言库,口号喊出“一个超级简单(dead simple)的2D游戏引擎”,好奇点开了它的官网。官网上已经有很多可以在线体验的小游戏了(利用WASM技术)。例如曾经风靡一时的2048:当然…

「Redis数据结构」列表对象(List)

「Redis数据结构」列表对象(List) 文章目录「Redis数据结构」列表对象(List)一、概述二、结构三、编码转换四、总结一、概述 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部&#xf…

(附源码)php丽江旅游服务网站系统 毕业设计 010149

php丽江旅游服务网站系统 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于旅游服务管理也是十分常见的。过去使用手工的管理方式对旅游服务进行管理,造成了管理繁琐、难以维护等问题,如今使用计算机对…

APP自动化测试系列之Appium介绍及运行原理

在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

易基因|m6A去甲基化酶ALKBH5通过降低PHF20 mRNA甲基化抑制结直肠癌进展 | 肿瘤研究

易基因|m6A去甲基化酶ALKBH5通过降低PHF20 mRNA甲基化抑制结直肠癌进展 | 肿瘤研究 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2022年8月17日,北京大学人民医院胃肠外科申占龙教授课题组在《Clin Transl M…

(附源码)ssm物流公司员工管理系统 毕业设计 261625

基于ssm物流公司员工管理系统 摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发…

LeetCode简单题之按身高排序

题目 给你一个字符串数组 names ,和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i,names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 示例 1&#xff1…

聚观早报 | 奈雪成乐乐茶第一大股东;达达与抖音达成战略合作

今日要闻:奈雪成乐乐茶第一大股东;达达与抖音达成战略合作;B 站启动新一轮降本增效;特斯拉上海工厂减产20%;大众将从中国向欧出口汽车奈雪成乐乐茶第一大股东 12 月 6 日消息,乐乐茶与奈雪的茶签署5.25亿元…

主成分分析-书后习题回顾总结

7-2 题目 理论基础 矩阵的特征值和特征向量的定义以及其求法 https://www.cnblogs.com/Peyton-Li/p/9772281.html 特征值和特征向量的定义:设AAA是nnn阶方阵,如果数λ\lambdaλ和nnn维非零列向量α\alphaα使关系式AαλαA\alpha\lambda\alphaAαλα成…