今天淘宝实习生2面,效果不太好,对应用比较熟,对底层的东西掌握比较薄弱。
问了一下classLoader的东西都不太清楚,发现自己还菜的很,面试官比较好说话,最后给我两个建议:1,多去看看底层的东西。用的东西很简单,只要学一学谁都会,只有掌握底层的东西才能有自己的知识体系,才能有更大的发展空间;2,面试的时候,不知道的问题就说不知道,一定不要猜!
下午看陈雄华的《精通Spring2.X--企业应用开发详解》的时候看到了ClassLoader的东西,研读以后写写心得。
ClassLoader也就是类装载器,把一个类装入JVM中要经过以下步骤:
1、装载:查找和导入Class文件。
2、链接:执行校验,准备和解析步骤。
a)校验:检查载入class文件数据的正确性。
b)准备:给类的静态变量分配存储空间。
c)解析:将符号引用转成直接引用。
3、初始化:对类的静态变量,静态代码块执行初始化工作。
ClassLoader是一个重要的JAVA运行时组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader,分别是根装载器,ExtClassLoader(扩展类装载器),AppClassLoader(系统类装载器)。其中根装载器不是ClassLoader的子类,是用C++编写的,负责加载JRE的核心类库。ExtClassLoader,AppClassLoader都是ClassLoader的子类。ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载ClassPath路径下的类包。
JVM装载类是使用“全盘负责委托机制”,“全盘负责”就是当一个ClassLoader装载一个类时,除非显式调用另外一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入;“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。
ClassLoader中包含常用方法:
·Class loadClass(String name)
name指定类装载器需要装载类的名字(必须使用全限定名)。
·Class loadClass(String name,boolean resolve)
resolve参数告诉类装载器是否需要解析该类。
·Class definaClass(String name,byte[] b,int off, int len)
name为全限定名,该类文件的字节数组转化成JVM内部的java.lang.Class对象,字节数组可以从本地文件系统,远程网络获取。
·Class findSystemClass(String name)
从本地文件系统载入Class文件,如果本地文件不存在该Class文件,将抛出ClassNotFoundException异常,该方法是JVM默认使用的装在机制。
·Class findLoaderClass(String name)
调用该方法来查看ClassLoader是否已装入某个类。如果已装入,那么返回java.lang.Class对象,否则返回null。如果强行装载已存在的类,将会抛出链接错误。
类文件被装载并解析后,在JVM将拥有一个对应的java.lang.Class类描述对象,该类的实例都拥有指向这个类描述对象的引用,而类描述对象又拥有指向关联ClassLoader的引用。
代码示例:
ClassLoader loader = Thread.currentThread().getContextClassLoader();//得到类加载器
Class clazz = loader.loadClass("com.waiting.reflect.Car");//得到Car类描述对象
Constructor cons = clazz.getDeclaredConstructor((Class[])null);//获取Car类的构造器
Car car = (Car)cons.newInstance();//得到实例化的car对象
分享到:
相关推荐
ClassLoader的API使用和自定义
ClassLoader类加载机制和原理详解
ClassLoader类加载器讲解,理解JAVA类加载机制
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
jvm运行的过程中,需要载入类,而类的加载需要类加载器,本文章提供了java的类加载器的工作原理。可以使读者更加理解jvm的运行机制。
下面小编就为大家带来一篇classloader类加载器_基于java类的加载方式详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java应用程序类加载器(ClassLoader for java Application),类似exe4j, 方便启动java程序, 配置灵活,支持多平台选择性配置
如果户创建的JAR放在此录下,也会动由扩展类加载器加载.应程序类加载器(系统类加载器,Application ClassLoader)java语编写,由sun.
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
本篇文章主要给大家讲述了Java中ClassLoader类加载的原理以及用法总结,一起学习下。
NULL 博文链接:https://ldbjakyo.iteye.com/blog/1046984
关于类加载器的 上课ppt -java虚拟机自带的加载器 根类加载器(Bootstrap) c++写的看不到扩展类加载器(extension) 系统类加载器(System) AppClassLoad 用户自定义的类加载器 Java.lang.ClassLoader的子类
类加载器是Java最强大的特征之一。但是开发者常常忘记类加载组件。类加载器是在运行时负责寻找和加载类文件的类。Java允许使用不同的类加载器,甚至自定义的类加载器。类加载器从源文件(通常是.class 或 .jar文件)...
ClassLoader 三种类加载方式 Boostrap Extenxsion 以及Application ClassLoad分别适用的场景
简单的自定义类加载器问候世界hello word,基于磁盘的ClassLoader
类加载器 ClassLoader动态加载类 简单示例 包装tank.test; 导入java.util.Scanner; 导入tank.classloader.ClassLoaderManager; 导入tank.classloader.MyClassLoaderManager; 导入tank.classloader....
1. 加载(Loading):classpath,jar包,网络,磁盘位置下的类的class以二进制字节流读进来,在内存 2. 验证(Verification)
Java的类加载机制:加载,连接,初始化。JAVA类加载器: Bootstrap ClassLoader : 根类加载器, Extension ClassLoader: 扩展类加载器, System ClassLoader : 系统类加载器, Java反射
1. ClassLoader(类加载机制) 3. findLoadedClass (查找JVM已经加载过的类) 4. defineClass (定义一个Java