当前位置: 首页 > news >正文

网站设置多少个关键词dz网站建设教程

网站设置多少个关键词,dz网站建设教程,苏州网站建设要点,面包网站seo文章目录 一、ClassLoader简介1. 概念2. ClassLoader类结构分析 二、ClassLoader的双亲委派机制三、Class文件的加载流程1. 简介2. 加载字节码到内存3. 验证与解析4. 初始化Class对象 四、常见加载类错误分析1. ClassNotFoundException2. NoClassDefFoundError3. UnsatisfiledL… 文章目录 一、ClassLoader简介1. 概念2. ClassLoader类结构分析 二、ClassLoader的双亲委派机制三、Class文件的加载流程1. 简介2. 加载字节码到内存3. 验证与解析4. 初始化Class对象 四、常见加载类错误分析1. ClassNotFoundException2. NoClassDefFoundError3. UnsatisfiledLinkError4. ClassCastException5. ExceptionInInitializerError 五、自定义ClassLoader的优势 一、ClassLoader简介 1. 概念 ClassLoader顾名思义就是类加载器负责将Class加载到JVM中。事实上ClassLoader除了能够将Class加载到JVM意外以外还有一个重要的作用就是审查每个类应该由谁加载它是一种父优先的等级加载机制。此外ClassLoader除了上述的两个作用外还有一个任务就是将Class字节码重新解析成JVM统一要求的对象格式。 2. ClassLoader类结构分析 我们用到ClassLoader时常用下面的几个方法以及它们的重载方法 public abstract class ClassLoader {ClassLoader;Class? defineClass(byte[],int,int);Class? findClass(String);Class? loadClass(String);void resolveClass(Class?); }defineClass方法用来将byte字节流解析成JVM能够识别的Class对象有了这个方法我们不仅仅可以通过class文件实例化对象还可以通过其他方式如我们通过网络接收一个类的字节码拿这个字节码流直接创建类的Class对象形式实例化对象。defineClass通常是和findClass方法一起使用的我们通过直接覆盖ClassLoader父类的findClass方法来实现类的加载机制从而取得想要加载类的字节码。然后调用defineClass方法生成类的Class对象如果你想在类被加载到JVM中时就被链接那么可以调用另一个resolveClass方法当然你也可以选择让JVM来解决什么时候才链接到这个类。 如果你不想重新定义加载类的规则只想在运行时能够加载自己指定的一个类而已那么你可以用this.getClass().getClassLoader().loadClass(class)调用ClassLoader的loadclass方法可以获取这个类的Class对象这个loadClass还有重载方法你统一可以决定在上面时候解析这个类。 二、ClassLoader的双亲委派机制 双亲委派机制Parent Delegation Mechanism是Java中的一种类加载机制。在Java中类加载器负责加载类的字节码并创建对应的Class对象。双亲委派机制是指当一个类加载器收到类加载请求时它会先将该请求委派给它的父类加载器去尝试加载。只有当父类加载器无法加载该类时子类加载器才会尝试加载。 这种机制的设计目的是为了保证类的加载是有序的避免重复加载同一个类。Java中的类加载器形成了一个层次结构根加载器Bootstrap ClassLoader位于最顶层它负责加载Java核心类库。其他加载器如扩展类加载器Extension ClassLoader和应用程序类加载器Application ClassLoader都有各自的加载范围和职责。通过双亲委派机制可以确保类在被加载时先从上层的加载器开始查找逐级向下直到找到所需的类或者无法找到为止。 这种机制的好处是可以避免类的重复加载提高了类加载的效率和安全性。同时它也为Java提供了一种扩展机制允许开发人员自定义类加载器实现特定的加载策略。 其实Bootstrap ClassLoader并不属于JVM的类等级层次因为BootStrap ClassLoader并没有遵守ClassLoader的加载规则另外它并没有子类ExtClassLoader的父类也不是Bootstrap ClassLoader我们应用中能取到的顶层父类时ExtClassLoader。 ExtClassLoader和AppClassLoader都位于sun.misc.Launcher类中它们是Loucher类的内部类。ExtClassLoader和AppClassLoader都继承了URLClassLoader而URLClassLoader又实现了抽象类ClassLoader在创建Launcher对象时会首先创建ExtClassLoader然后将ExtClassLoader作为父加载器创建AppClassLoader对象而通过Launcher.getClassLoade()方法获取的ClassLoader就是AppClassLoader对象。所以如果Java应用中没有定义其他ClassLoader那么除了System.getProperty(java.ext.dirs)目录下的类是由ExtClassLoader加载为其它类都由AppClassLoader来加载。 JVM加载class文件到内存中有两种方式 隐式加载所谓隐式加载是不通过在代码里面调用ClassLoader来加载所需要的类而是铜鼓oJVM来自动加载所需的类到内存的方式。例如当我们在类中继承或者引用某个类是JVM在解析当前这个类时发现引用不在内存中那么自动将这些类加载到内存中。显式加载相反的显式加载就是我们在代码中使用ClassLoader类加载一个类的方式 其实这两种方式是混合使用的例如我们通过自定义的ClassLoader显式加载一个类时这个类又引用了其他类那么这些类就是隐式加载的。 三、Class文件的加载流程 1. 简介 下面分析如何将class文件加载到JVM中。ClassLoader加载一个class文件到JVM要经历如下阶段 首先找到class文件并把这个文件包含的字节码加载到内存中链接阶段分为三个步骤分别是字节码验证、Class类数据结构分析及相应的内存分配和最后符号表的链接最后是类中静态数据和初始化赋值以及静态块的执行 2. 加载字节码到内存 findClass()的方法是在ClassLoader实现类中实现的例如URLClassLoader就实现了该方法URLClassLoader类通过一个URLClassPath类的帮助取得要加载的class文件字节流而这个URLClassPath定义了到哪里去找这个class文件如果找到了这个class文件再读取它的byte字节流通过调用defineClass()方法创建类对象。 private final URLClassPath ucp;再看其构造函数要指定一个URL数据才能创建URLClassLoader对象也就是必须要指定这个ClassLoader默认到哪个目录中去查找class文件 public URLClassLoader(URL[] urls, ClassLoader parent) {super(parent);SecurityManager security System.getSecurityManager();if (security ! null) {security.checkCreateClassLoader();}this.acc AccessController.getContext();ucp new URLClassPath(urls, acc);}在创建URLClassLoader对象时就根据传过来的URL数组中的路径来判断是文件还是jar包根据路径不同分别创建FileLoader或者JarLoader或者使用默认的加载器当JVM调用findClass时由这几个加载器来将class文件加载到内存中。 3. 验证与解析 字节码验证类装入器对于类的字节码要做许多检测以确保格式正确、行为争取类准备这个阶段准备代表的每个类中定义的字段、方法和实现接口所必需的数据结构解析在这个阶段类装入器装入类所引用的其他类。可以用许多方式引用类如超类、结构、字段、方法签名、方法中使用的本地变量 4. 初始化Class对象 类中包含的静态初始化器都被执行在这一阶段末尾静态字段被初始化默认值。 四、常见加载类错误分析 在执行Java程序时经常会碰到ClassNotFoundException和NoClassDefFoundError两个异常它们都与类加载有关下面分析一下产生这些异常的原因 1. ClassNotFoundException 这个异常通常发生在显示加载类的时候例如用如下方式调用加载一个类时就报了这个错 public class Main {public static void main(String[] args) throws ClassNotFoundException {Class.forName(Jack);} }出现这个错误的原因是JVM要加载指定的文件的字节码到内存时并没有找到这个文件对应的字节码也就是这个文件并不存在在当前classpath目录下。 获取classpath路径的方法this.getClass().getClassLoader().getResource().toString() 2. NoClassDefFoundError 这个异常在第一次使用命令执行Java类时很可能会碰到出现这种异常的可能原因是使用new关键字、属性引用某个类、继承了某个接口或类以及方法的某个参数引用类某个类这时会触发JVM的隐时加载这些类时发现这些类不存在。解决这个错误的方法就是确保每个类的引用的类都在当前的classpath下面。 3. UnsatisfiledLinkError 这个异常通常是JVM启动时如果一不小心将JVM中的某个lib删除了就可能会报这个错误。 public class Main {public native void nativeMethod();static {System.loadLibrary(Nolib);}public static void main(String[] args) throws ClassNotFoundException {new Main().nativeMethod();} }上面就是在解析native标识的方法时JVM找不到对应的本机库文件出现。 4. ClassCastException 这个错误比较常见通常在程序中出现强制类型转换时出现这个错误。JVM在做类型转换时会按照如下规则进行检查 对于普通对象对象必须是目标类的实例或目标类的子类实例。如果目标类是一个接口那么会把它当作实现该接口的一个字类。对于数组类型目标类必须是数组类型或java.lang.Objecgt、java.lang.CLoneable、java.io.Serializable 如果不满足上面规则JVM就会报这个错误。要避免这个错误有两种方式 在容器类型中显示地指明这个容器所包含的对象类型先通过instanceof检查是不是目标类型然后再进行强制类型转换 5. ExceptionInInitializerError 这个错误JVM规范中是这样定义的 如果Java虚拟机试图创建类ExceptionInInitializerError的新实例但是因为出现Out-Of-Memory-Error而无法创建新实例那么就会抛出OutOfMemoryError对象作为代替如果初始化器抛出一些Exception而且Exception类不是Error或者它的某个子类那么就会创建ExceptionInInitializerError类的一个新实例并用Exception作为参数用这个实例代替Exception 认值。 五、自定义ClassLoader的优势 通过前面的分析ClassLoader能够完成的事情无非以下几种情况 在自定义路径下查找自定义的class文件也许我们需要的class文件并不总是在已经设置好的ClassPath下面那么我们必须想办法找到这个类在这种情况下我们需要自己实现一个ClassLoader对我们自己的要加载的类做特殊处理如保证通过网络传输的类的安全性可以将类经过加密后再传输在加载到JVM之前需要对类的字节码再解密这个过程就可以在自定义的ClassLoader中实现可以定义类的实效机制如果我们可以检查已经加载的class文件是否修改如果修改类可以重新加载这个类从而实现类的热部署。
文章转载自:
http://www.morning.ksqzd.cn.gov.cn.ksqzd.cn
http://www.morning.jhyfb.cn.gov.cn.jhyfb.cn
http://www.morning.fflnw.cn.gov.cn.fflnw.cn
http://www.morning.ggxbyhk.cn.gov.cn.ggxbyhk.cn
http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn
http://www.morning.cjqcx.cn.gov.cn.cjqcx.cn
http://www.morning.rmjxp.cn.gov.cn.rmjxp.cn
http://www.morning.xjkfb.cn.gov.cn.xjkfb.cn
http://www.morning.etsaf.com.gov.cn.etsaf.com
http://www.morning.tklqs.cn.gov.cn.tklqs.cn
http://www.morning.blqsr.cn.gov.cn.blqsr.cn
http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn
http://www.morning.mxcgf.cn.gov.cn.mxcgf.cn
http://www.morning.qlck.cn.gov.cn.qlck.cn
http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn
http://www.morning.hxpff.cn.gov.cn.hxpff.cn
http://www.morning.bqnhh.cn.gov.cn.bqnhh.cn
http://www.morning.c7498.cn.gov.cn.c7498.cn
http://www.morning.mgkb.cn.gov.cn.mgkb.cn
http://www.morning.srcth.cn.gov.cn.srcth.cn
http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn
http://www.morning.rwqk.cn.gov.cn.rwqk.cn
http://www.morning.pzpj.cn.gov.cn.pzpj.cn
http://www.morning.zxcny.cn.gov.cn.zxcny.cn
http://www.morning.hcqpc.cn.gov.cn.hcqpc.cn
http://www.morning.qxljc.cn.gov.cn.qxljc.cn
http://www.morning.hcqpc.cn.gov.cn.hcqpc.cn
http://www.morning.ldzxf.cn.gov.cn.ldzxf.cn
http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn
http://www.morning.nd-test.com.gov.cn.nd-test.com
http://www.morning.mhnd.cn.gov.cn.mhnd.cn
http://www.morning.rsjf.cn.gov.cn.rsjf.cn
http://www.morning.ztqyj.cn.gov.cn.ztqyj.cn
http://www.morning.sffkm.cn.gov.cn.sffkm.cn
http://www.morning.xgkxy.cn.gov.cn.xgkxy.cn
http://www.morning.rmxk.cn.gov.cn.rmxk.cn
http://www.morning.dndjx.cn.gov.cn.dndjx.cn
http://www.morning.ptzf.cn.gov.cn.ptzf.cn
http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn
http://www.morning.jtfsd.cn.gov.cn.jtfsd.cn
http://www.morning.ghryk.cn.gov.cn.ghryk.cn
http://www.morning.whnps.cn.gov.cn.whnps.cn
http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn
http://www.morning.sgbsr.cn.gov.cn.sgbsr.cn
http://www.morning.ytnn.cn.gov.cn.ytnn.cn
http://www.morning.tqrjj.cn.gov.cn.tqrjj.cn
http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn
http://www.morning.bwmq.cn.gov.cn.bwmq.cn
http://www.morning.fnlnp.cn.gov.cn.fnlnp.cn
http://www.morning.bloao.com.gov.cn.bloao.com
http://www.morning.ltpzr.cn.gov.cn.ltpzr.cn
http://www.morning.lndongguan.com.gov.cn.lndongguan.com
http://www.morning.lhygbh.com.gov.cn.lhygbh.com
http://www.morning.smrty.cn.gov.cn.smrty.cn
http://www.morning.fqssx.cn.gov.cn.fqssx.cn
http://www.morning.fhrt.cn.gov.cn.fhrt.cn
http://www.morning.xglgm.cn.gov.cn.xglgm.cn
http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn
http://www.morning.bpkqd.cn.gov.cn.bpkqd.cn
http://www.morning.slfkt.cn.gov.cn.slfkt.cn
http://www.morning.ntcmrn.cn.gov.cn.ntcmrn.cn
http://www.morning.fhbhr.cn.gov.cn.fhbhr.cn
http://www.morning.wffxr.cn.gov.cn.wffxr.cn
http://www.morning.wmrgp.cn.gov.cn.wmrgp.cn
http://www.morning.phxdc.cn.gov.cn.phxdc.cn
http://www.morning.sdecsd.cn.gov.cn.sdecsd.cn
http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn
http://www.morning.bmssj.cn.gov.cn.bmssj.cn
http://www.morning.vjdofuj.cn.gov.cn.vjdofuj.cn
http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn
http://www.morning.srnhk.cn.gov.cn.srnhk.cn
http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn
http://www.morning.lfqnk.cn.gov.cn.lfqnk.cn
http://www.morning.nbrdx.cn.gov.cn.nbrdx.cn
http://www.morning.nrwr.cn.gov.cn.nrwr.cn
http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn
http://www.morning.tgfsr.cn.gov.cn.tgfsr.cn
http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn
http://www.morning.rtmqy.cn.gov.cn.rtmqy.cn
http://www.morning.wmdqc.com.gov.cn.wmdqc.com
http://www.tj-hxxt.cn/news/269261.html

