乌兰察布做网站公司展馆设计论文

diannao/2026/1/24 3:00:30/文章来源:
乌兰察布做网站公司,展馆设计论文,中文wordpress主题下载地址,公司官网设计公司1:what is it jvm把描述类的数据从class字节码文件加载到内存#xff0c;并对数据进行校验、解析、初始化#xff0c;最终成为jvm直接使用的数据类型 1、ClassNotFoundExcetpion   我们在开发中#xff0c;经常可以遇见java.lang.ClassNotFoundExcetpion这个异常#xf…1:what is  it jvm把描述类的数据从class字节码文件加载到内存并对数据进行校验、解析、初始化最终成为jvm直接使用的数据类型  1、ClassNotFoundExcetpion   我们在开发中经常可以遇见java.lang.ClassNotFoundExcetpion这个异常今天我就来总结一下这个问题。对于这个异常它实质涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分虽然它和我们直接打交道不多但是对其背后的机理有一定理解有助于我们排查程序中出现的类加载失败等技术问题。 2、类的加载过程   一个java文件从被加载到被卸载这个生命过程总共要经历5个阶段JVM将类加载过程分为   加载-链接验证准备解析-初始化使用前的准备-使用-卸载 1加载   首先通过一个类的全限定名来获取此类的二进制字节流其次将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构最后在java堆中生成一个代表这个类的Class对象作为方法区这些数据的访问入口。总的来说就是查找并加载类的二进制数据。 2链接   验证确保被加载类的正确性   准备为类的静态变量分配内存并将其初始化为默认值   解析把类中的符号引用转换为直接引用 3为类的静态变量赋予正确的初始值 3、类的初始化 1类什么时候才被初始化   1创建类的实例也就是new一个对象   2访问某个类或接口的静态变量或者对该静态变量赋值   3调用类的静态方法   4反射Class.forName(“com.lyj.load”)   5初始化一个类的子类会首先初始化子类的父类   6JVM启动时标明的启动类即文件名和类名相同的那个类 2类的初始化顺序   1如果这个类还没有被加载和链接那先进行加载和链接   2假如这个类存在直接父类并且这个类还没有被初始化注意在一个类加载器中类只能初始化一次那就初始化直接的父类不适用于接口   3加入类中存在初始化语句如static变量和static块那就依次执行这些初始化语句。   4总的来说初始化顺序依次是静态变量、静态初始化块–变量、初始化块– 构造器如果有父类则顺序是父类static方法 – 子类static方法 – 父类构造方法- - 子类构造方法  2:when it happens 初始化时机  Jvm规范规定了 有且仅有5种 1new getstatic putstatic invokestatic 4条指令时 (new一个对象 使用静态属性和方法) 2使用java.lang.reflect包的方法对某个类进行反射调用 forname 3 初始化一个类时发现其父类尚未初始化 先初始化父类 4Jvm启动时  加载main方法所在的类 5Jdk1.7的动态语言 MathodHander解析结果为 REF_getStatic REF_putStatic REF_inpokStatic 加载对应类   3ClassLoader 类加载器 实现类加载的动作的类 3.1jvm中的类加载器 1.引导类(Bootstrap classloader)组成Java平台的类包括jre/lib/rt.jar -Xbootclasspath指定  按文件名识别 2.扩展类Extensions classloader使用Java扩展机制的类jre/lib/ext  java.ext.dirs指定的其他jar 3.用户类(application classloader 系统、应用类加载器) 由开发者定义的类和没有利用扩展机制的第三方类这些类的位置由用户指定 一般通过使用-classpath命令行选项或者使用CLASSPATH环境变量来指定其位置。  3.2层次结构: Bootstrap Extension Application user classloder 但他们之间不是以继承的关系来实现 而是组合的形式来复用父加载器的方法 每个累加器都有parent属性指向它的上级类加器(见下面代码)   3.3双亲委派模型(见下图)       若一个类加载器收到类加载的请求 他首先自己不会尝试加载这个类 而是把这个请求委托给父类加器去完成       每一个类加器都如此 这样所有的类加载请求都会传入到bootstrap中 只有当父加载器加载不了时      此时父加载器抛出异常子加载器捕获后 再在自己的领域内尝试加载   比如 * 代码中出现了这么一行new A(); 系统发现了自己加载的类其中包含了new A()这说明需要系统去加载A类 系统会给自己的领导打电话让扩展去自己的地盘去加载A类 扩展会给自己的领导打电话让引导去自己的地盘去加载A类 引导自己真的去rt.jar中寻找A类    * 如果找到了那么加载之然后返回A对应的Class对象给扩展扩展也会它这个Class返回给系统结束了    * 如果没找到         引导给扩展返回了一个null扩展会自己去自己的地盘去寻找A类           * 如果找到了那么加载之然后返回A对应的Class对象给系统结束了           * 如果没找到               扩展返回一个null给系统了系统去自己的地盘应用程序下加载A类                   * 如果找到了那么加载之然后返回这个Class结束了                  * 如果没找到抛出异常ClassNotFoundException   好处java类随着他的类加载器一起具备了一种带有优先级的层次关系 如java.lang,Object类放在rt.jar内 无论哪一个类加载器要加载它最终都要委托到启动类加载器加载他 因此 在各种类加载器环境中使用Object都是同一个类 如果没有这种委派机制 用 户自定义一个java.lang.Object放在classpath下 加载时系统将会出现多个不同的object类 Java类型体系的最基础的行为就会被破坏掉 程序也将一片混乱   同一个类: 只有2个类由同一个类加载器加载的前提下 他们才可能相等 即 相等条件 相同的class文件 同一个类加载器加载    3.5core code 1 // The parent class loader for delegation 2 private ClassLoader parent;   1 protected synchronized Class? loadClass(String name, boolean resolve)2 3 throws ClassNotFoundException4 5 {6 7 // First, check if the class has already been loaded8 9 Class c findLoadedClass(name); 10 11 if (c null) { 12 13 try { 14 15 if (parent ! null) { 16 17 c parent.loadClass(name, false); 18 19 } else { 20 21 c findBootstrapClassOrNull(name);//只有bootstrap会执行这一句 22 23 } 24 25 } catch (ClassNotFoundException e) { 26 27 // ClassNotFoundException thrown if class not found 28 29 // from the non-null parent class loader 30 31 } 32 33 if (c null) { 34 35 // If still not found, then invoke findClass in order 36 37 // to find the class. 38 39 c findClass(name); 40 41 } 42 43 } 44 45 if (resolve) { 46 47 resolveClass(c); 48 49 } 50 51 return c; 52 53 } 先判断是否已经加载 内存中已有 不再加载 不存在 判断parent加载器是否为null   no 则调用父加载器的loadClass方法 否则 该类加载器为bootstrap 他执行自己的加载方法findBootstrapClassOrNull 当父类在自己的领域内找不到时 findClass会抛出异常 子类捕获异常后 就会尝试在自己领域内加载 3.6图解 3.7自定义类加载器 我们也可以通过继承ClassLoader类来完成自定义类加载器自类加载器的目的一般是为了加载网络上的类因为这会让class在网络中传输为了安全那么class一定是需要加密的所以需要自定义的类加载器来加载自定义的类加载器需要做解密工作。 ClassLoader加载类都是通过loadClass()方法来完成的loadClass()方法的工作流程如下 l  调用findLoadedClass ()方法查看该类是否已经被加载过了如果该没有加载过那么这个方法返回null l  判断findLoadedClass()方法返回的是否为null如果不是null那么直接返回这可以避免同一个类被加载两次 l  如果findLoadedClass()返回的是null那么就启动代理模式委托机制即调用上级的loadClass()方法获取上级的方法是getParent()当然上级可能还有上级这个动作就一直向上走 l  如果getParent().loadClass()返回的不是null这说明上级加载成功了那么就加载结果 l  如果上级返回的是null这说明需要自己出手了这时loadClass()方法会调用本类的findClass()方法来加载类 l  这说明我们只需要重写ClassLoader的findClass()方法这就可以了如果重写了loadClass()方法覆盖了代理模式   OK通过上面的分析我们知道要自定义一个类加载器只需要继承ClassLoader类然后重写它的findClass()方法即可。那么在findClass()方法中我们要完成哪些工作呢 l  找到class文件把它加载到一个byte[]中 l  调用defineClass()方法把byte[]传递给这个方法即可。 1 public class FileSystemClassLoader extends ClassLoader {2 private String classpath ;3 4 public FileSystemClassLoader() {}5 6 public FileSystemClassLoader (String classpath) {7 this.classpath classpath;8 }9 10 Override 11 public Class? findClass(String name) throws ClassNotFoundException { 12 try { 13 byte[] datas getClassData(name); 14 if(datas null) { 15 throw new ClassNotFoundException(类没有找到 name); 16 } 17 return this.defineClass (name, datas, 0, datas.length); 18 } catch (IOException e) { 19 e.printStackTrace(); 20 throw new ClassNotFoundException(类找不到 name); 21 } 22 } 23 24 private byte[] getClassData(String name) throws IOException { 25 name name.replace(., \\) .class; 26 File classFile new File(classpath, name); 27 return FileUtils .readFileToByteArray(classFile); 28 } 29 } 30 31 32 33 ClassLoader loader new FileSystemClassLoader(F:\\classpath); 34 Class clazz loader.loadClass(cn.itcast.utils.CommonUtils); 35 Method method clazz.getMethod(md5, String.class); 36 String result (String) method.invoke(null, qdmmy6); 37 System.out.println(result);       4tomcat类加器 Tomcat 5 BootstrapExtensionApplicationCommon sharedwebappXjsperLoader                                 Catalina /common:tomcat和所有webapp共同使用 /server:tomcat使用 webapp不可见 /shared:所以webapp共同使用 tomcat不能用 •Common该类加载器包含一些对Tomcat内部类和web应用可见的额外类。                 其中包括1jasper-compiler.jarJSP 2.0编译器2jsp-api.jarJSP 2.0 API3servlet-api.jarservlet 2.4 API等等。对应文件夹  /common •Catalina该加载器初始化用来包含实现Tomcat 5本身所需要所有类和资源对应文件夹 /server •Shared在所有的web应用程序间共享的类和资源对应文件夹  /shared •WebappX为每个部署在单个Tomcat 5实例上的Web应用创建的类加载器。 加载/WEB-INF/classes和WEB-INF/lib下的类和资源。 值得注意的是Web应用程序类加载器行为与默认的Java 2委派模型不同。当一个加载类的请求被WebappX类加载器处理时类加载器将首先查看本地库而非在查看前就委派 但是也有例外作为JRE基本类一部分的类不能被覆盖但是对与一些类可以使用J2SE 1.4的Endorsed Standards Override机制。最后任何包含servlet API的JAR包都将被该类加载器忽略。   5Tomcat 6.0: BootstrapExtensionApplicationCommon webappX 在tomcat中类的加载稍有不同如下图   当tomcat启动时会创建几种类加载器 1 Bootstrap 引导类加载器 加载JVM启动所需的类以及标准扩展类位于jre/lib/ext下 2 System 系统类加载器 加载tomcat启动的类比如bootstrap.jar通常在catalina.bat或者catalina.sh中指定。 位于CATALINA_HOME/bin下。 3 Common 通用类加载器 加载tomcat使用以及应用通用的一些类位于CATALINA_HOME/lib下比如servlet-api.jar 4 webapp 应用类加载器 每个应用在部署后都会创建一个唯一的类加载器。 该类加载器会加载位于 WEB-INF/lib下的jar文件中的class 和 WEB-INF/classes下的class文件。 当应用需要到某个类时则会按照下面的顺序进行类加载   1 使用bootstrap引导类加载器加载   2 使用system系统类加载器加载   3 使用应用类加载器在WEB-INF/classes中加载   4 使用应用类加载器在WEB-INF/lib中加载   5 使用common类加载器在CATALINA_HOME/lib中加载 问题扩展 通过对上面tomcat类加载机制的理解就不难明白 为什么java文件放在Eclipse中的src文件夹下会优先jar包中的class? 这是因为Eclipse中的src文件夹中的文件java以及webContent中的JSP都会在tomcat启动时 被编译成class文件放在 WEB-INF/class 中。 而Eclipse外部引用的jar包则相当于放在 WEB-INF/lib 中。 因此肯定是 java文件或者JSP文件编译出的class优先加载。 通过这样我们就可以简单的把java文件放置在src文件夹中通过对该java文件的修改以及调试 便于学习拥有源码java文件、却没有打包成xxx-source的jar包。 另外呢开发者也会因为粗心而犯下面的错误。 在 CATALINA_HOME/lib 以及 WEB-INF/lib 中放置了 不同版本的jar包此时就会导致某些情况下报加载不到类的错误。 还有如果多个应用使用同一jar包文件当放置了多份就可能导致 多个应用间 出现类加载不到的错误。转载于:https://www.cnblogs.com/wihainan/p/4757245.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息发布的网站怎么做python不用框架做网站

