【Effective Java】10、java注解使用
package cn.xf.cp.ch02.item35; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
*
*功能:这个是我的注解
*时间:下午7:01:27
*文件:CutterPoint.java
*@author Administrator
*
*/ /**
*
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
*/
@Retention(RetentionPolicy.RUNTIME) //定义注解在JVM运行时保留
@Target(ElementType.METHOD) //注解作用在METHOD:用于描述方法
public @interface CutterPoint
{
public String myAnnotation() default "one cp";
}
测试注解类
package cn.xf.cp.ch02.item35; /**
*
*功能:这个类用来作为注解的测试类
*时间:下午7:21:34
*文件:Sample3.java
*@author Administrator
*
*/
public class Sample3
{
@CutterPoint
public void anoMethod()
{
System.out.println("使用注解来运行这个方法吧!!");
} @CutterPoint(myAnnotation="测试第二弹")
public void anoMethod2(String ttt)
{
System.out.println("参数是:" + ttt);
} public void noAno()
{
System.out.println("没有注解");
} @Test
public void testAno()
{
System.out.println("奇怪的注解");
}
}
解析注解:
package cn.xf.cp.ch02.item35; import java.lang.reflect.Method; public class CpRun
{
@org.junit.Test
public void anoCp()
{
try
{
//获取要进行注解解析的类
Class<?> sample = Class.forName("cn.xf.cp.ch02.item35.Sample3");
//获取默认构造函数,getConstructor()括号中使参数类型,第二个newInstance括号中是参数
Object invokeCon = sample.getConstructor().newInstance(new Object[]{}); //类中定义的所有方法
Method sampleMethod[] = sample.getDeclaredMethods();
Method sampleOne; for(int i = 0; i < sampleMethod.length; ++i)
{
sampleOne = sampleMethod[i]; if(sampleOne.getAnnotations().length == 0)
{
System.out.println("*******************************************************************");
//没有注解
sampleOne.invoke(invokeCon);
System.out.println("*******************************************************************");
System.out.println("\n\n\n");
continue;
} if(!sampleOne.isAnnotationPresent(CutterPoint.class))
{
System.out.println("*******************************************************************");
//其他注解
//如果是这个注解
System.out.println(sampleOne.getName() + "方法:这里未注明注解,开始业务。。。。。。。");
//没有注解
sampleOne.invoke(invokeCon);
System.out.println("注解=" + sampleOne.getDeclaredAnnotations()[0].toString());
System.out.println(sampleOne.getName() + "方法:这里未注明注解,结束业务。。。。。。。");
System.out.println("*******************************************************************");
System.out.println("\n\n\n");
continue;
} if(sampleOne.getParameterTypes().length == 0)
{
System.out.println("*******************************************************************");
//没没有参数
//如果是这个注解
System.out.println(sampleOne.getName() + "方法:这里读出了CutterPoint注解,开始业务。。。。。。。");
//没有注解
sampleOne.invoke(invokeCon);
System.out.println("注解=" + sampleOne.getDeclaredAnnotations()[0].toString());
CutterPoint cp = (CutterPoint) sampleOne.getAnnotation(CutterPoint.class);
System.out.println("注解值:myAnnotation=" + cp.myAnnotation());
System.out.println(sampleOne.getName() + "方法:这里读出了CutterPoint注解,结束业务。。。。。。。");
System.out.println("*******************************************************************");
System.out.println("\n\n\n");
}
else
{
System.out.println("*******************************************************************");
//有一个参数的
//没没有参数
//如果是这个注解
System.out.println(sampleOne.getName() + "方法:这里读出了CutterPoint注解带参数,开始业务。。。。。。。");
//没有注解 sampleOne.invoke(invokeCon, new Object[]{"试一试反射调用方法"});
System.out.println("注解=" + sampleOne.getDeclaredAnnotations()[0].toString());
CutterPoint cp = (CutterPoint) sampleOne.getAnnotation(CutterPoint.class);
System.out.println("注解值:myAnnotation=" + cp.myAnnotation());
System.out.println(sampleOne.getName() + "方法:这里读出了CutterPoint注解带参数,结束业务。。。。。。。");
System.out.println("*******************************************************************");
System.out.println("\n\n\n");
}
} }
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:

【Effective Java】10、java注解使用的更多相关文章
- Java 10 - Java Character类
Java Character类 使用字符时,我们通常使用的是内置数据类型char. 实例 char ch = 'a'; // Unicode for uppercase Greek omega cha ...
- 【转】JAVA反射与注解
转载自:https://www.daidingkang.cc/2017/07/18/java-reflection-annotations/ 前言 现在在我们构建自己或公司的项目中,或多或少都会依赖几 ...
- Java学习:注解,反射,动态编译
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解 什么是注解 ? Annotat ...
- 【转载】JAVA基础:注解
原文:https://www.cnblogs.com/xdp-gacl/p/3622275.html#undefined 一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的 ...
- java注解学习(1)注解的作用和三个常用java内置注解
今天,记录一下自己学习的关于注解方面的知识. Annotation是从JDK5.0开始引入的新技术 Annotation的作用: -不是程序本身,可以对程序做出解释(这一点和注释没什么区别) -可以被 ...
- Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)
1. Annotation注解 1.1. Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annota ...
- Java中的注解及自定义注解你用的怎么样,能不能像我这样应用自如?
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- Java之Annotation(注解)——注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...
- java中的注解(Annotation)
转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到 ...
- java @param参数注解
注解,@param是参数的解释.如/***@param s 这里表示对s的文字说明,描述 */ public void aa(String s){}一般java中@表示注解,解释一个方法,类,属性的作 ...
随机推荐
- SQL Server 2012 数据库笔记
慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 1 ...
- Android中的Activity相关知识总结
一.什么是Activity? 简单理解:Activity是Android组件中最基本也是最为常见用的四大组件之一.是一个与用户交互的系统模块,一个Activity通常就是一个单独的屏幕(页面), 它上 ...
- Android切换动画之ViewPager
有过开发经验的程序员都知道这个效果,就是当我们第一次安装一个软件时有一个使用说明的图片切换效果,他是如何实现的呢?今天我们就一起学习一下吧,难度系数1.0,就是只要你仔细分析,都可以学会.废话不多说, ...
- Zepto中文API
原文地址:http://zeptojs.com/ 译文地址:http://www.html-5.cn/Manual/Zepto/ Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, ...
- 利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。
利用TreeView控件加载文件,必须遍历处所有的文件和文件夹. 深搜算法用到了递归. using System; using System.Collections.Generic; using Sy ...
- Web 开发人员和设计师必读文章推荐【系列三十】
<Web 前端开发精华文章推荐>2014年第9期(总第30期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】
<Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- 在Springmvc中获取properties属性
一些关键的属性一般都会拿出来作为配置,比如数据库连接等.在springmvc中也提供了获取property的类,比如@Value来获取.我接触spring很浅,基本上都是百度的问题解决方法,百度到@v ...
- HashMap的resize和Fail-Fast机制
1.HashMap的resize(rehash): 当HashMap中的元素越来越多的时候,hash冲突的几率也就越来越高,因为数组的长度是固定的.所以为了提高查询的效率,就要对HashMap的数组进 ...
- 基于HT for Web 快速搭建3D机房设备面板
以真实设备为模型,搭建出设备面板,并实时获取设备运行参数,显示在设备面板上,这相比于纯数值的设备监控系统显得更加生动直观.今天我们就在HT for Web的3D技术上完成设备面板的搭建. 我们今天模拟 ...