初学Java,Annotation注释(三十八)

Annotation 注释,这个注释和写代码时解释代码在干什么那个注释完全不是一个东西,这里的注释是指代码中的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。 通过这些标记,可以在不改变原有逻辑的情况下,在源文件嵌入一些补充的信息。Annotation可用于修饰包,类,构造器, 方法,成员变量,参数,局部变量的声明。

其实Java中的Annotation和C#中的attribute是同一个东西,都是用来设置元数据用的,它们的区别只有少许几个地方

下面这个帖子讲的很好

http://rednaxelafx.iteye.com/blog/464889

Java中有3种内建的annotation,@Override(限定重写父类方法)、@Deprecated(标示已过时)、@SuppressWarningsAnnotation(抑制编译器警告)

自定义的annotation如以下格式,需要使用@interface关键字,要使用annotation需引用java.lang包

下面看一个使用annotation的例子

import java.lang.annotation.*; 
@Retention(RetentionPolicy.RUNTIME)    
@Target(ElementType.METHOD)
//定义一个标记注释,不包含任何成员变量,即不可传入元数据
public @interface Testable 
{
}

public class MyTest
{
	//使用@Testable标记注释指定该方法是可测试的
	@Testable
	public static void m1() 
	{
	}
	public static void m2() 
	{
	}   
	//使用@Testable标记注释指定该方法是可测试的
	@Testable
	public static void m3() 
	{        
		throw new RuntimeException("Boom");  
	}
	public static void m4()
	{
	}       
	//使用@Testable标记注释指定该方法是可测试的
	@Testable
	public static void m5()
	{
	}  
    public static void m6()
	{
	}
	//使用@Testable标记注释指定该方法是可测试的
	@Testable
	public static void m7()
	{            
		throw new RuntimeException("Crash");   
	}        
	public static void m8()
	{
	}
}
import java.lang.reflect.*;
public class TestProcessor
{
	public static void process(String clazz)
		throws ClassNotFoundException
	{
		int passed = 0;
		int failed = 0;
		//遍历obj对象的所有方法
		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.printf("方法" + m + "运行失败,异常:" + ex.getCause() + "\n");
					failed++; 
				}
			}
		}
		//统计测试结果
		System.out.printf("共运行了:" + (passed + failed)+ "个方法,其中:\n" + 
			"失败了:" + failed + "个,\n" +  
			"成功了:" + passed + "个!\n"); 
	}
}
主程序类

import java.lang.reflect.*; 
public class RunTests
{
	public static void main(String[] args) throws Exception 
	{
		//处理MyTest类
		TestProcessor.process("MyTest");
	}
}

其中m3和m7两个方法自己抛出异常,剩下两个空方法执行成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值