随着移动互联网的快速发展,小程序已经成为企业展示形象、推广产品和服务的重要工具。拥有一个优秀的小程序可以帮助企业提高品牌知名度,吸引更多潜在客户,提升用户体验。以下是拥有一个展示小程序的步骤: 确定需求和目标 首先&am…

企业站官网高级设计网站

定义一个字符串为内容的数组,每一行的多个文本框为一组,要求点击切换内容,且内容不重复. 代码 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">2 <html>3 <head>4 <title>New Document </title>5 <script>6 …

html5手机app网站模板支付宝小程序

Python中的循环控制语句 一、引言 在Python编程中&#xff0c;循环是重复执行一段代码直到满足特定条件的基本结构。Python提供了多种循环控制语句&#xff0c;如For 和While &#xff0c;以及用于控制循环流程的辅助语句&#xff0c;如Break、Continue和Pass。这些语句的组合…

没有网站怎么做CPC北京网站优化策略

Shiro 实战教程 1.权限的管理 1.1 什么是权限管理 ​ 基本上涉及到用户参与的系统都要进行权限管理&#xff0c;权限管理属于系统安全的范畴&#xff0c;权限管理实现对用户访问系统的控制&#xff0c;按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源…

温岭企业网站建设公司昆明网站建设公司排名猫咪科技

