#chiroito ’s blog

Java を中心とした趣味の技術について

実行環境に同じクラスが複数あるとどうなるのか

概要

 Javaの実行環境で同一のクラスが他のJARファイルにあるとどの様な挙動をするのかを確認してみます。

環境

  • Java SE Development Kit (JDK) 6 Update 29

検証

 まずは同じクラスファイルを含むjarファイルtest1.jarとtest2.jarを作成します。各jarに入るクラスファイルはほぼ同一でreturnする値が異なるだけとなっています。ここではjarを生成する方法は割愛しますが、それぞれのクラスファイルを含むjarファイルを生成します。

test1.jarに入れるクラスファイルのソース

package com.chirokings;

public class Test {
public int testMethod(){
return 1;
}
}
test2.jarに入れるクラスファイルのソース

package com.chirokings;

public class Test {
public int testMethod(){
return 2;
}
}
 次にjarに含まれているTestクラスを使用するクラスを作成します。

Testクラスを使用するクラス

package com.chirokings;

public class TestRun {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.testMethod());
}
}
 クラスパスの指定の仕方で2通りの結果になります。同じクラスが複数あっても特にエラーとはならずに実行できることが確認できます。

W:\bin>java -classpath .;..\test1.jar;..\test2.jar com.chirokings.TestRun
1
W:\bin>java -classpath .;..\test2.jar;..\test1.jar com.chirokings.TestRun
2