【java开发系列】—— 自定义注解

  之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings?

  原来这是java特有的特性,注解!

  那么什么是注解呢?

  注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类。

  注解都是什么呢?看下面这张图就明白了!

  上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解

  

  这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错,如果类型不符,是没有办法进行覆盖的。

  而Deprecated注解,除了多个删除线,并没有什么拦截功能。

  上面的测试,也仅仅是针对IDE,如果是利用javac,应该会有提示的。

  其他的不多说了,标准元注解 都是干嘛的呢?

  @Documented 标记生成javadoc

  @Inherited 标记继承关系

  @Retention 注解的生存期

  @Target 标注的目标

  

下面我们自己做一个注解!

  首先声明一个接口,并未它添加注解内容!

 1 package testAnnotation;
 2
 3 import java.lang.annotation.Documented;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6
 7 @Documented
 8 @Retention(RetentionPolicy.RUNTIME)
 9 public @interface Person{
10     String name();
11     int age();
12 }

  然后利用反射机制查看类的注解内容

 1 package testAnnotation;
 2
 3 @Person(name="xingoo",age=25)
 4 public class test3 {
 5     public static void print(Class c){
 6         System.out.println(c.getName());
 7
 8         //java.lang.Class的getAnnotation方法,如果有注解,则返回注解。否则返回null
 9         Person person = (Person)c.getAnnotation(Person.class);
10
11         if(person != null){
12             System.out.println("name:"+person.name()+" age:"+person.age());
13         }else{
14             System.out.println("person unknown!");
15         }
16     }
17     public static void main(String[] args){
18         test3.print(test3.class);
19     }
20 }

  运行结果,读取到了注解的内容

testAnnotation.test3
name:xingoo age:25
时间: 2024-10-16 16:34:28

【java开发系列】—— 自定义注解的相关文章

【java开发系列】—— 自定义注解(转)

之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类. 注解都是什么呢?看下面这张图就明白了! 上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解 这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错

Java中的自定义注解

自定义注解的语法要求 定义自定义注解的关键字为@interface 成员以无参无异常方式声明,可以给成员指定一个默认值(default):成员的类型是受限制的,合法的类型有基本数据类型及String,Class,Annotation,Enumeration;如果注解只有一个成员,则必须取名为value(),使用时可以忽略成员名和"=" 注解类可以没有成员,此时称为标识注解 _________________________________________________________

Java反射与自定义注解

反射,在Java常用框架中屡见不鲜.它存在于java.lang.reflact包中,就我的认识,它可以拿到类的字段和方法,及构造方法,还可以生成对象实例等.对深入的机制我暂时还不了解,本篇文章着重在使用方面,并附上一个本人应用到项目中的案例. 基础姿势 拿到类,反射是以类为基础的基础,首先拿到项目中的类,既可以这样拿 Class<?> clazz = Class.forName(类路径); 也可以这样拿 Class<?> clazz = 类名.getClass(); 在一般意义的J

【java开发系列】—— JDK安装

前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行java开发,是要使用JDK的,它是专门给开发人员使用的API工具包,编译器,JRE等等.而JRE是java相关的应用程序运行时所需要的环境,所以相对于JDK来说,提供的东西要少一些. 比如,我们进行开发时,要去JDK的路径下寻找相应的jar包或者lib使用它其中的函数.而我们使用的eclipse本身

【java开发系列】—— 集合使用方法

前言 在java中提供给我们了一些类似C++泛型的简单集合,list,set,map等.这里,简单介绍一下这些集合容器的使用方法,以及复杂对象元素的自定义排序. 首先看一下集合的框架图: 由于collection也继承了Iterator和comparable接口,因此我们可以使用Iterator来遍历元素,也可以通过自定义compareTo函数来重新编写自己的排序. List 1 package testCollection; 2 3 import java.util.ArrayList; 4

【java开发系列】—— struts2简单入门示例

前言 最近正好有时间总结一下,过去的知识历程,虽说东西都是入门级的,高手肯定是不屑一顾了,但是对于初次涉猎的小白们,还是可以提供点参考的. struts2其实就是为我们封装了servlet,简化了jsp跳转的复杂操作,并且提供了易于编写的标签,可以快速开发view层的代码. 过去,我们用jsp和servlet搭配,实现展现时,大体的过程是: 1 jsp触发action 2 servlet接受action,交给后台class处理 3 后台class跳转到其他的jsp,实现数据展现 现在有了stru

【java开发系列】—— JAVA面试题(1)

今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还有多线程的实现方式!下面基本都有. 另外还问了,观察者模式,设计模式,我一点不会,看来要下功夫了! 1.  面向对象编程的三大特性是什么,请简要阐述 (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 承了原始类的特性,新类称为原始类

【java开发系列】—— Tomcat编译报错

由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及两个版本的Eclipse IDE 3.5和4.0+. 当我启动开发环境后,想要向server中添加应用,发现报错: There are no resources that can be added or removed from the server. 我之前好用的应用怎么回不好使呢.于是删除ser

【java开发系列】—— 深克隆和浅克隆

Java支持我们对一个对象进行克隆,通常用在装饰模式和原型模式中.那么什么是深克隆,什么是浅克隆呢. [浅克隆],通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用的. [深克隆],克隆的时候会复制它的子对象的引用,里面所有的变量和子对象都是又额外拷贝了一份. 下面的两个例子可以很好的说明他们的区别: 首先看一下类图 Husband类有一个对wife的引用,当进行浅克隆的时,wife变量都会指向同一个Wife:而进行深克隆时,会指向不同的Wife.下面进行一下验证: [浅克隆] 1 pu