黑马程序员——类加载器初识

java类加载器就是将生成的字节码加入到内存中。

java类加载器也是类,它们是由最原始的类加载器加入到java虚拟机中,然后再由他们加载其他的类,而最原始的类加载器就是BootStrap,他不是Java类,是由C++编写的

在java中有三种类加载器:BootStrap(加载系统类,如System),ExtClassloader(加载lib/ext/里的.jar包),AppClassLoader(加载我们自定义的类)

BootStrap是ExtClassLoader的上级,ExtClassLoader是AppClassloader的上级

★当需要加载一个类时,首先会选择加载当前线程的类加载器加载该类,其次是选择引用了该类的其他类的类加载器。还可以使用ClassLoader.loadClass()指定使用哪一个加载器

当确定了使用哪一个类加载器时,就比如是AppClassLoader,他首先会委托上级ExtClassLoader加载该类,ExtClassLoader再委托他的上级BootStrap进行加载,,如果BootStrap这个加载器没有找到,就返回ExtClassLoader,如果他也没有找到,在返回AppClassLoader,由于AppClassLoader是发起者,如果他也没有找到,就不会再往下返回了,而是直接返回ClassNotFoundException。

★有个面试题:如果我们自己定义java.lang.System类,会不会被加载,答案是:通常来说是不会

java为了防止我们自己定义系统类,类加载器采用了委托机制,某一个类加载器加载的时候,首先会委托给其上级加载,如果其上级加载成功了,他就不会加载了,我们自己定义的System首先选择AppClassLoader加载器,他最终会委托给BootStrap加载器,BootStrap会将系统中的System类加载到虚拟机中,这样AppClassLoader就不会加载我们自己定义的System类了。但是我们也可以自己写一个类加载器,只要撇开了委托加载机制就可以了。

黑马程序员——类加载器初识

时间: 2024-10-08 00:47:35

黑马程序员——类加载器初识的相关文章

黑马程序员—类加载、内省、注解、代理

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! --- 一.类加载器 类加载器用于加载Java的字节代码到Java虚拟机中,同时将配置文件等放在classpath目录下. 类加载器读取Java字节码文件并转换成Java.lang.Class类的一个实例,通过该实例的newInstance()方法可以创建该类对象(相当于调用空参数的构造方法).基本上所有的类加载器都是 java.lang.ClassLoader类的一个实例. ClassLoader getParen

黑马程序员-类加载机制和反射。

------- android培训.java培训.期待与您交流! ---------- Class类 JAVA程序中的类属于同一个事物,描述这类事物的类就叫Class 一个类被加载到内存当中,占用一片存储空间,这个空间里面的内容就该类字节码,不同的类的字节码是不同的,所以他们在内存中的内容也是不相同的,这一个个空间可以分别咏鹅一个个对象来表示,这些对象. 但是我们可以总结出,这些对象也会有相同的类型,这个类型就是Class类 基本的 Java 类型(boolean.byte.char.short

黑马程序员——自定义类加载器

自定义类加载器是在是血的不怎明白 这里只学会了一个简单的加密解密方法 //定义一个加密方法 public static void md(InputStream inputStream,OutputStream outputStream) throws Exception{  int b = 0;  while((b = inputStream.read())!=-1){   //使用^异或,相同的为0,不同的为1,由于0xff是255,后八位都是1,   //这样就将原来的1变成了0,0变成了1

黑马程序员-张老师加强6-类加载器

类加载器: 基本概念: 一般来说:java文件(源程序)经过编译器被转换成java字节码.类加载器负责读取字节码文件,并转换成java.lang.class的一个实例对象.每个这样的实例代表一个java类.通过实例的newInstance方法,就可以创建出该类一个对象. Java.lang.ClassLoader类的介绍: ClassLoader类的基本职责就是根据指定的类的名称,找到或生产对应的字节码,然后从这些字节码中定义出一个java类.即,java.lang.Class的一个实例. 常用

黑马程序员_类加载机制

------- android培训.java培训.期待与您交流! ---------- 0.类加载机制知识体系 1.类与JVM进程 使用Java命令运行某个Java程序时,此命令会启动一个Java虚拟机进程,不管Java程序多复杂,开启了多少个线程,这个线程都运行在Java虚拟机进程里.同一个JVM的所有线程.所有变量都处于同一个进程里,都使用该JVM进程的内存区. 只有出现下列情况时,JVM进程才会终止: 1)程序正常结束. 2)程序执行到代码System.exit()或Runtime.get

【黑马程序员】————初识程序

C程序结构 1) C程序的结构:由函数组成 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”. 所以,可以说C语言程序是由函数构成的. 2)  函数的基本概念 函数名:一个程序中由无数个函数组成,每个函数都有自己的名称 调用(执行)函数:根据函数名就可以调用对应的函数,执行相应的功能 3) C程序的入口 C程序的入口是一个名字叫做main的函数,简称main函数 不管整个程序中有多少个函数,都是先执行main函数 程序开发过程

黑马程序员——【Java高新技术】——代理

一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理等等,如何去做? 解答:编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码. 2.代理原理图,如下: 3.代理的优点 如果采用工厂模式和配置文件的方式进行管理,则不需要修改客户端程序,在配置文件中配置是使用目标类.还是代理类,这样以后很容易切换.例如,想要日志功能时就

黑马程序员_Java基础加强(下)

8.注解类 注解相当于一种标记,加了注解就等于打上了某种标记,没加就等于没打特殊标记,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记就去干什么事,标记可以加在包.类.字段.方法,方法的参数以及局部变量上. 注解的应用结构图: 为注解增加属性 定义基本类型的属性和应用属性 在注解类中增加String color(); @MyAnnotation(color = "red") 用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法 MyAnno

黑马程序员——java高新---注解、泛型等

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.注解 什么是注解? 答:对于过时的语句,java会提示过时了,通过@SuppressWarnings("Deprecation")可以在DOS命令行中取消提示,但Eclipse无法取消.这就是注解,相当于标记.编译器.开发工具.javac通过反射获得注解里的内容,进而明确应该做什么.不应该做什么.注解可以加在包.类.属性.方法.参数及局部变量之上.一个注解就是一个类. java.