如今科技发达的时代&#xff0c;手机的功能不仅仅只是能通讯聊天&#xff0c;而是逐渐的走进了人们的生活中。因为有了APP&#xff0c;我们的生活才更丰富&#xff0c;并且有很多是我们生活中不可缺少的软件&#xff0c;而这些软件便是根据手机中的GPS定位系统而来的。简单来说…

百度收录网站多久利用wordpress打包成百度小程序

题目描述 今天小明去了一个风景如画的地方散心&#xff0c;但是自己带的饮料喝完了&#xff0c;小明口渴难耐&#xff0c;见不远处有家小商店&#xff0c;于是跑去买饮料。小明&#xff1a;“我要买饮料&#xff01;”店主&#xff1a;“我们这里有三种饮料&#xff0c;矿泉水1…

厦门app网站设计成都seo专家

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

做域名代理网站百度的广告怎么免费发布

从年初时的踌躇满志&#xff0c;到年中时整个业务线被砍。全职做前端训练营&#xff0c;四个多月的时间帮助100多名同学拿到了满意的offer&#xff0c;同时也让我的收入重归正轨。仅以这个视频记录我&#xff0c;一个普通程序员的 2023 。 视频版可直接访问 Hello&#xff0c;大…

网页网站开发工具wordpress腾讯地图插件下载

