java_[类加载器]
Class 与 类加载
- Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息。
- 将类信息读到内存中过程,称为类加载
Java在需要使用某个类时,才会将该类进行加载,而不是在程序启动时就加载所有的类。
所谓真正需要是指生成类的对象或类被加载时 new , Class.forName() , ClassLoader
Ø加载class对象
有6种情况JVM会加载Class对象
- 使用new关键字创建对象时。
- 通过反射创建对象时。
- 调用某个类的static方法时。
- 调用某个类的static属性时。
- 当初始化某个类的子类时。
- 某个类标明为main() 函数类(启动类) 。
ØClass.forName加载类
- 实现动态加载类
- static Class forName(String name)
- static Class forName(String name, boolean initialize, ClassLoader loader)
- 类的具体路径 设为false代表在加载类时不会立即运行静态块,而会在使用类建立对象时才运行静态块。
- 类加载器 Thread.currentThread().getContextClassLoader() —— 获得当前主线程的类加载器
Øjava代码
public class Demo1 {
public static void main(String[] args) {
String s = new String("wenhaitao");
//1. getClass()
Class cls= s.getClass();
System.out.println("leiming" + cls.getName());
System.out.println("baoming" + cls.getPackage());
System.out.println("是否为接口:" + cls.isInterface());
System.out.println("是否为基本类型:" + cls.isPrimitive());
System.out.println("是否为数组:" + cls.isArray());
System.out.println("String类的父类:" + cls.getSuperclass());
//2.Class
Class cls1 = String.class;
System.out.println("类名:" + cls1.getName());
System.out.println("包名:" + cls1.getPackage());
System.out.println("是否为接口:" + cls1.isInterface());
System.out.println("是否为基本类型:" + cls1.isPrimitive());
System.out.println("是否为数组:" + cls1.isArray());
System.out.println("String类的父类:" + cls1.getSuperclass());
System.out.println(cls == cls1);
int a = 100;
System.out.println(int.class);
}
}
Ø获取一个对象的父类与实现接口
public class Demo4 {
public static void main(String[] args) {
Class clz;//类对象
ClassLoader cl, cl1;//类加载器
clz = String.class;
cl = clz.getClassLoader();//得到加载String类对象的类加载器
System.out.println("加载String类对象的加载器:" + cl);
//当类加载器为null的时候,表示的是BootStrapLoader
System.out.println("******************************");
clz = Demo4.class;
cl = clz.getClassLoader();
System.out.println("加载Demo4类对象的类加载器:" + cl);
while(cl!=null) {
cl1 = cl;
cl = cl1.getParent();//得到父加载器
System.out.println(cl1+"的父加载器是:" + cl);
}
}
}
别荒废了最能拼的年纪,让自己整天无所事事。自己那么差又不努力,还有什么资格唉声叹气。
为了自己想要的未来,无论现在有多难熬,都必须得满怀信心的坚持下去。
java_[类加载器]的更多相关文章
- java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...
- java类加载器及其委托机制
1.什么是类加载器,类加载器父子结构.BootStrap-->ExtClassLoader-->AppClassLoader,级别依次降低 2.类加载器之间的父子关系和管辖范围 3.类加载 ...
- java类加载器加载文件
例子:采用配置文件加反射的方式创建ArrayList和HashSet的实例对象. //第一种方式:类加载器加载文件 InputStream ips = ReflectTest2.class.getCl ...
- java自定义类加载器
前言 java反射,最常用的Class.forName()方法.做毕设的时候,接收到代码字符串,通过 JavaCompiler将代码字符串生成A.class文件(存放在classpath下,也就是ec ...
- java类加载器深入研究
看了下面几篇关于类的加载器的文章,豁然开朗.猛击下面的地址开始看吧. Java类加载原理解析 深入探讨 Java 类加载器 分析BootstrapClassLoader/ExtClassLo ...
- 黑马程序员——【Java高新技术】——类加载器
---------- android培训.java培训.期待与您交流! ---------- 一.概述 (一)类加载器(class loader) 用来动态加载Java类的工具,它本身也是Java类. ...
- [转载] Java高新技术第一篇:类加载器详解
本文转载自: http://blog.csdn.net/jiangwei0910410003/article/details/17733153 首先来了解一下字节码和class文件的区别: 我们知道, ...
- Java虚拟机10:类加载器
类与类加载器 虚拟机设计团队把类加载阶段张的"通过一个类的全限定名来获取此类的二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这 ...
- [Java类加载器]Java中classLoader浅析.
本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.l ...
随机推荐
- 4. Linux-startx命令
Linux系统startx命令的功能和使用方法 Linux系统命令startx的功能很简单,就是启动X Window的服务这一项,没有其他的了.其实startx命令启动的是xinit,然后再由xini ...
- 5. VUE 生命周期
VUE 生命周期 帮助文档: https://cn.vuejs.org/v2/api/#%E9%80%89%E9%A1%B9-%E6%95%B0%E6%8D%AE https://cn.vuejs.o ...
- math random模块
math --- 数学函数 该模块提供了对C标准定义的数学函数的访问,返回值除非有明确说明,否则所有返回值均为浮点数 math.ceil(x) 返回 x 的上限,即大于或者等于 x 的最小整数. 如果 ...
- spring boot 集成logstash 日志
1.logstash 插件配置 logstash下config文件夹下添加 test.conf 文件内容: input{ tcp { mode => "server" hos ...
- WebPack系列--开启HappyPack之后,再将项目打包速度缩短5秒
效果展示 打包时间:缩短了 26.296s-20.586s=5.71s 先看两组测试数据,第一组是没有使用DllPlugin的打包测试数据,测量三次取平均值是26.296s(25.72+25.56+2 ...
- Weekly Contest 137
1046. Last Stone Weight We have a collection of rocks, each rock has a positive integer weight. Each ...
- 【SpringBoot】SpringBoot2.x整合定时任务和异步任务处理
SpringBoot2.x整合定时任务和异步任务处理 一.项目环境 springboot2.x本身已经集成了定时任务模块和异步任务,可以直接使用 二.springboot常用定时任务配置 1.在启动类 ...
- 神经网络与机器学习 笔记—卷积神经网络(CNN)
卷积神经网络 之前的一些都是考虑多层感知器算法设计相关的问题,这次是说一个多层感知器结构布局相关的问题.来总结卷积神经网络.对于模式分类非常合适.网络的提出所隐含的思想收到了神经生物学的启发. 第一个 ...
- php单列模式和工厂模式
一.单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素: 1. 它们必须拥有一个构造函数,并且必须被标记为pr ...
- Centos7下搭建gitbook环境踩坑记录
1.安装npm yum -y install npm 2.配置npm仓 npm config set registry https://mirrors.tencent.com/npm/ 3.安装git ...