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

境外网站服务器产品设计网址

境外网站服务器,产品设计网址,网站qq安全认证,社交app开发公司1.ClasserLoader介绍? classloader顾名思义,即是类加载。虚拟机把描述类的数据从class字节码文件加载到内存,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。…

1.ClasserLoader介绍?

classloader顾名思义,即是类加载。虚拟机把描述类的数据从class字节码文件加载到内存,并对数据进行检验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。了解java的类加载机制,可以快速解决运行时的各种加载问题并快速定位其背后的本质原因,也是解决疑难杂症的利器。因此学好类加载原理也至关重要。

内置类加载器

JVM 中内置了三个重要的 ClassLoader

  1. BootstrapClassLoader(启动类加载器):最顶层的加载类,由 C++实现,通常表示为 null,并且没有父级,主要用来加载 JDK 内部的核心类库( %JAVA_HOME%/lib目录下的 rt.jarresources.jarcharsets.jar等 jar 包和类)以及被 -Xbootclasspath参数指定的路径下的所有类。
  2. ExtensionClassLoader(扩展类加载器):主要负责加载 %JRE_HOME%/lib/ext 目录下的 jar 包和类以及被 java.ext.dirs 系统变量所指定的路径下的所有类。
  3. AppClassLoader(应用程序类加载器):面向我们用户的加载器,负责加载当前应用 classpath 下的所有 jar 包和类。

除了这三种类加载器之外,用户还可以加入自定义的类加载器来进行拓展,以满足自己的特殊需求。就比如说,我们可以对 Java 类的字节码( .class 文件)进行加密,加载时再利用自定义的类加载器对其解密。

2.代码工程

实验目标

实现加载外部jar包,并调用其中类方法

JarLoader

package com.et;import java.net.URL;
import java.net.URLClassLoader;
import java.lang.reflect.Method;
import java.io.File;public class JarLoader {private URLClassLoader urlClassLoader;// load JAR filepublic void loadJar(String jarFilePath) throws Exception {File jarFile = new File(jarFilePath);URL jarUrl = jarFile.toURI().toURL();urlClassLoader = new URLClassLoader(new URL[]{jarUrl}, this.getClass().getClassLoader());System.out.println("JAR Loaded: " + jarFilePath);}//load class from  JAR and invoke methodpublic void invokeClassMethod(String className, String methodName) throws Exception {if (urlClassLoader != null) {Class<?> loadedClass = urlClassLoader.loadClass(className);Method method = loadedClass.getDeclaredMethod(methodName);method.invoke(loadedClass.newInstance());System.out.println("Method Invoked: " + methodName);} else {System.out.println("ClassLoader is null, load a JAR first.");}}// unload JARpublic void unloadJar() throws Exception {if (urlClassLoader != null) {urlClassLoader.close();  // close ClassLoaderurlClassLoader = null;    // let it recycle by jvmSystem.out.println("JAR Unloaded.");} else {System.out.println("No JAR to unload.");}}
}

service(demo模块)

  • 创建sevice类
  • mvn install 打包成jar包
package com.et.demo.service;public class MockService implements Service {@Overridepublic void printVersion() {System.out.println("11.0");}
}
package com.et.demo.service;public interface Service {void printVersion();
}

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • GitHub - Harries/Java-demo(classloader)

3.测试

编写测试类

package com.et;public class Main {public static void main(String[] args) throws Exception {JarLoader jarLoader = new JarLoader();// load JARjarLoader.loadJar("D:\\IdeaProjects\\Java-demo\\demo\\target\\demo-1.0-SNAPSHOT.jar");// invoke the methodjarLoader.invokeClassMethod("com.et.demo.service.MockService", "printVersion");// unload JARjarLoader.unloadJar();}
}

启动main方法,查看日志

JAR Loaded: D:\IdeaProjects\Java-demo\demo\target\demo-1.0-SNAPSHOT.jar
11.0
Method Invoked: printVersion
JAR Unloaded.
Disconnected from the target VM, address: '127.0.0.1:53226', transport: 'socket'Process finished with exit code 0

4.引用

  • ClassLoader (Java Platform SE 7 )
  • 利用ClasserLoader来实现jar包加载并调用里面的方法 | Harries Blog™
http://www.yayakq.cn/news/520718/

相关文章:

  • 昆明网站建设 技术支持访问的网站显示建设中
  • 网站做不做301网站建设 永灿 竞争
  • 网站图片最大尺寸佛山市城乡和住房建设局网站
  • 车险网站模版交换友链平台
  • 建企业门户网站大庆做网站
  • windows server iis 添加网站网站建设需要多少钱小江网页设计
  • 平顶山网站关键词优化不会编程如何做自己的网站
  • 上海做网站去哪里android网站开发视频教程
  • 网上书城网站系统建设如何制作企业内部网站
  • wordpress 移动建站网站域名所有权
  • 昆明网站建设公司猎狐科技怎么样怎么把网站做二维码
  • 唯品会一家做特卖的网站手机版大型网站建设需要多少钱
  • 网站建设大赛策划书教学设计代做去什么网站
  • 中国网络推广网站排名奇璐荣获北京十大高端设计公司称号
  • 一学一做教育视频网站有哪些内容大兴安岭建设局网站
  • 网页设计与实训布置课堂作业seo是啥职业
  • 网站建设开发工具wordpress相册滑动
  • 哪有做网站的定单长春建设集团股份有限公司网站
  • 猪八戒做网站排名中企动力网站建设方案
  • 怎么做宣传网站做网站游戏推广赚钱
  • 清溪镇仿做网站网页界面设计的宗旨是什么
  • 广东工程建设信息网站wordpress 4.4.2
  • 做网站zwnet广州学建设网站
  • 企业网站的设计要求有哪些网站制作视频教程下载
  • 您的网站对百度设置了ua封禁z怎么解决响应式网站设计图怎么做
  • 官方网站下载钉钉ueditor编辑器wordpress
  • 企业定制网站价格表公司如何建站
  • 企业宽带 做网站wordpress网页自适应屏幕大小
  • 吉安建设公司网站dede 汽车网站
  • 做淘宝客的网站路由器做网站服务器