【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中@表示注解,解释一个方法,类,属性的作 ...
随机推荐
- salesforce 零基础开发入门学习(十)IDE便捷小知识
在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...
- iOS开发——网络实用技术OC篇&网络爬虫-使用青花瓷抓取网络数据
网络爬虫-使用青花瓷抓取网络数据 由于最近在研究网络爬虫相关技术,刚好看到一篇的的搬了过来! 望谅解..... 写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教 ...
- mysql-5.7.17-winx64免安装版,win10环境下安装配置
下载地址:http://dev.mysql.com/downloads/file/?id=467269 1.解压到自定义目录:我解压到了D盘的根目录 2.复制my-default.ini 重命名 my ...
- 3D touch在Unity3D中的使用
0.开篇: 3D touch随着iOS9发布,它并不是一个单独的技术,而是可以分为pressure sensitivity.quick action以及peek&pop.在官方的介绍中提到可以 ...
- TSql Top 用法
第一部分:TSql Top 有两种用法 1,限制查询结果集返回的行数或总行数的百分比. 当将 TOP 与 ORDER BY 子句结合使用时,结果集限制为前 N 个已排序行:否则,以未定义的顺序返回前 ...
- 分享10条Visual Studio 2012的开发使用技巧
使用Visual Studio 2012有一段时间了,并不是追赶潮流,而是被逼迫无可奈何.客户要求的ASP.NET MVC 4的项目,要用.NET 4.5来运行.经过一段时间的摸索,得到一点经验和体会 ...
- js对象、数组转换字符串
对象转换成字符串需要使用toString()方法. 1 var a = function(){ 2 console.log(111); 3 }; 4 var b = a.toString(); 5 c ...
- datagridview控件去除页码
开启datagridview的分页功能,默认页码是是显示的 为了不让页码显示,可以在绑定数据的是将其隐藏掉 gvLogName.BottomPagerRow.Visible = false; gvLo ...
- 基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用
在上篇<基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理>介绍了Bootstrap开发框架的一些基础性概括,包括总体界面效果,以及布局.菜单等内容, ...
- PHP面向对象中的重要知识点(一)
1. __construct: 内置构造函数,在对象被创建时自动调用.见如下代码: <?php class ConstructTest { private $arg1; private $arg ...