問題解決:java-反射-ClassNotFound報錯解決


 

1.在文件夾跑java RunTest.java 是OK的,進入到eclipse里面,同樣的代碼,會報錯ClassNotFound

public class RunTests
{
	public static void main(String[] args)
		throws Exception
	{
		// 處理MyTest類
		ProcessorTest.process("MyTest");
	}
}

package chapter14;

import java.lang.reflect.*;

public class TestProcessor
{
	public static void process(String clazz)
		throws ClassNotFoundException
	{
		int passed = 0;
		int failed = 0;
		// 遍歷clazz對應的類里的所有方法
		for (Method m : Class.forName(clazz).getMethods())
		{
			// 如果該方法使用了@Testable修飾
			if (m.isAnnotationPresent(Testable.class))
			{
				try
				{
					// 調用m方法
					m.invoke(null);
					// 測試成功,passed計數器加1
					passed++;
				}
				catch (Exception ex)
				{
					System.out.println("方法" + m + "運行失敗,異常:"
						+ ex.getCause());
					// 測試出現異常,failed計數器加1
					failed++;
				}
			}
		}
		// 統計測試結果
		System.out.println("共運行了:" + (passed + failed)
			+ "個方法,其中:\n" + "失敗了:" + failed + "個,\n"
			+ "成功了:" + passed + "個!");
	}
}
package chapter14;

public class MyTest {
	@Testable
	public static void m1(){}
	public static void m2(){}
	@Testable
	public static void m3(){
		throw new RuntimeException("Boom");
	}
	public static void m4(){}
	@Testable
	public static void m5(){}
	public static void m6(){}
	@Testable
	public static void m7(){
		throw new RuntimeException("Crash");
	}
	public static void m8(){}
}
package chapter14;

import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Testable {
	
	
}

  說我的MyTest不存在。搜了一下,是package的問題,className沒有寫全。

要在className前面加上packge:

package chapter14;

public class RunTests {
	public static void main(String[]args)
	throws Exception
	{
		TestProcessor.process("chapter14.MyTest");
	}
}

  

參考:

https://ask.csdn.net/questions/203230

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM