Class#forNameはファイルシステムが大文字小文字の区別をしない場合にNoClassDefFoundErrorを投げることがある
タイトルのとおり。
通常、Class#forNameでクラスが見つからない場合はClassNotFoundExceptionが発生するが、
Windows上では以下のJUnitのテストコードのような挙動を示す。
package test; import org.junit.Test; public class TestMain { @Test public void test1() throws ClassNotFoundException { Class.forName("test.TestMain");// このクラスを呼び出す } @Test public void test2() throws ClassNotFoundException { Class.forName("java.lang.Thread");// rt.jarに入っているクラスを呼び出す } @Test(expected = ClassNotFoundException.class) public void test3() throws ClassNotFoundException { Class.forName("java.lang.thread");// rt.jarに入ってるクラスの大文字小文字の間違い } @Test(expected = NoClassDefFoundError.class) public void test4() throws ClassNotFoundException { Class.forName("test.testmain");// このクラスの大文字小文字の間違い } }
まーじーかー・・・・・・
JVMのバグじゃないの?
Java 1.8.0_92