色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java - 匿名內(nèi)部類(lèi)和繼承類(lèi),在實(shí)現(xiàn)ClassLoader時(shí)為什么會(huì)有區(qū)別

瀏覽:97日期:2023-11-29 09:52:36

問(wèn)題描述

最近在看Java虛擬機(jī),類(lèi)加載器那節(jié)舉了這么一個(gè)例子:

/***類(lèi)加載器與instanceof關(guān)鍵字演示**@author zzm*/public class ClassLoaderTest{ public static void main(String[]args) throws Exception{ClassLoader myLoader=new ClassLoader(){ @Override public Class<?>loadClass(String name)throws ClassNotFoundException{try{ String fileName=name.substring(name.lastIndexOf('.')+1)+'.class'; InputStream is=getClass().getResourceAsStream(fileName); if(is==null){return super.loadClass(name); } byte[]b=new byte[is.available()]; is.read(b); return defineClass(name,b,0,b.length);}catch(IOException e){ throw new ClassNotFoundException(name);} }};Object obj=myLoader.loadClass('org.fenixsoft.classloading.ClassLoaderTest').newInstance();System.out.println(obj.getClass());System.out.println(obj instanceof org.fenixsoft.classloading.ClassLoaderTest);//false }}

總而言之就是用自定義的類(lèi)加載器去加載一個(gè)類(lèi),返回的類(lèi)與jvm自帶的SystemClassLoader加載的類(lèi)不同。

那么如果用一個(gè)繼承自ClasserLoader的類(lèi),按理說(shuō)也是同樣的效果

package jvm;public class MyClassLoader extends ClassLoader{ @Override public Class<?> loadClass(String fullClassName) throws ClassNotFoundException{try { String fileName = fullClassName.substring(fullClassName.lastIndexOf('.')+1,fullClassName.length())+'.class'; InputStream is = getResourceAsStream(fileName); if(is==null){return super.loadClass(fullClassName); } byte[] bytes = new byte[is.available()]; is.read(bytes); return defineClass(fullClassName,bytes,0,bytes.length);}catch (Exception e){ throw new ClassNotFoundException();} } public static void main(String[] args) throws Exception{ClassLoader myClassLoader = new MyClassLoader();/**ClassLoader myClassLoader = new ClassLoader() { @Override public Class<?> loadClass(String fullClassName) throws ClassNotFoundException {try { String fileName = fullClassName.substring(fullClassName.lastIndexOf('.')+1,fullClassName.length())+'.class'; InputStream is = getClass().getResourceAsStream(fileName); if(is==null){return super.loadClass(fullClassName); } byte[] bytes = new byte[is.available()]; is.read(bytes); return defineClass(fullClassName,bytes,0,bytes.length);}catch (Exception e){ throw new ClassNotFoundException();} }};/**/ClassLoader systemClassLoader = java.lang.ClassLoader.getSystemClassLoader();Class myClass = myClassLoader.loadClass('jvm.MyClassLoader');Class systemClass = systemClassLoader.loadClass('jvm.MyClassLoader');Object myObj = myClass.newInstance();Object systemObj = systemClass.newInstance();System.out.println(myClass.equals(systemClass));//trueSystem.out.println(myObj.getClass().equals(systemObj.getClass()));//true }}

注釋里的代碼就是匿名內(nèi)部類(lèi)的繼承,注意到這里myClass和systemClass是完全相等的,但是myClass是使用繼承自ClassLoader的類(lèi)MyClassLoader生成的,請(qǐng)問(wèn)這是為什么呢。。。

問(wèn)題解答

回答1:

第二個(gè)代碼走到

if(is==null){ return super.loadClass(fullClassName);}

加載class文件用getClass().getResourceAsStream

標(biāo)簽: java
主站蜘蛛池模板: 免费一级夫妻a | 欧美一区二区三区国产精品 | 欧美日韩国产亚洲综合不卡 | 亚洲欧美精品一区 | 日本欧美在线视频 | 国产男女爽爽爽爽爽视频 | 亚洲自拍偷拍图 | 啪啪一级片 | 男人的天堂免费 | 一级成人毛片免费观看欧美 | 男女视频免费观看 | 欧美一区二区视频 | 狠色狠狠色狠狠狠色综合久久 | 亚洲天堂久久精品成人 | 中文字幕在线观看国产 | 免费在线观看a级毛片 | 国产一区私人高清影院 | 久久久久久久久免费视频 | 中文字幕波多野不卡一区 | 日本 欧美 国产 | 欧美不卡一区二区三区 | 日本精品中文字幕有码 | 亚洲三级免费观看 | 一级做a爱过程免费视频时看 | 久久精品久久精品久久 | 亚洲 欧美 精品专区 极品 | 欧美一区二区三区不卡免费 | 国产在线一区二区三区欧美 | 亚洲自拍偷拍图 | 色伊人国产高清在线 | 成人久久18免费网 | 玖玖精品国产 | 欧美精品午夜久久久伊人 | 午夜性色福利视频在线视频 | 国产精品一区二区久久精品涩爱 | 成人性色生活片免费网 | 欧美在线视频 一区二区 | 国产精品久久久久久久久免费观看 | 美女视频大全视频a免费九 美女视频大全网站免费 | 毛片亚洲毛片亚洲毛片 | 日韩国产成人精品视频 |