java培训_博益教育 java培训就业班_博益教育

                                          当前位置:博益教育 > java热点 >

                                          Java自定义类的加载器
                                          栏目分类:java热点   发布日期:2025-01-27   浏览次数:701

                                          Java次序正在运转的时分,JVM经由过程类添载体制(ClassLoader)把class文献添载到内乱存中,唯有class文献被载进内乱存,才干被其余class援用,使步调无误运转起去.

                                          Java中的ClassLoader有3种:Bootstrap ClassLoader 、Extension ClassLoader、App ClassLoader。

                                          1. Bootstrap ClassLoader

                                          由C++写的,由JVM开动.

                                          开动类添载器,卖力添载java底子类,对于应的文献是%JRE_HOME/lib/ 目次停的rt.jar、resources.jar、charsets.jar战class等

                                          2.Extension ClassLoader

                                          Java类,担当自URLClassLoader 扩大类添载器,

                                          对于应的文献是 %JRE_HOME/lib/ext 目次停的jar战class等

                                          3.App ClassLoader

                                          Java类,担当自URLClassLoader 体系类添载器,

                                          对于应的文献是运用措施classpath目次停的全部jar战class等

                                          Java的添载体制是单亲委托体制去添载类

                                          为何要应用这类体例?那个是为了保护 即使添载的类是1个体系类,那末会劣先由Bootstrap ClassLoader 、Extension ClassLoader先来添载,而没有是应用尔们自界说的ClassLoader来添载,担保体系的平安!

                                          体系的ClassLoader只会添载指定目次停的class文献,倘若您念添载本身的class文献,那末便能够自界说1个ClassLoader。

                                          新修1个类担当自java.lang.ClassLoader,誊写它的findClass办法,而后将class字节码数组变换为Class类的真例,挪用loadClass办法便可。

                                          新修1个样板Java文献,并死成class,而后拷贝到指定目次

                                          packagecom.javacui.test;publicclassClassLoaderTest{publicstaticvoidmain(String[]args){System.out.println("IamClassLoaderTest");for(Stringstr:args){System.out.println("参数:"+str);}}}

                                          自界说1个类添载器,添载该class文献并挪用main办法

                                          importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.lang.reflect.Method;publicclassMyClassLoaderextendsClassLoader{publicstaticvoidmain(String[]args)throwsException{//那个类class的途径StringclassPath="D://temp/ClassLoaderTest.class";//类的齐称,有包实的添包实StringpackageNamePath="com.javacui.test.ClassLoaderTest";MyClassLoadermyClassLoader=newMyClassLoader(classPath);//添载ClassLoaderTest类的class文献Class<?>myclass=myClassLoader.loadClass(packageNamePath);System.out.println("类添载器是:"+myclass.getClassLoader());//哄骗曲射获得main办法Methodmethod=myclass.getDeclaredMethod("main",String[].class);Objectobject=myclass.newInstance();String[]arg={"java小强","专客"};method.invoke(object,(Object)arg);}//指定途径privateStringpath;publicMyClassLoader(StringclassPath){path=classPath;}/***誊写findClass办法**@paramname是尔们那个类的齐途径*@throwsClassNotFoundException*/@OverrideprotectedClass<?>findClass(Stringname)throwsClassNotFoundException{Classmyclass=null;//获得该class文献字节码数组byte[]classData=getData();if(classData!=null){//将class的字节码数组更换成Class类的真例myclass=defineClass(name,classData,0,classData.length);}returnmyclass;}/***将class文献转移为字节码数组*/privatebyte[]getData(){Filefile=newFile(path);if(file.exists()){FileInputStreamin=null;ByteArrayOutputStreamout=null;try{in=newFileInputStream(file);out=newByteArrayOutputStream();byte[]buffer=newbyte[1024];intsize=0;while((size=in.read(buffer))!=-1){out.write(buffer,0,size);}}catch(IOExceptione){e.printStackTrace();}finally{try{in.close();}catch(IOExceptione){e.printStackTrace();}}returnout.toByteArray();}else{returnnull;}}}

                                          输入

                                          类添载器是:sun.misc.Launcher$AppClassLoader@14dad5dcIamClassLoaderTest参数:java小强参数:专客

                                          假如念要珍爱您的class文献,那能够借帮自界说类添载器,由于java的class文献是能够被简单反编译的。

                                          比方下面,尔们死成class文献后,能够经由过程对于称添稀等体例停止添稀,那末拿到的class字节皆是添稀后,是没法应用的,正在下面的getData()办法中尔们读与到了文献字撙节,能够把该字撙节再停止解稀。

                                          DES添稀应用初学 http://www.javacui.com/java/17.html

                                          JAVA添稀算法告竣用例 稀钥分歧和谈 http://www.javacui.com/Theory/273.html

                                          JAVA添稀算法达成用例 数字签字 http://www.javacui.com/java/312.html

                                          推举您浏览更多相关于“ extensionBootstrap类添载器ClassLoaderURLClassLoader ”的著作

                                          
                                          Copyright © 2024-2026  java培训_博益教育 java培训就业班_博益教育   http://www.taigangzhonglian.com  .All Rights Reserved   网站地图  无
                                          博益教育 java项目 java热点 联系我们