JAVA类的加载(1) ——类的加载及类加载器介绍
1 public class Test {
2 static {
3 b = 6;
4 System.out.println("-----------");
5 }
6 static int a = 9;
7 static int b = 9;
8
9 public static void main(String[] args) {
10 System.out.println("b = " + Test.b); //结果为9
11 }
12 }
1 class MyTest{
2 static {
3 System.out.println("静态初始化块");
4 }
5
6 static final String compileCon = "编译时常量";
7 static final String runningCon = System.currentTimeMillis() + "";
8 }
9
10 public class TestCompileConstant {
11 public static void main(String[] args) {
12 System.out.println(MyTest.compileCon);
13 System.out.println("*****************");
14 System.out.println(MyTest.runningCon);
15 }
16 }
1 class MyTest1{
2 static {
3 System.out.println("MyTest1类的静态初始化块");
4 }
5 }
6
7 public class ClassLoaderTest{
8 public static void main(String[] args) throws ClassNotFoundException{
9 ClassLoader c1 = ClassLoader.getSystemClassLoader();
10 c1.loadClass("MyTest1"); //该语句仅是加载MyTest1类,并不执行该类的初始化
11 System.out.println("系统加载MyTest1类");
12 Class.forName("MyTest1"); //当使用Class的forName()静态方法才会导致该类的强制初始化
13 }
14 }
1 import java.net.URL;
2
3 public class BootstrapTest {
4 public static void main(String[] args) {
5 //获取根类加载器所加载的全部URL数组
6 URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
7 //遍历、输出根类加载器加载的全部URL
8 for (int i=0; i<urls.length; i++) {
9 System.out.println(urls[i].toExternalForm());
10 }
11 }
12 }
1 import java.net.URL;
2 import java.util.Enumeration;
3 import java.io.*;
4
5 public class ClassLoaderProp {
6 public static void main(String[] args) throws IOException {
7 ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
8 System.out.println("系统类加载器: " + systemLoader);
9
10 //获取系统类加载器的加载路径,通常由classpath环境变量指定
11 //如果操作系统没有指定classpath变量,默认以当前路径作为系统类加载器的加载路径
12 Enumeration<URL> em1 = systemLoader.getResources("");
13 while (em1.hasMoreElements()) {
14 System.out.println(em1.nextElement());
15 }
16
17 //获取系统类加载器的父类加载器——应该得到扩展类加载器
18 ClassLoader extensionLader = systemLoader.getParent();
19 System.out.println("扩展类加载器:" + extensionLader);
20 System.out.println("扩展类加载器的加载路径:" + System.getProperty("java.ext.dirs"));
21 System.out.println("扩展类加载器的parent:" + extensionLader.getParent());
22 }
23 }
继承关系:
java.lang.Object
--- java.lang.ClassLoader
--- java.security.SecureClassLoader
--- java.net.URLClassLoader
--- sun.misc.Launcher$ExtClassLoader
java.lang.Object
--- java.lang.ClassLoader
--- java.security.SecureClassLoader
--- java.net.URLClassLoader
--- sun.misc.Launcher$AppClassLoader
JAVA类的加载(1) ——类的加载及类加载器介绍的更多相关文章
- 【转】怎么解决java.lang.NoClassDefFoundError错误 ,以及类的加载机制
转自http://blog.csdn.net/jamesjxin/article/details/46606307 前言 在日常Java开发中,我们经常碰到java.lang.NoClassDefFo ...
- jvm(1)类的加载(二)(自定义类加载器)
[深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他 ...
- JVM性能优化--类加载器,手动实现类的热加载
一.类加载的机制的层次结构 每个编写的".java"拓展名类文件都存储着需要执行的程序逻辑,这些".java"文件经过Java编译器编译成拓展名为". ...
- Java的类加载器都有哪些,每个类加载器都有加载那些类,什么是双亲委派模型,是做什么的?
类加载器按照层次,从顶层到底层,分为以下三种: (1)启动类加载器(Bootstrap ClassLoader) 这个类加载器负责将存放在JAVA_HOME/lib下的,或者被-Xbootclassp ...
- 第42天学习打卡(Class类 Class类的常用方法 内存分析 类的加载过程 类加载器 反射操作泛型 反射操作注解)
Class类 对象照镜子后得到的信息:某个类的属性.方法和构造器.某个类到底实现了哪些接口.对于每个类而言,JRE都为其保留一个不变的Class类型的对象.一个Class对象包含了特定某个结构(cla ...
- Java基础---Java---基础加强---类加载器、委托机制、AOP、 动态代理技术、让动态生成的类成为目标类的代理、实现Spring可配置的AOP框架
类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader 类加载器也是Jav ...
- JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架
1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...
- JVM自定义类加载器加载指定classPath下的所有class及jar
一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责 ...
- jvm(1)类加载(一)(加载过程,双亲加载)
JVM类加载器机制与类加载过程 jvm虚拟机的种类: Hotspot(Oracle)(基本上都是在说这个) J9, JikesRVM(IBM) Zulu, Zing (Azul) Launcher是一 ...
- 深入理解JVM-类加载及类加载器
深入理解JVM 2020年02月06日22:43:09 - 记录学习过程 终于开始了.在学习这个之前,看了zhanglong老师的 java 8 和springboot 迫不及待了.先开始吧. 写在前 ...
随机推荐
- adb如何做Android ui自动化(这一篇就够了)
一.简介 我们都知道在做Android ui自动化的时候用的是appium,环境搭建贼难受.如果我们在工作中遇到需要实现简单的自动化功能,可以直接使用adb来完成,无需去搭建繁琐的appium.ADB ...
- Centos7中Jar快速启动脚本
Centos7中Jar快速启动脚本 创建一个文本,将以下脚本内容复制到文本当中,重命名文本后缀为.sh 注意:根据自己的项目进行更改相关内容,对应注释已说明 #!/bin/sh APP_NAME=ma ...
- 代码随想录贪心专题-day1
35. 分发糖果 n 个孩子站成一排.给你一个整数数组 ratings 表示每个孩子的评分. 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻两个孩子评分更高的孩子会获 ...
- 【pandas小技巧】--按类型选择列
本篇介绍的是pandas选择列数据的一个小技巧.之前已经介绍了很多选择列数据的方式,比如loc,iloc函数,按列名称选择,按条件选择等等. 这次介绍的是按照列的数据类型来选择列,按类型选择列可以帮助 ...
- Django: AttributeError: 'str' object has no attribute 'decode'
Django安装Mysql驱动 pip install PyMySQL 在Django的工程同名子目录的__init__.py文件中添加如下语句 from pymysql import install ...
- Gin+Xterm.js实现远程Kubernetes Pod(一)
Xterm.js简介 xterm.js (https://xtermjs.org/)是一个开源的 JavaScript 库,它模拟了一个终端接口,可以在网页中嵌入一个完全功能的终端.这个库非常灵活,并 ...
- #Powerbi 1分钟学会,设置有密码保护的powerbi报告
目前,有一些朋友和笔者一样,公司暂时没有部署powerbi服务器,但是有时也需要使用powerbi共享一些看板. 如果直接将制作好的报告直接发布在公网上,又存在一定的风险,即便可能只是公布1天. 那么 ...
- 手写 Vuex4 源码
本文首发于掘金,未经许可禁止转载 Vuex4 是 Vue 的状态管理工具,Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存储是响应式的 不能直接改变 store 中的状态.改变 stor ...
- uniapp APP微信登录、支付、分享以及支付宝支付 实战踩坑记录
1.微信支付和支付宝支付 先上代码.封装好了的组件 html部分 <template> <view class="rows"> < ...
- C++ 算法竞赛、02 周赛篇 | AcWing 第2场周赛
AcWing 第2场周赛 竞赛 - AcWing 3626 三元一次方程 AcWing 3626. 三元一次方程 - AcWing 两层循环 #include <iostream> usi ...