iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中的类加载器_动力节点Java学院整理
  • 927
分享到

Java中的类加载器_动力节点Java学院整理

java类加载器ava 2023-05-31 12:05:21 927人浏览 八月长安
摘要

从java的动态性到类加载机制 Java是一种动态语言。那么怎样理解这个“动态”呢?或者说一门语言具备了什么特性,才能称之为动态语言呢?对于java,我是这样理解的。 JVM(java虚拟机)执行的不是本地机器码指令,而

从java的动态性到类加载机制 

Java是一种动态语言。那么怎样理解这个“动态”呢?或者说一门语言具备了什么特性,才能称之为动态语言呢?对于java,我是这样理解的。 

JVM(java虚拟机)执行的不是本地机器码指令,而是执行一种称之为字节码的指令(存在于class文件中)。这就要求虚拟机在真正执行字节码之前,先把相关的class文件加载到内存中。虚拟机不是一次性加载所有需要的class文件,因为它在执行的时候根本不会知道以后会用到哪些class文件。它是每用到一个类,就会在运行时“动态地”加载和这个类相关的class文件。这就是java被称之为动态性语言的根本原因。除了动态加载类之外,还会动态的初始化类,对类进行动态链接。动态初始化和动态链接放在其他文章中进行介绍。本文中只关心类的加载。 

在JVM中负责对类进行加载的正是本文要介绍的类加载器(ClassLoader),所以,类加载器是JVM不可或缺的重要组件。 

java中的类加载器及类加载器工作原理 

java中(指的是javase)有三种类加载器。每个类加载器在创建的时候已经指定他们对应的目录, 也就是说每个类加载器去哪里加载类是确定的,我认为在ClassLoader类中应该会有getTargetPath()之类的方法, 得到他们对应的路径,找了找jdk的文档,发现是没有的。以下是这三种类加载器和他们对应的路径: 

 * AppClassLoader  --   加载classpath指定的路径中的类 
 * ExtClassLoader   --   加载jre/lib/ext目录下或者java.ext.dirs系统属性定义的目录下的类 
 * BootStrap           --   加载JRE/lib/rt.jar中的类 

那么类加载器是如何工作的呢?可以参看jdk中ClassLoader类的源码。这个类的实现使用了模板方法模式,首先是loadClass方法来加载类,loadClass方法又调用了findClass方法,该方法读取并返回类文件的数据,findClass方法返回后,loadClass方法继续调用defineClass方法,将返回的数据加工成虚拟机运行时可识别的类型信息。所以,我们如果开发自己的类加载器,只需要继承jdk中的ClassLoader类,并覆盖findClass方法就可以了,剩下的而工作,父类会完成。其他java平台有的根据自己的需求,实现了自己特定的类加载器,例如javaee平台中的Tomcat服务器Android平台中的dalvik虚拟机也定义了自己的类加载器。 

虚拟机加载类有两种方式,一种方式就是上面提到的ClassLoader.loadClass()方法,另一种是使用反射api,Class.forName()方法,其实Class.forName()方法内部也是使用的ClassLoader。Class类中forName方法的实现如下: 

public static Class<?> forName(String name, boolean initialize,  ClassLoader loader)  throws ClassNotFoundException { if (loader == null) {  SecurityManager sm = System.getSecurityManager();  if (sm != null) { ClassLoader ccl = ClassLoader.getCallerClassLoader(); if (ccl != null) {  sm.checkPermission( SecurityConstants.GET_CLASSLOADER_PERMISSION); }  } } return forName0(name, initialize, loader); }  private static native Class forName0(String name, boolean initialize,   ClassLoader loader) throws ClassNotFoundException; 

--结束END--

本文标题: Java中的类加载器_动力节点Java学院整理

