【黑马程序员】java基础加强-------注解(annotation)
2013-12-03 22:23
501 查看
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
一、注解的定义
定义: 注解(Annotation)是一种标记性的接口,注解是Java的一个新的类型(与接口很相似),它与类(Class)、接口(interface)、枚举(enum)是在同一个层次,注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记。我们可以定义注解、声明注解、获得注解,并且根据获得的注解做相应的处理,许多框架都大量应用了注解。
二、简单的注解
1、@supperessWarnings("deprecation") //告诉编译器该方法我已经知道已经过时了
2、@Deprecated //此注解注明该方法过时,提示程序员该方法过时
3、@Overide //表示该方法是覆盖父类的方法
这种标记可以应用在:包上、类上、字段上、方法上、方法参数上、局部变量上面
三、注解类的应用结构图
自己定义一个注解;
1、什么是注解的属性?
理解:一个注解相当于一个胸牌,如果你胸前有胸牌,就是传智播客的学生,否则就不是。
如果还想区分是传智播客哪个班的学生,这时可以在胸牌上增加一个属性加以区分。
例:@MyAnnotation(color="red")
2、定义基本类型的属性:
3、用反射的方式获取注解的实例对象后,在通过该对象调用属性对应的方法
例:
例:string color() difaule"yellow";
5、value属性,如果注解中有一个value的属性,且只想设置value属性(其他属性都采用默认值)
例:string vaule();
6、数组类型的属性
注意:如果数组类型的属性中只有一个元素,这时属性值部分可以省略大括号
五、注解的存在的3个阶段
@Retention(Retrntionpolicy.RUNTIME) 表示将注解保留到内存中的字节码阶段
@Retention(Retrntionpolicy.CLASS) 表示将注解保留到编译阶段
@Retention(Retrntionpolicy.SOUTCE) 表示将注解保留到java源文件阶段
Target元注解,默认值为任何元素:
. @Target(ElementType.[type])
[type]={METHOD, FIELD, TYPE(类、接口、枚举声明), CONSTRUCTOR, LOCAL_VARIABLE,PARAMETER}
代码练习:
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
----------------------
一、注解的定义
定义: 注解(Annotation)是一种标记性的接口,注解是Java的一个新的类型(与接口很相似),它与类(Class)、接口(interface)、枚举(enum)是在同一个层次,注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记。我们可以定义注解、声明注解、获得注解,并且根据获得的注解做相应的处理,许多框架都大量应用了注解。
二、简单的注解
1、@supperessWarnings("deprecation") //告诉编译器该方法我已经知道已经过时了
2、@Deprecated //此注解注明该方法过时,提示程序员该方法过时
3、@Overide //表示该方法是覆盖父类的方法
这种标记可以应用在:包上、类上、字段上、方法上、方法参数上、局部变量上面
三、注解类的应用结构图
自己定义一个注解;
//自定义一个注解类。 public @interface itcastAnnotation { String color() default "yellow"; String value(); }
//这一个是一个应用”注解类“的类 import java.lang.annotation.Annotation; @itcastAnnotation public class AnnotationTest { public static void main(String[] args) { } }四、为注解增加各种属性
1、什么是注解的属性?
理解:一个注解相当于一个胸牌,如果你胸前有胸牌,就是传智播客的学生,否则就不是。
如果还想区分是传智播客哪个班的学生,这时可以在胸牌上增加一个属性加以区分。
例:@MyAnnotation(color="red")
2、定义基本类型的属性:
//自定义一个注解类。 public @interface itcastAnnotation { //增加属性,可以有可以没有默认值 String color() default "yellow"; String value(); }在应用中,可以为注解类中的属性设置属性值
//这一个是一个注解类,可以在小括号内设置属性值 @itcastAnnotation(annotation=@MetaAnnotation("物联云"),color="red",value="hcs",arrayAttr={60,80,90})
3、用反射的方式获取注解的实例对象后,在通过该对象调用属性对应的方法
例:
@itcastAnnotation(annotation=@MetaAnnotation("物联云"),color="red",value="hcs",arrayAttr={60,80,90}) public class AnnotationTest { public static void main(String[] args) { // TODO Auto-generated method stub System.runFinalizersOnExit(true); if(AnnotationTest.class.isAnnotationPresent(itcastAnnotation.class)) { //通过反射获取注解对象 itcastAnnotation annotation=(itcastAnnotation)AnnotationTest.class.getAnnotation(itcastAnnotation.class); //也可以认为上面的@MyAnnotation是MyAnnotation类的实例对象 System.out.println("打印注解:"+annotation);4、可以为注解类中的属性指定默认值
例:string color() difaule"yellow";
5、value属性,如果注解中有一个value的属性,且只想设置value属性(其他属性都采用默认值)
例:string vaule();
应用中:可以省略value= 比如:@itcastAnnotation("lili")
6、数组类型的属性
注意:如果数组类型的属性中只有一个元素,这时属性值部分可以省略大括号
public @interface itcastAnnotation { int [] array1() default{2,4,5} int[] array2() default{2} } //这一个是一个应用”注解类“的类 import java.lang.annotation.Annotation; @itcastAnnotation(array1={3,4,5},array=8)//设置属性值 public class AnnotationTest { public static void main(String[] args) {} }7、枚举类型的实现:
注解类中属性:EnumTest.TrafficLamp lamp(); 在应用中:@MyAnnotation(lampEnumTest.TrafficLamp.GREEN)
五、注解的存在的3个阶段
@Retention(Retrntionpolicy.RUNTIME) 表示将注解保留到内存中的字节码阶段
@Retention(Retrntionpolicy.CLASS) 表示将注解保留到编译阶段
@Retention(Retrntionpolicy.SOUTCE) 表示将注解保留到java源文件阶段
Target元注解,默认值为任何元素:
. @Target(ElementType.[type])
[type]={METHOD, FIELD, TYPE(类、接口、枚举声明), CONSTRUCTOR, LOCAL_VARIABLE,PARAMETER}
代码练习:
package cn.itcast.day2;
import java.lang.annotation.Annotation;
//这一个是一个注解类,可以在小括号内设置属性值 @itcastAnnotation(annotation=@MetaAnnotation("物联云"),color="red",value="hcs",arrayAttr={60,80,90})
public class AnnotationTest {
/**
* @param args
*/
//表示类中的过时方法我已经知道
@SuppressWarnings("Deprecation")
public static void main(String[] args) {
// TODO Auto-generated method stub
System.runFinalizersOnExit(true);
if(AnnotationTest.class.isAnnotationPresent(itcastAnnotation.class))
{
//通过反射获取注解对象
itcastAnnotation annotation=(itcastAnnotation)AnnotationTest.class.getAnnotation(itcastAnnotation.class);
System.out.println("打印注解:"+annotation);
System.out.println("以下是annotation注解的属性值:");
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
System.out.println(annotation.lamp().nextLamp().name());
//注解属性=注解,的属性值调用
System.out.println(annotation.annotation().value());
}
}
@Deprecated//此注解表示,以下方法已经过时
public static void sayHolle(){
System.out.println("你好,黑马");
}
}
package cn.itcast.day2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import cn.itcast.day1.EnumTest;
//@Target(ElementType.METHOD)//表示将注解类保留到方法上
@Target({ElementType.METHOD,ElementType.TYPE})//表示带注解类可以应用在调用者类中的方法上
@Retention(RetentionPolicy.RUNTIME)//注解上还有注解:称为:元注解;表示将注解类保留到:内存中的字节码阶段
//自定义一个注解类。
public @interface itcastAnnotation {
String color() default "yellow";
String value();
int[] arrayAttr() default {1,2,3};//注解的属性是数组类型
EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;//注解的属性是枚举类型
//注解的属性对应一个注解
MetaAnnotation annotation() default @MetaAnnotation("黑马云");//注解的属性是一个注解
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流!
----------------------
相关文章推荐
- 【黑马程序员】java基础加强_注解
- 黑马程序员-JAVA基础加强-内省与注解
- 黑马程序员---java基础加强---jdk1.5新特性之注解
- Java基础加强总结(一)——注解(Annotation)
- 黑马程序员:基础加强(可变参数、增强for、枚举、javabBean、BeanUtils、注解、泛型)
- 黑马程序员----java基础加强 注解与泛型
- Java基础加强总结(一)——注解(Annotation)
- Java基础加强总结(一)——注解(Annotation)
- java基础加强-注解(Annotation)
- 黑马程序员—Java基础加强(注解)
- Java基础加强总结(一)——注解(Annotation)
- 黑马程序员_java_基础加强_静态导入_反射_枚举_注解_内省_泛型
- 黑马程序员-java基础加强-JDK1.5新特性注解
- Java基础加强总结(一)——注解(Annotation)
- Java基础加强总结--注解(Annotation)
- 黑马程序员_Java基础加强第二天——Annotation
- 黑马程序员--Java基础加强(4)--- JDK1.5新特性之JavaBean、注解
- Java基础加强---Annotation(注解)
- 黑马程序员---<<基础加强---1.5新特性(中)(注解(Annotation))>>
- Java基础加强总结(一)——注解(Annotation)