黑马程序员_注解
来源:互联网 发布:energy star软件 编辑:程序博客网 时间:2024/04/30 03:15
简介
注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。
Java定义的几个基本注解
@Deprecated
@FunctionalInterface Java SE 8新增
@Override
@SafeVarargs Java SE 7新增
@SuppressWarnings
元注解
用来注解其他注解的注解
@Retention
@Documented
@Target
@Inherited
@Repeatable Java SE 8新增
自定义注解
为注解添加基本属性
一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是传智播客的学生,否则,就不是。如果还想区分出是传智播客哪个班的学生,这时候可以为胸牌在增加一个属性来进行区分。加了属性的标记效果为:@MyAnnotation(color="red")
定义基本类型的属性和应用属性:
在注解类中增加String color();
@MyAnnotation(color="red")
用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法
MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(a.color());
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象
为属性指定缺省值:
String color() default "yellow";
value属性:
String value() default "zxx";
如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性),那么可以省略value=部分,例如:@MyAnnotation("lhm")。
为注解添加高级属性
数组类型的属性
int [] arrayAttr() default {1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
如果数组属性中只有一个元素,这时候属性值部分可以省略大括
枚举类型的属性
EnumTest.TrafficLamp lamp() ;
@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
注解类型的属性:
MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”) )
可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象,同样的道理,可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
MetaAnnotation ma = myAnnotation.annotationAttr();
System.out.println(ma.value());
注解的详细语法可以通过看java语言规范了解,即看java的language specification。
package cn.itcast.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import cn.itcast.introspect.User;
@interface Color {
String value();
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface MyAnnotation {
public abstract int age();
Class<User> c();
Color color();
Sex gender();
String[] interest();
String name();
public enum Sex {
MALE, FEMALE;
}
}
package cn.itcast.annotation;
import java.lang.reflect.Field;
import cn.itcast.annotation.MyAnnotation.Sex;
import cn.itcast.introspect.Address;
import cn.itcast.introspect.User;
/**
* 测试使用自定义注解。
*/
@MyAnnotation(age = 26, c = User.class, color = @Color("yellow"), gender = Sex.FEMALE,
interest = { "programming", "surfing", "music", "reading", "basketball" },
name = "jack")
public class AnnotationTest2 {
public static void main(String[] args) throws Exception {
MyAnnotation myAnnotation = AnnotationTest2.class.getAnnotation(MyAnnotation.class);
System.out.println("name: " + myAnnotation.name());
System.out.println("sex: " + myAnnotation.gender());
System.out.println("age: " + myAnnotation.age());
String[] interest = myAnnotation.interest();
System.out.print("interest: ");
for (String inte : interest) {
System.out.print(inte + " ");
}
System.out.println();
User user = new User("zhangsan", 25, new Address(123321, "Philly,USA"));
Field field = myAnnotation.c().getDeclaredField("name");
field.setAccessible(true);
System.out.println(field.get(user));
}
}
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_注解
- 黑马程序员_ 注解
- 黑马程序员_注解
- 黑马程序员_注解概述
- 黑马程序员_注解总结
- 黑马程序员-->13_注解@
- 黑马程序员_内省 注解
- 黑马程序员_注解、代理
- 黑马程序员_基础加强_注解
- easyui datagrid 键盘上下控制选中行示例
- [poj3356]字符串dp
- Protobuf在C/C++中的应用
- 传说中的数据结构
- 并查集(初始化为-1)
- 黑马程序员_注解
- OC属性总结
- 【POJ 3128】Leonardo's Notebook
- VIM配置大全
- 哈哈,第一个Java的大数HDU1002
- 空间花开缓缓打开放松放松
- 基本数据结构-队列的实现及其运用
- lower_bound和upper_bound
- 分的非的非沃尔夫斯的非