本文链接: https://www.lsjlt.com/news/225462.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中的类加载器_动力节点Java学院整理
    从java的动态性到类加载机制 Java是一种动态语言。那么怎样理解这个“动态”呢?或者说一门语言具备了什么特性,才能称之为动态语言呢?对于java,我是这样理解的。 JVM(java虚拟机)执行的不是本地机器码指令,而...
    99+
    2023-05-31
    java 类加载器 ava
  • Java内部类_动力节点Java学院整理
    内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和defau...
    99+
    2023-05-31
    java 内部类 ava
  • Java Scaner类详解_动力节点Java学院整理
    Java.util.Scanner是Java5.0的新特征,主要功能是简化文本扫描。这个类最实用的地方表现在获取控制台输入,其他的功能都很鸡肋,尽管Java API文档中列举了大量的API方法,但是都不怎么地。 一、扫描控制台输入...
    99+
    2023-05-31
    java scaner
  • Java Runtime类详解_动力节点Java学院整理
    一、概述      Runtime类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。一般不能实例化一个Runtime对象,应...
    99+
    2023-05-31
    java runtime
  • Java System类详解_动力节点Java学院整理
    System类是jdk提供的一个工具类,有final修饰,不可继承,由名字可以看出来,其中的操作多数和系统相关。其功能主要如下:• 标准输入输出,如out、in、err• 外部定义的属性和环境变量...
    99+
    2023-05-31
    java system类 sys%
  • Java死锁_动力节点Java学院整理
    死锁是两个甚至多个线程被永久阻塞时的一种运行局面,这种局面的生成伴随着至少两个线程和两个或者多个资源。在这里我已写好一个简单的程序,它将会引起死锁方案然后我们就会明白如何分析它。Java死锁范例ThreadDeadlock.javapack...
    99+
    2023-05-31
    java 死锁 ava
  • Java多态(动力节点Java学院整理)
    什么是多态 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象...
    99+
    2023-05-31
    java 多态 ava
  • Java中StringBuffer和StringBuilder_动力节点Java学院整理
    下面先给大家介绍下String、StringBuffer、StringBuilder区别,具体详情如下所示:StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对Strin...
    99+
    2023-05-31
    java stringbuffer stringbuilder
  • Java中的PrintWriter 介绍_动力节点Java学院整理
    PrintWriter 介绍PrintWriter 是字符类型的打印输出流,它继承于Writer。PrintStream 用于向文本输出流打印对象的格式化表示形式。它实现在 PrintStream 中的所有 print 方法。它不包含用于写...
    99+
    2023-05-31
    java printwriter ava
  • Java中的关键字_动力节点Java学院整理
    Java中常用关键字:与数据类型相关(10)与流程控制相关(13)if: 表示条件判断,一般用法if(关系表达式),后跟else或{……}else: 条件转折,如if (关系表达式){语句块1}else{语句块2},如果...
    99+
    2023-05-31
    java 关键字 ava
  • Java中的FilterOutputStream 简介_动力节点Java学院整理
    FilterOutputStream 介绍FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintSt...
    99+
    2023-05-31
    java filteroutputstream ava
  • Java中Random简介_动力节点Java学院整理
    Java中存在着两种Random函数:一、java.lang.Math.Random;  调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返...
    99+
    2023-05-31
    java random ava
  • Java 中HashCode作用_动力节点Java学院整理
    第1 部分 hashCode的作用  Java集合中有两类,一类是List,一类是Set他们之间的区别就在于List集合中的元素师有序的,且可以重复,而Set集合中元素是无序不可重复的。对于List好处理,但是对于Set而言我们要如何来保证...
    99+
    2023-05-31
    java hashcode
  • Java链接redis_动力节点Java学院整理
    要在Java程序中使用使用操作Redis,需要确保有Redis的Java驱动程序和Java设置在机器上。现在,让我们来看看如何设置Redis的Java驱动程序。 需要下载jedis.jar。请一定要下载它的最新版本。 需要包括jedis...
    99+
    2023-05-31
    java redis 链接
  • Java Map简介_动力节点Java学院整理
    Map简介将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口。 Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关...
    99+
    2023-05-31
    java map ava
  • Java中的UrlDecoder 和 UrlEncoder_动力节点Java学院整理
    一 URLEncoder HTML 格式编码的实用工具类。该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法。有关 HTML 格式编码的更多信息,请参阅...
    99+
    2023-05-31
    urldecoder urlencoder ava
  • Java 中的 BufferedWriter 介绍_动力节点Java学院整理
    BufferedWriter 介绍BufferedWriter 是缓冲字符输出流。它继承于Writer。BufferedWriter 的作用是为其他字符输出流添加一些缓冲功能。BufferedWriter 函数列表 // 构造函数...
    99+
    2023-05-31
    java bufferedwriter buf
  • Java concurrency之AtomicLong原子类_动力节点Java学院整理
    AtomicLong介绍和函数列表AtomicLong是作用是对长整形进行原子操作。在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让l...
    99+
    2023-05-31
    java concurrency ava
  • Java 线程池_动力节点Java学院整理
    线程池系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互。在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。与数据库连接池类似的是,线程池在系统启动时即创建大量空...
    99+
    2023-05-31
    java 线程池 ava
  • Java Set简介_动力节点Java学院整理
    1. 概述           Java 中的Set和正好和数学上直观的集(set)的概念是相同的。Set最大的特性就是不允许在其中存放的元素是重复的...
    99+
    2023-05-31
    java set ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作