Markdown会干掉Html吗&#xff1f; 很明显&#xff0c;MarkDown正在已一种比病毒还快的速度传播着&#xff0c;量子的机器人语言也是深受其启发&#xff0c;当然了&#xff0c;在这个东西没搞出来之前&#xff0c;MarkDown就能干很多事情&#xff0c;比如在线编辑。 有了它&…

网站该怎么做wordpress 中文在线字体

可选题目三&#xff1a;TCP/IP协议栈在Linux内核中的运行时序分析在深入理解Linux内核任务调度(中断处理、softirg、tasklet、wq、内核线程等)机制的基础上&#xff0c;分析梳理send和recv过程中TCP/IP协议栈相关的运行任务实体及相互协作的时序分析。编译、部署、运行、测评、…

建立网站流程图wordpress iis6 伪静态

pycharm简介PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用…

godaddy如何创建网站做牙齿的招聘网站

利用二极管(开关器件)的单向导电特性&#xff0c;和放大器的优良放大性能相结合&#xff0c;可做到对输入交变信号(尤其是小幅度的电压信号)进行精密的整流&#xff0c;由此构成精密半波整流电路。若由此再添加简单电路&#xff0c;即可构成精密全波整流电路。二极管的导通压降…

网站外链接自己可以怎么做的内销网站要怎么做

