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 ...
随机推荐
- 一文教你读懂JVM的类加载机制
Java运行程序又被称为WORA(Write Once Run Anywhere,在任何地方运行只需写入一次),意味着我们程序员小哥哥可以在任何一个系统上开发Java程序,但是却可以在所有系统上畅通运 ...
- Salesforce学习之路(六)利用Visualforce Page实现页面的动态刷新功能
Visualforce是一个Web开发框架,允许开发人员构建可以在Lightning平台上本地托管的自定义用户界面.其框架包含:前端的界面设计,使用的类似于HTML的标记语言:以及后端的控制器,使用类 ...
- 【Java】String、StringBuilder和StringBuffer
[String] 首先,从String类的定义入手,可以看到String类是由final修饰,即不可变的,一旦创建出来就不可修改,因此首先明确,字符串的拼接.截取等操作都会产生新的字符串对象. 观察以 ...
- Redis系统学习之SpringBoot集成Redis操作API(集成SpringDataRedis及其分析)
SpringDataRedis调用Redis底层解读 在SpringBoot2.X之前还是直接使用的官方推荐的Jedis连接的Redis 在2.X之后换为了lettuce Jedis:采用直接连接,多 ...
- 【MybatisPlus】使用Wrappers条件构造器构造or和and
模糊查询中,会有针对一个数据,需要查询数据库的多个字段的情况,例如: 上图中的平台名称和平台进程在数据表中是两个不同的字段, 如果不使用Mybatisplus,仅使用Mybatis,则只有通过写xml ...
- POJ2536 二分图匹配
题意: 有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...
- maven工程添加servlet依赖
实现导入HttpServlet <!-- Servlet依赖--> <dependency> <groupId>javax.servlet</groupId& ...
- jpa查找数据库最新一条消息
主要字段说明: pid:指导记录主键 user_pid:用户主键 competition_project_pid:用户作品 Mysql表 Repository /** * 指导记录 * @date 2 ...
- Django(1)初识Django
前言 Django是一个开放源代码的Web应用框架,由Python写成,最初用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件,于2005年7月在BSD许可证下发布,这 ...
- 关于HTTP的一些概念
各种概念 HTTP HTTP(HyperText Transfer Protocol) -- 超文本传输协议 它可以拆成三个部分:"超文本"."传输".&quo ...