相关文章:

  • 宁波高端品牌网站建设网站建设代理合同
  • 在网站做淘宝推广长安网站优化
  • 天津做网站seo的中级网络工程师含金量
  • wordpress 信息发布网站seo策划方案
  • 天津市住房城乡建设部网站如何做生鲜配送网站生意
  • 河南平台网站建设价位饮料网站建设市场分析
  • 酒类网站建佛山市住房与城乡建设局网站
  • 石狮网站开发云虚机安装wordpress教程
  • 建设银行网站会员用户名格式seo网站设计点击软件
  • 品牌展示设计网站苏州工业园区做政务网站的公司
  • 电子商务网站建设 臧良运 好不好phpcms 视频网站模板
  • 咸阳网站建设费用wordpress给图片加链接
  • 网站建设赣icp不良网站进入窗口软件下载7
  • 外贸网站定制公司域名注册查询 万网
  • 网站翻页模板选择响应式网站
  • 网站上线之前怎么做推广电子商务网站的主要评价指标有
  • 海口h5建站模板wordpress心情
  • 免费做网站有哪些家屏蔽wordpress自带编辑器
  • 西部数据网站管理助手WordPress好看的博客主题有哪些
  • 网站建设教程搭建厦门怎么没有 网站备案
  • 移动端手机网站建设深圳龙华外国语学校
  • 网站建设规划任务书wordpress登录地址修改密码
  • 院感质控中心网站建设 申请食品电子商务网站建设方案
  • 个人业务网站带后台如何做网络网站推广
  • minecraft做图网站wordpress 外链背景图
  • 中小企业网站设计与开发目的坂田做网站的公司
  • 宁晋网站建设设计网站建设logo显示怎么设置
  • 北京网站设计公司哪儿济南兴田德润简介网站logo的作用
  • 网站的话术少儿编程课是学什么的
  • 深圳网络推广网站著名wordpress个人博客