部署静态文件&#xff1a; 静态文件有两种方式 1&#xff1a;通过django路由访问 2&#xff1a;通过nginx直接访问 方式1&#xff1a; 需要在根目录的URL文件中增加 url(r^$, TemplateView.as_view(template_name"index.html")),作为入口&#xff0c;在setting中更改…

2008 iis 网站自己开发app要钱吗

私有继承 在C中&#xff0c;私有继承是一种继承方式&#xff0c;它定义了一个私有派生类&#xff0c;也称为派生类。私有继承意味着派生类继承了基类的所有成员&#xff0c;但这些成员在派生类中是私有的&#xff0c;对外部不可见。 要进行私有继承请使用private关键字&#…

有系统源码可以做网站吗设备网站建设

2019.2.14 情人节&#xff0c;Filecoin项目开放了核心源码仓库go-filecoin&#xff0c;并更新了 filecoin-project organization下的诸多核心成果&#xff0c;这意味着&#xff0c;Filecoin已然度过了最困难的难点攻关期&#xff0c;进入到了全民公测阶段。 本系列文章将协助大…

a站为什么会凉制作网站的软件有那个免费

文章目录 UDP协议&#xff1f;什么是校验和&#xff1f;基于UDP的应用层协议(了解) TCP协议确认应答(可靠性机制)超时重传(可靠性机制)连接管理(可靠性机制)三次握手(重点)四次挥手(重点) 三次握手和四次挥手时客户端和服务器的状态滑动窗口(效率机制)流量控制(效率机制)窗口探…

企业网站建设的流程与原则公司网站制作公司

做Linux方面也有三个多月了&#xff0c;对代码中的有些结构一直不是非常明确&#xff0c;比方platform_device与platform_driver一直分不清关系。在网上搜了下&#xff0c;做个总结。两者的工作顺序是先定义platform_device -> 注冊 platform_device->&#xff0c;再定义…

重庆网站建设哪家做的好网站建设主流语言

这是Project Student的一部分。 其他职位包括带有Jersey的 Web服务 客户端&#xff0c;带有Jersey的 Web服务服务器 &#xff0c; 业务层和带有Spring Data的持久性 。 到目前为止&#xff0c;所有集成测试都使用了内存嵌入式数据库&#xff0c;该数据库无法一次又一次地保留信…

游戏的网站seo推广软件

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼6、free()函数问&#xff1a;下面的程序会在用户输入’freeze’的时候出问题&#xff0c;而’zebra’则不会&#xff0c;为什么?#include int main(int argc, char *argv[]) {char *ptr (char*)malloc(10);if(NULL ptr){printf(…

媒体网站开发字体设计在线生成

链接&#xff1a;https://pan.baidu.com/s/1-tCCFwZ0RggXtbWYBVyhFg?pwdmcgv 提取码&#xff1a;mcgv 华为MageBookD14原厂WIN11系统自带所有驱动、出厂状态主题壁纸、Office办公软件、华为电脑管家、华为应用市场等预装软件程序 文件格式&#xff1a;esd/wim/swm 安装方式…