类显式加载

1、Class.forName("classloader.Dog");  方式加载   Example1

 1 package classloader;
2
3 public class Example {
4 public static void main(String[] args) throws ClassNotFoundException {
5
6 Class<?> dogClass = Class.forName("classloader.Dog");
7 System.out.println("className=" + dogClass.getName());
8 }
9 }
10
11 class Dog {
12 static {
13 System.out.println("Dog 的静态块初始化");
14 }
15 }

结果:

Dog 的静态块初始化
className=classloader.Dog

说明 静态化部分已经被执行

2、ClassLoader.loadClass("classloader.Dog"); 方式加载   Example1

 1 package classloader;
2
3 public class Example {
4 public static void main(String[] args) throws ClassNotFoundException {
5
6 ClassLoader cl1 = Example.class.getClassLoader(); //获取到class对象; .ClassLoader获取到加载这个类的ClassLoader
7
8 Example obj = new Example();
9 ClassLoader cl2 = obj.getClass().getClassLoader();
10
11 System.out.println("cl1.equals(cl2) ? " + cl1.equals(cl2));
12
13 Class<?> loadClass = cl1.loadClass("classloader.Dog");
14 System.out.println("className=" + loadClass.getName());
15 }
16 }
17
18 class Dog {
19 static {
20 System.out.println("Dog 的静态块初始化");
21 }
22 }

结果:

cl1.equals(cl2) ? true
className=classloader.Dog

说明 静态化部分未被执行

ClassLoader.loadClass("classloader.Dog");  方式加载 Example2

 1 package classloader;
2
3 public class Example {
4 public static void main(String[] args) throws ClassNotFoundException {
5
6 ClassLoader cl3 = Dog.class.getClassLoader();
7 Class<?> loadClass3 = cl3.loadClass("classloader.Dog");
8 System.out.println("className=" + loadClass3.getName());
9 }
10 }
11
12 class Dog {
13 static {
14 System.out.println("Dog 的静态块初始化");
15 }
16 }

结果:className=classloader.Dog

实例说明:使用Class.forName("com.mysql.jdbc.Driver"),会使得com.mysql.jdbc.Driver的静态化部分被执行,从而注册成功

JAVA 类显式加载的更多相关文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 (28) ------ 第五章 加载实体和导航属性之测试实体是否加载与显式加载关联实体

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-11  测试实体引用或实体集合是否加载 问题 你想测试关联实体或实体集合是否已经 ...

  2. 【EF学习笔记08】----------加载关联表的数据 显式加载

    显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...

  3. dll显式加载与隐式加载

    使用动态DLL有两种方法,一种是隐式链接,一种是显式链接,如果用loadlibrary就是显示链接,用lib就属于隐式链接. 两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样 ...

  4. Java类编译、加载、和执行机制

    Java类编译.加载.和执行机制 标签: java 类加载 类编译 类执行 机制 0.前言 个人认为,对于JVM的理解,主要是两大方面内容: Java类的编译.加载和执行. JVM的内存管理和垃圾回收 ...

  5. DLL动态库的创建,隐式加载和显式加载

    动态库的创建 打开VS,创建如下控制台工程,工程命名为DllTest: 在弹出的对话框中选择"DLL"后单击"完成"按钮: 在工程中新建DllTest.h和Dl ...

  6. java类什么时候加载?,加载类的原理机制是怎么样的?

    java类什么时候加载?,加载原理机制是怎么样的?   答: 很多人都不是很清楚java的class类什么时候加载在运行内存中,其实类加载的时间是发生在一下几种情况: 1.实例化对象时,就像sprin ...

  7. JAVA类的静态加载和动态加载以及NoClassDefFoundError和ClassNotFoundException

    我们都知道Java初始化一个类的时候可以用new 操作符来初始化, 也可通过Class.forName()的方式来得到一个Class类型的实例,然后通过这个Class类型的实例的newInstance ...

  8. tomcat热部署,更改java类不用重新加载context

    修改类后,tomcat热部署会重新加载整个项目的context,影响开发效率.网上查的大多数是将server的modules标签中Auto Reload项改为Disabled,但是没有效果. 使用以下 ...

  9. 【DLL】动态库的创建,隐式加载和显式加载(转)

    原文转自:https://blog.csdn.net/dcrmg/article/details/53437913

  10. Java类编译、加载、和执行

    https://www.cnblogs.com/fefjay/p/6305499.html

随机推荐

  1. linux内核编译体验篇(一)

    文章目录 一. 准备环境 二. 获取内核源码 三. 交叉编译工具链的配置 1. 博友们常用安装方法链接 2. 公司常用的交叉工具链使用方法 四. 内核解压以及如何打补丁 五. 内核基本配置 1. 编译 ...

  2. 原生poi实现模版导出

    背景 我们公司是内网开发,外网jar包我的权限不够,所以easyexcel jar包无法使用,参考了easyexcel的填充思想,写了一个较简单的填充方法,如果直接用easyexcel的话,可以参考这 ...

  3. FireflySoft.LeaderElection增加基于ZooKeeper的Leader选举

    FireflySoft.LeaderElection的第一个版本实现了基于Consul的Leader选举,考虑到ZooKeeper的一个常见用途也是选主,所以此类库把ZooKeeper也集成了进来.并 ...

  4. 【译】如何在 Visual Studio 中调试异步代码

    虽然异步代码可以提高程序的整体吞吐量,但异步代码仍然无法免除错误!当潜在的死锁.模糊的错误消息以及查找导致 Bug 的 Task 时,编写异步代码会使调试更加困难.幸运的是,Visual Studio ...

  5. Bootstrap使用方法

    中文文档:https://www.bootcss.com/ 使用方式: 1.选择对应的文档:  2.网站会自动跳转,一般选择Bootstrap3中文文档:  3.点击入门,下拉找到基础模板,复制代码到 ...

  6. Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-4_w0c665/PyQt5/

    错误: 解决方式:输入一下命令 1 pip3 install --upgrade setuptools 2 python3 -m pip install --upgrade pip 输入命令: 1 p ...

  7. centos7安全防护配置

    前言 这段时间公司的服务器在做等保验证,对服务器的做了一些安全防护配置,留此记录. 操作系统版本:centos 7.6 密码有效周期 相关文件:/etc/login.defs 参数 说明 默认值 修改 ...

  8. 部署安装maven和mvnd

    前言 maven是常见的java构建工具,优点是稳定可靠,缺点是构建太慢,maven-mvnd是maven的强化版,致力于提高构建速度,默认情况下,mvnd 使用多核CPU并行构建. 常见的java构 ...

  9. 个人用C#编写的壁纸管理器 - 开源研究系列文章

    今天介绍一下笔者自己用C#开发的一个小工具软件:壁纸管理器. 开发这个小工具的初衷是因为Windows操作系统提供的功能个人不满意,而且现在闲着,所以就随意写了个代码.如果对读者有借鉴参考作用就更好了 ...

  10. MySQL面试题全解析:准备面试所需的关键知识点和实战经验

    MySQL有哪几种数据存储引擎?有什么区别? MySQL支持多种数据存储引擎,其中最常见的是MyISAM和InnoDB引擎.可以通过使用"show engines"命令查看MySQ ...