濡傛灉澶у浣跨敤鐨勬槸maven宸ョ▼錛岄偅涔堢幇鍦?/span>pom鏂囦歡涓姞鍏?/span>perf4j鐨勪緷璧栥?/span>
<dependency>
<groupId>org.perf4j</groupId>
<artifactId>perf4j</artifactId>
<version>0.9.16</version>
<scope>compile</scope>
</dependency>
濡傛灉鐢ㄧ殑鏄櫘閫氬伐紼嬶紝閭d箞鐩存帴涓嬭澆jar鍖呮斁鍏?/span>lib鐩綍涓嬪嵆鍙?/span>
渚嬪瓙錛?/span>
package com.baowu.per4j;
import org.perf4j.LoggingStopWatch;
import org.perf4j.StopWatch;
public class Example1 {
public static void main(String[] args) throws InterruptedException{
method1();
method2();
method3();
}
/**
* 鐩戞帶涓澶勪唬鐮佺ず渚?/span>
* @throws InterruptedException
*/
private static void method1() throws InterruptedException{
//鍒涘緩涓涓洃鎺у璞★紝榪欓噷浣跨敤LoggingStopWatch錛屽畠鏄妸緇撴灉鐩存帴杈撳嚭鍒版帶鍒跺彴銆傛垜浠篃鍙互
//浣跨敤StopWatch鐨勫叾浠栧瓙綾伙紝姣斿錛?/span>Log4JStopWatch錛?/span>CommonsLogStopWatch銆備笉榪囪繖浜涘瓙綾婚渶
//瑕佸伐紼嬩嬌鐢ㄦ棩蹇楁鏋?/span>
StopWatch stopWatch = new LoggingStopWatch("codeBlock1");
//榪欓噷灝辨槸涓浜涢渶瑕佺洃鎺х殑浠g爜錛屾垜浠懡鍚嶄負codeBlock1
//浣跨敤綰跨▼浼戠湢鏄負浜嗘ā鎷熶唬鐮佹墽琛屾椂闂?/span>
Thread.sleep((long)(Math.random() * 1000L));
//鍋滄璁$畻浠g爜鎬ц兘
stopWatch.stop();
}
/**
* 涓涓柟娉曞鍑轟唬鐮佺洃鎺?/span>
* @throws InterruptedException
*/
private static void method2() throws InterruptedException{
StopWatch stopWatch = new LoggingStopWatch();
Thread.sleep((long)(Math.random() * 1000L));
stopWatch.lap("codeBlock3");
Thread.sleep((long)(Math.random() * 1000L));
stopWatch.lap("codeBlock4");
Thread.sleep((long)(Math.random() * 1000L));
stopWatch.lap("codeBlock5");
Thread.sleep((long)(Math.random() * 1000L));
stopWatch.stop("codeBlock6");
}
/**
* stop鏂規硶鍙互鍔犲叆涓浜涜鏄庝俊鎭?/span>
*/
private static void method3(){
StopWatch stopWatch = new LoggingStopWatch();
try {
// the code block being timed - this is just a dummy example
long sleepTime = (long)(Math.random() * 1000L);
Thread.sleep(sleepTime);
if (sleepTime > 500L) {
throw new Exception("Throwing exception");
}
stopWatch.stop("codeBlock2.success", "Sleep time was < 500 ms");
} catch (Exception e) {
stopWatch.stop("codeBlock2.failure", "Exception was: " + e);
}
}
}
榪愯緇撴灉錛?/span>
start[1334457619937] time[355] tag[codeBlock1]
start[1334457620296] time[152] tag[codeBlock3]
start[1334457620453] time[138] tag[codeBlock4]
start[1334457620593] time[598] tag[codeBlock5]
start[1334457621187] time[700] tag[codeBlock6]
start[1334457621890] time[619] tag[codeBlock2.failure] message[Exception was: java.lang.Exception: Throwing exception]
Perf4j涓昏鐨勭敤閫旀槸璁¢噺浠g爜鎬ц兘鍜屽垎鏋愭ц兘鏁版嵁銆?/span>
涓轟粈涔堣浣跨敤榪欎釜宸ュ叿鍛紵鎴戜滑鍙互鑱旀兂涓嬫渶鏃╂湡java寮鍙戣呰皟璇曚唬鐮佷嬌鐢ㄧ殑鏂瑰紡錛屼互鍓嶆病鏈夋棩蹇楁鏋訛紝閭?/span>java寮鍙戝氨浣跨敤System.out.println()鏉ヨ緭鍑鴻嚜宸辨兂鏌ョ湅鐨勫彉閲忋備絾鏄繖鏍烽」鐩笂綰跨殑璇濓紝灝辮鍘繪帀榪欎簺鎵撳嵃璇彞浠ュ噺灝戞ц兘褰卞搷銆傞偅涓囦竴鍦ㄧ嚎涓婂嚭闂浜嗭紝璋冭瘯鍝噷鍑洪棶棰樺氨寰堥夯鐑︼紝鍥犱負娌℃湁杈撳嚭鐨勬棩蹇楀彲鏌ャ傛墍浠ュ悗鏉ユ湁浜哄紑鍙戜簡鏃ュ織妗嗘灦錛岄氳繃鏃ュ織綰у埆鎺у埗鏃ュ織鐨勮緭鍑恒?/span>
綾諱技鐨勶紝濡傛灉娌℃湁perf4j錛屾垜浠湪鏌ョ湅浠g爜榪愯鏃墮棿鐨勮瘽鍙互鐢ㄤ互涓嬩唬鐮佹潵瀹炵幇錛?/span>
long start = System.currentTimeMillis();
// execute the block of code to be timed
System.out.println("ms for block n was: " + (System.currentTimeMillis() - start));
榪欑鏂瑰紡鏈夊嚑涓己鐐癸細
1銆?nbsp;榪欑鏂瑰紡杈撳嚭鍐呭姣旇緝鍗曚竴錛屽氨鏄唬鐮佹葷殑榪愯鏃墮棿銆備絾鏄垜浠唬鐮侀渶瑕佹煡鐪嬬殑鎬ц兘鎸囨爣鏈夋洿澶氾紝姣斿鎬葷殑騫沖潎鍊鹼紝鏈灝忓鹼紝鏈澶у鹼紝tps絳夌瓑銆?/span>
2銆?nbsp;涔熻鎴戜滑鐨勪唬鐮佸湪綰夸笂榪愯錛屾垜浠兂鎶婅繖浜涘奸氳繃鍥捐〃鐨勫艦寮忓睍紺哄嚭鏉ャ傛垨鑰呮妸榪欎簺鍐呭閫氳繃jmx杈撳嚭銆?/span>
3銆?nbsp;鍙﹀錛屾垜浠彲鑳芥妸perf4j璺?/span>log4j錛?/span>slf4j絳夋棩蹇楁鏋跺拰鏃ュ織闂ㄩ潰緋葷粺鏁村悎璧鋒潵銆?/span>
鍩轟簬浠ヤ笂榪欎簺闂錛屾墍浠ュ紑婧愮ぞ鍖哄氨鍑虹幇浜?/span>perf4j錛堜漢澶氬姏閲忓ぇ錛岀ぞ鍖虹殑鍔涢噺灝辨槸寮哄ぇ錛夈?/span>
Perf4j涓浜涚壒鎬э細
l 綆鍗曠殑鍋滄鏌ョ湅鏈哄埗鏉ヨ綆楄鍙ユ椂闂存秷鑰楄緭鍑恒?/span>
l 鍛戒護琛岃В鏋?/span>log鏂囦歡浜х敓姹囨繪暟鎹拰鍥捐〃銆?/span>
l 綆鍗曠殑闆嗘垚鏃ュ織妗嗘灦鍜岄棬闈㈡鏋躲?/span>
l 鑷畾涔?/span>log4j鍜?/span>logback鐨?/span>appenders鏉ヤ駭鐢熸暟鎹拰鍥捐〃銆?/span>
l 閫氳繃jmx鏌ョ湅鎬ц兘鎸囨爣錛屽茍鏍規嵁闃堝煎彂閫佹秷鎭?/span>
l Web宸ョ▼鍙互閫氳繃servlet鏉ヨ緭鍑烘ц兘鎸囨爣銆?/span>
l Perf4j鍙互鍜?/span>aop絳夊垏闈㈡鏋舵暣鍚堣搗鏉ヨ緭鍑烘ц兘鎸囨爣銆?/span>
l Perf4j鏄竴涓彲鎵╁睍鐨勬灦鏋勩?/span>
鍏徃鏈榪戜弗鎶撹蔣浠惰川閲忛棶棰橈紝鎴戞娊絀轟簡瑙d簡涓嬫彁楂樹唬鐮佽川閲忕殑涓浜涘紑婧愬伐鍏楓傚叾涓竴涓氨鏄?/span>findbugs銆備嬌鐢?/span>findbugs鏈夊緢澶氭柟寮忥紝姣斿錛氬畨瑁?/span>eclipse findbugs鎻掍歡錛岄氳繃maven璋冪敤鐢熸垚鎶ュ憡銆備粖澶╀富瑕佹紨紺轟笅maven涓?/span>findbugs闆嗘垚銆?/span>
絎竴姝ワ細涓嬭澆maven錛屾垜浣跨敤鐨勬槸maven3銆傛妸maven鐨勫懡浠ゅ姞鍏?/span>PATH鐜鍙橀噺銆?/span>
絎簩姝ワ細鍒涘緩涓涓櫘閫氱殑maven java宸ョ▼銆傚懡浠ゅ涓嬶細mvn archetype:maven-archetyp-quickstart –DgroupId=com.tianya –DartifactId=baowu銆傚鏋滄甯告墽琛岀殑璇濅細鐢熸垚濡備笅緇撴瀯鐨勪竴涓伐紼嬨?/span>
絎笁姝ワ細鎴戜滑鐪嬩笅pom鏂囦歡
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tianya</groupId>
<artifactId>baowu</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!--閰嶇疆鎻掍歡鏉ユ簮 -->
<pluginRepositories>
<pluginRepository>
<id>Codehaus repository</id>
<url>http://repository.codehaus.org/</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<!-- <configLocation>${basedir}/springside-findbugs.xml</configLocation> -->
<threshold>High</threshold>
<effort>Default</effort>
<findbugsXmlOutput>true</findbugsXmlOutput>
<!-- findbugs xml杈撳嚭璺緞--> <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
鎴戞潵瑙i噴涓?/span>xml閰嶇疆錛?/span>
l 閰嶇疆鎻掍歡涓嬭澆鍦板潃
<!--閰嶇疆鎻掍歡鏉ユ簮 -->
<pluginRepositories>
<pluginRepository>
<id>Codehaus repository</id>
<url>http://repository.codehaus.org/</url>
</pluginRepository>
</pluginRepositories>
l 鐢變簬maven鏍稿績鍋氱殑浜嬫儏閮芥槸鎶借薄鐨勬瀯寤鴻繃紼嬶紝寰堝瀹為檯鐨勫伐浣滈兘鏄叿浣撶殑鎻掍歡鏉ュ疄鐜般傛墍浠ュ緢鏄劇劧錛?/span>maven浠ユ彃浠剁殑鏂瑰紡闆嗘垚findbugs銆?/span>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<!-- <configLocation>${basedir}/springside-findbugs.xml</configLocation> -->
<!-- findbugs xml杈撳嚭--> <findbugsXmlOutput>true</findbugsXmlOutput>
<!-- findbugs xml杈撳嚭璺緞--> <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
</configuration>
</plugin>
l 澶у娉ㄦ剰鍒頒簡findbugs鎻掍歡閲岋紝鎴戞敞閲婃帀浜嗕竴鍙ヨ瘽錛屽叾瀹炶繖鍙ヨ瘽灝辨槸鍙互浣跨敤鑷繁鐨?/span>fingbugs閰嶇疆鏉ュ仛媯鏌ャ傛垜鐢ㄧ殑鏄?/span>springside鐨勪竴涓?/span>xml鏂囦歡銆?/span>
絎洓姝ワ細閰嶇疆濂界浉鍏蟲枃浠朵箣鍚庯紝鎺ヤ笅鏉ュ氨鏄墽琛岀浉鍏沖懡浠や簡銆?/span>
mvn compile findbugs:findbugs鐢熸垚鎶ュ憡銆傛姤鍛婄敓鎴愮殑鍦板潃灝辨槸${欏圭洰鏍圭洰褰?/span>}/target/site銆備篃鍙互閫氳繃mvn findbugs:gui gui鐣岄潰鏌ョ湅findbugs鐨?/span>report銆?/span>
浠庡鏍℃瘯涓氬埌宸ヤ綔宸茬粡2騫村崐鏃墮棿浜嗭紝鍦ㄨ眴鐡c佸綋褰撱佷含涓滃拰浜氱帥閫婁笂鍏蟲敞浜嗗緢澶氫功綾嶏紝涔熸瘮杈冨枩嬈㈤涗功搴椼傚綋鐒朵拱浜嗗緢澶氬拰鐪嬩簡閮ㄥ垎錛岃嚜宸卞閲屽緢澶氫功榪樻病鐪嬶紙浜虹被鐨勬儼鎬э紝鍊熷彛錛夈傚湪榪欎袱騫村崐鏃墮棿鍐咃紝璧頒簡涓浜涘集璺紝鎵浠ユ兂鎬葷粨涓嬭嚜宸辯殑瀛︿範鐢熸動銆?/span>
姣曚笟鐨勬椂鍊欏幓浜嗕竴瀹跺垱涓氬瀷鐨勪簰鑱旂綉鍏徃錛屽湪榪欏鍏徃娌℃湁浠諱綍鍩硅鏈哄埗錛屼換浣曚笢瑗塊兘闇瑕侀潬鑷繁鏉ユ崏鎽搞傛牴鎹伐浣滈渶瑕佺湅浜?/span>struts2錛?/span>spring錛?/span>hibernate錛?/span>jstl錛?/span>jsp錛?/span>servlet絳変竴浜?/span>J2EE鐩稿叧緇勪歡鐨勪功鍜岃祫鏂欍備粎闈犺繖浜涙妧鏈篃鑳芥惌寤哄嚭涓涓鍚堜駭鍝佺殑緗戠珯銆傛帴瑙﹀埌infoq緗戠珯涔嬪悗錛屼簡瑙d簡涓浜涘ぇ鍨嬬綉绔欑殑鏋舵瀯鍙樿縼絳夋妧鏈紝鍦ㄤ竴騫寸殑鏃墮棿鍐呬笉鏂拷瀵昏繖浜涗笉絎﹀悎鑷繁鐩墠闇瑕佺殑鎶鏈紝鍏呭叾閲忓氨鏄紑闃斾簡鑷繁鎶鏈殑鐪肩晫銆傜敱浜庝簰鑱旂綉鍏徃鐨勪竴浜涘姡鍔匡紝瀵艱嚧鎴戞湁浜嗚煩妲界殑鎯蟲硶錛屼絾鏄嚭鍘婚潰璇曚箣鍚庯紝鎵嶇煡閬撹嚜宸辨槸浜曞簳涔嬭洐銆傝嚜宸變篃綆楃儹鐖辨妧鏈紝涔熺畻鍔姏瀛︿範鍜岀爺絀剁殑錛岃嚜宸卞弽鎬濆拰鎬葷粨浜嗕竴涓嬶細涓嶆敞閲嶅熀紜銆?/span>
閭d箞瀛︿範浠涔堟墠綆楀熀紜鍛紵鎴戜富瑕佸垪涓句笅鎴戠殑瀛︿範涔﹀崟錛?/span>
ü 璁$畻鏈哄熀紜錛氫換浣曡蔣浠惰繍琛岀殑鍩虹銆?/span>
ü 鎿嶄綔緋葷粺錛氱‖浠剁鐞嗙殑杞歡錛屾垜浠殑搴旂敤杞歡涓昏渚濊禆浜庢搷浣滅郴緇熴?/span>
n 楦熷摜鐨?/span>Linux縐佹埧鑿?/span> 鍩虹瀛︿範綃?/span>
ü 鏁版嵁緇撴瀯錛氳蔣浠?/span>=鏁版嵁緇撴瀯+綆楁硶銆傚叾瀹炴搷浣滅郴緇熻蔣浠跺拰搴旂敤杞歡閮藉湪澶ч噺搴旂敤鏁版嵁緇撴瀯銆?/span>
ü 緗戠粶錛氱郴緇熶竴瀹氶渶瑕佷笌澶栭儴浜や簰錛岄偅灝遍渶瑕佺綉緇溿?/span>
ü 鏁版嵁搴擄細瀛樺偍鏁版嵁銆?/span>
n MySQL 5 鏉冨▉鎸囧崡-(絎?/span>3鐗?/span>)
ü 杞歡宸ョ▼錛氬紑鍙戣蔣浠舵槸涓涓ぇ宸ョ▼錛岄渶瑕佹湁涓濂楃悊璁烘潵綆$悊杞歡寮鍙戙?/span>
n 杞歡宸ョ▼
ü 綆楁硶錛氬皻鏈帴瑙︺?/span>
ü Java鍩虹錛氬叿浣撶殑楂樼駭璇█錛屾渶濂界殑瀛︿範鍦版柟灝辨槸java鐨勫畼鏂圭綉绔欏拰寮婧愪唬鐮併?/span>
n Java緗戠粶緙栫▼(涓枃鐗?/span> 絎笁鐗?/span>)
ü Java榪涢樁錛氶潰鍚戝璞℃濇兂銆佽璁℃ā寮忓拰J2EE娣卞叆銆?/span>
n J2EE璁捐寮鍙戠紪紼嬫寚鍗?/span>錛?/span>Expert One-on-One J2EE Design and Development錛?/span>
n Expert One-on-One J2EE Development without EJB
瀛︿範浜嗚繖浜涘熀紜涔嬪悗錛屾垜浠湪鏉ヨ鍒嗗竷寮忥紝nosql錛屼簯璁$畻錛屼紒涓氶泦鎴愮瓑絳夈傚彧鏈夋帉鎻′簡鍩虹鎴戜滑鎵嶈兘鏇村ソ鐨勫垱鏂般?/span>
Java璇█涓?/span>c璇█鏈変竴涓潪甯擱噸瑕佺殑鍖哄埆灝辨槸錛氬唴瀛樼鐞嗘柟寮忕殑涓嶅悓錛?/span>java璇█鍐呭瓨綆$悊涓嶉渶瑕佺▼搴忓紑鍙戜漢鍛樺叧娉紝鑰?/span>c璇█鐨勫唴瀛樼殑璇鋒眰鍜岄噴鏀鵑兘鏄紑鍙戜漢鍛樻潵澶勭悊銆傝京璇佺殑鎬濈淮鏉ョ湅錛屼笉鍚屽唴瀛樼鐞嗗疄鐜版柟寮忔湁浼樼偣鍜岀己鐐癸紝鎵浠ヨ璦搴旂敤鐨勫満鏅紝鏁堢巼浼氭湁寰堝ぇ涓嶅悓銆?/span>
Jvm榪愯鏃剁殑鏁版嵁鍖哄煙涓昏鏈夛細紼嬪簭璁℃暟鍣ㄣ佽櫄鎷熸満鏍堛佹湰鍦版柟娉曟爤銆佹柟娉曞尯鍜屽爢銆傚叾涓▼搴忚鏁板櫒銆佽櫄鎷熸満鏍堝拰鏈湴鏂規硶鏍堟槸綰跨▼鐙韓錛岃屾柟娉曞尯鍜屽爢鏄墍鏈夌嚎紼嬪叡浜?/span>
ü 紼嬪簭璁℃暟鍣細jvm姣忎釜綰跨▼閮芥湁涓涓▼搴忚鏁板櫒銆傚湪浠諱竴鏃跺埢閮芥湁涓涓嚎紼嬬殑鏂規硶鍦ㄨ繍琛岋紝濡傛灉榪欎釜鏂規硶涓嶆槸鏈湴鏂規硶錛岄偅涔堢▼搴忚鏁板櫒瀛樻斁鐨勫氨鏄鍦ㄦ墽琛岀殑鎸囦護鍦板潃錛涘鏋滄槸鏈湴鏂規硶錛岄偅涔堢▼搴忚鏁板櫒涓瓨鏀劇殑鎸囧畾鍦板潃涓?/span>undefined銆?/span>
ü 铏氭嫙鏈烘爤錛氬綋jvm鍒涘緩涓涓嚎紼嬬殑鏃跺欏氨浼氫負綰跨▼鍒嗛厤涓涓櫄鎷熸満鏍堛備富瑕佺敤浜庡瓨鏀炬柟娉曠殑涓浜涙湰鍦板彉閲忓拰閮ㄥ垎緇撴灉錛屼竴鑸繖閲岀殑澶у皬閮芥槸鍥哄畾錛屼絾涓嶆槸緇濆銆備竴涓柟娉曠殑鎵ц鍒板畬鎴愬氨鏄爤鐨勫叆鏍堝拰鍑烘爤銆傚亣璁懼湪鏌愭柟娉曚腑瀹氫箟浜嗕竴涓璞?/span>Object obj=new Object();鍏朵腑obj鏄瓨鏀懼湪鏍堜笂錛岃?/span>new Object()鏄湪鍫嗕笂鍒嗛厤銆?/span>-Xss鍙互鎺у埗jvm铏氭嫙鏈烘爤鐨勫ぇ灝忋?/span>
ü 鏈湴鏂規硶鏍堬細澶т綋璺熻櫄鎷熸満鏍堢被浼鹼紝涓嶈繃鏄粰鏈湴鏂規硶浣跨敤鐨勩傝櫄鎷熸満鏍堝拰鏈湴鏂規硶鏍堝湪hotspot鏄病鏈夊垎寮瀹炵幇鐨勶紝鑰屾槸緇熺О涓烘爤銆?/span>
ü 鏂規硶鍖猴細涓昏瀛樻斁闈欐佸彉閲忥紝甯擱噺錛岀被鍔犺澆鍣ㄥ姞杞界殑綾葷瓑涓浜涗俊鎭?/span>
ü 鍫嗭細jvm緇濆ぇ閮ㄥ垎鐨勫璞″垎閰嶉兘鍦ㄥ爢涓婂垎閰嶃?/span>-Xmn –Xmx鏄帶鍒跺爢鏈灝忓煎拰鏈澶у鹼紝涓鑸爢鐨勫ぇ灝忓湪浣跨敤浜嗚秴榪?/span>mx璁懼畾鐨?/span>70%鐨勬椂鍊欙紝灝變細鑷姩鎵╁ぇ鍒版渶澶у鹼紝鎵浠ラ槻姝㈣繖縐嶆墿澶у拰緙╁皬鎴戜滑璁劇疆鎴愪竴鏍風殑鍊箋?/span>
ClassCastException綾誨瀷杞崲寮傚父錛屾槸涓涓繍琛屾椂寮傚父銆?/span>
闈炲父甯歌灝辨槸涓嶅悓綾誨瀷涔嬮棿鐨勫己鍒剁被鍨嬭漿鎹㈠氨浼氭姏鍑?/span>ClassCastException寮傚父銆傝繕鏈変竴縐嶅氨鏄笉鍚?/span>ClassLoader鍔犺澆鐨勭浉鍚岀殑綾誨瀷杞崲涔熶細鎶涘嚭ClassCastException銆傛帴涓嬫潵鎴戠敤浠g爜鏉ヨ緇嗚В閲婁笅銆?/span>
1銆?nbsp;寮哄埗綾誨瀷杞崲
public class ClassCastExceptionTest {
/**
* @param args
*/
public static void main(String[] args) {
Animal a1 = new Dog(); //1
Animal a2 = new Cat(); //2
Dog d1 = (Dog)a1; //3
Dog d2 = (Dog)a2; //4
}
}
鎶婄尗杞崲鎴愮嫍錛屾槸涓嶅鐨勩傚悗闈㈡敞閲婁負4鐨勪唬鐮佹槸鏃犳硶姝e父璧嬪肩殑銆?/span>
Exception in thread "main" java.lang.ClassCastException: Cat cannot be cast to Dog
at ClassCastExceptionTest.main(ClassCastExceptionTest.java:13)
2銆?nbsp;涓嶅悓classloader鍔犺澆鐩稿悓綾誨瀷綾諱箣闂寸殑杞崲
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
public class ClassCastExceptionTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
File file = new File(Thread.currentThread().getContextClassLoader().getResource("").getPath());
URL[] urls = {file.toURL()};
URLClassLoader classloader1 = new URLClassLoader(urls, ClassLoader.getSystemClassLoader().getParent());
Class classloader1Animal1 = classloader1.loadClass("Dog");
Dog dog1 = (Dog)classloader1Animal1.newInstance();
URLClassLoader classloader2 = new URLClassLoader(urls, ClassLoader.getSystemClassLoader().getParent());
Class classloader1Animal2 = classloader1.loadClass("Dog");
Dog dog2 = (Dog)classloader1Animal1.newInstance();
dog1 = dog2;
}
}
浠g爜涓垜浠湅鍒?/span>dog1=dog2錛岃繖鏍瘋祴鍊兼槸浼氭姏寮傚父鐨勩?/span>
Exception in thread "main" java.lang.ClassCastException: Dog cannot be cast to Dog
at ClassCastExceptionTest.main(ClassCastExceptionTest.java:17)
浠ュ悗澶у閬囧埌classCastException鐨勬椂鍊欒娉ㄦ剰浜嗭紝涓嶄竴瀹氭槸寮哄埗綾誨瀷杞崲瀵艱嚧鐨勶紝涔熸湁鍙兘涓嶅悓鐨?/span>classloader鍔犺澆浜嗙浉鍚岀殑綾伙紝鐒跺悗榪欎釜綾諱笉鍚岀殑瀹炰緥榪涜璧嬪箋?/span>