35_张孝祥Java高新技术_为注解增加各种属性
注解的作用之所以那么强大,就是因为它有属性
- 注解很像接口,属性很像方法.
- 什么是注解的属性
- 一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是传智播客的学生,否则,就不是。如果还想区分出事传智播客
哪个班的学生,这个时候可以为胸牌在增加一个属性进行区分。加了属性的标记效果为:@MyAnnotation(color=”red”)
- 定义基本类型的属性和应用属性:
- 在注解类中增加String color();//实际上默认是像接口一样,是 public final的
- @MyAnnotation(color=”red”)
- 用反射方式获得注解对应的实例对象后,再通过该对象调用属性对应的方法
MyAnnotation a=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class); System.out.println(a.color());
可以认为上面这个@MyAnnotation是MyAnnotation类的一个实例对象.
- 为属性指定缺省值
- String color() default “yellow”;
- value属性:
- String value() default “zxx”;
- 如果注解中有一个名称为value的属性,且你只想设置value属性(即其他属性都采用默认值或者)
- 一个注解定义的案例:
package com.itcast.day2; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import com.itcast.day1.EnumTest; /**
* 定义注解
* @author liujl
*
*/ //Retention默认为class阶段,注解MyAnnotation的生命周期为运行阶段
@Retention(RetentionPolicy.RUNTIME) //默认值为任何元素,若在数组里只填写METHOD则使用注解的类编译报错
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface MyAnnotation {
String value();//牛逼的名称,居然可以在@时默认不写名字
String color() default "blue"; //String类型
int[] arrayAttr() default {1,2,3};//数组类型
Class clazz() default java.lang.String.class;//字节码
EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.GREEN;
MetaAnnotation metaAnnotation() default @MetaAnnotation("test"); } /**
* Rentention
* 关于java程序的三个阶段
* source阶段: .java--->编译--->.class
* class阶段: .class-->进入jvm检查阶段--->字节码
* runtime阶段: 已经通过安全检查--被调入内存,被视为字节码
*
*/
package com.itcast.day2; import com.itcast.day1.EnumTest;
/**
* 使用注解MyAnnotation
* @author hp
*
*/
@MyAnnotation(value="123",color="456",arrayAttr=333,clazz=java.lang.Integer.class,lamp=EnumTest.TrafficLamp.RED,metaAnnotation=@MetaAnnotation("334455"))
public class MyAnnotationTest {
}
package com.itcast.day2;
/**
* 用反射的方式得到注解,并打印其属性
* @author liujl
*
*/
public class MyAnnotationTestRun {
public static void main(String[] args) {
if(MyAnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation MyAnnotation=MyAnnotationTest.class.getAnnotation(MyAnnotation.class);
//value很牛逼,如果注解中只有它时可以省略名称-value,而直接填值"xxx"
System.out.println(MyAnnotation.value());
System.out.println(MyAnnotation.color());//String
System.out.println(MyAnnotation.clazz().getName());//字节码
System.out.println(MyAnnotation.arrayAttr()[0]);//数组
System.out.println(MyAnnotation.lamp().nextLamp());//枚举 红灯下一盏是绿灯
System.out.println(MyAnnotation.metaAnnotation().value());//注解 注解的属性也是一个注解 @代表"实例化"一个注解 }
}
}
/**
运行结果:
123
456
java.lang.Integer
333
GREEN : 45
334455
*/
package com.itcast.day1; /**
* 注解 MyAnnotation用到的枚举类型
* @author liujl
*
*/
public class EnumTest { public enum TrafficLamp{ //RED,GREEN,YELLOW这些元素都是枚举TrafficLame的子类的实例
RED(30){//内部类
@Override
public TrafficLamp nextLamp() {//实现抽象方法
return GREEN;
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(5)/*调用YELLOW子类有参数构造,子类.super(5)调用了父类TrafficLamp的有参构造*/{
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
private int time;
public abstract TrafficLamp nextLamp();//抽象方法
private TrafficLamp(int time){this.time=time;}//构造方法要私有化 @Override
public String toString() {
return this==RED?"RED : "+this.time:this==GREEN?"GREEN : "+this.time:"YELLOW : "+this.time;
}
}
}
Java Language and Virtual Machine Specifications ( Java语言和虚拟机说明书)http://docs.oracle.com/javase/specs/index.html
java1.5说明书 http://docs.oracle.com/javase/specs/jls/se5.0/html/j3TOC.html
打开后,搜索 Annotation Types ,就可以知道关于注解的详细介绍。
35_张孝祥Java高新技术_为注解增加各种属性的更多相关文章
- 张孝祥Java高新技术汇总
一.自动装箱和拆箱: 在Java中有8种基本数据类型:byte,short,int,long,float,double,char,boolean.而基本数据类型不是对象,这时人们给他们定义了包装类,使 ...
- 张孝祥java高新技术 --- jkd1.5 新特性 -- 精华总结
1. 抽象方法的使用 如果一个方法中大量出现if语句, 那么, 就应该考虑使用抽象来处理. 如下例: package com.lxl; public class Weekend { //周日 publ ...
- 张孝祥java高新技术 --- jkd1.5 新特性
1. 静态导入 import static java.lang.Math.max; 2. 可变参数 3. 自动装箱,拆箱 4. 枚举
- Java核心_内省
Java核心_内省 查看java的api,发现有一个包java.bean咦,这个包是干什么的呢,原来,它是用来操作JavaBean对象的! 一.内省操作①JavaBean:一种特殊的Java类无参构造 ...
- Java高新技术 注解
Java高新技术 注解 知识概要: (1)了解注解 (2)注解的应用结构图 (3)@Retention(RetentionPolicy.RUNTIME) ...
- 黑马程序员——【Java高新技术】——JavaBean、注解
---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在J ...
- Java学习_注解
使用注解 注解是放在Java源码的类.方法.字段.参数前的一种特殊"注释". 1 // this is a component: 2 @Resource("hello&q ...
- Java高新技术 Myeclipse 介绍
Java高新技术 Myeclipse 介绍 知识概述: (1)Myeclipse开发工具介绍 (2)Myeclipse常用开发步骤详解 ...
- 传智播客张孝祥java邮件开发随笔01
01_传智播客张孝祥java邮件开发_课程价值与目标介绍 02_传智播客张孝祥java邮件开发_邮件方面的基本常识 03_传智播客张孝祥java邮件开发_手工体验smtp和pop3协议 第3课时 关于 ...
随机推荐
- CRM项目测试第一天
经过前几天代码的修改,界面的完善.主要的功能都实现了!今天主要是交换各组的项目,互相来测试,找bug. 在互相测试的过程,我听见有一组应该算是讨论的比价激烈的!我们组我们自己找到了bug,但是测试我们 ...
- Spring事务内方法调用自身事务 增强的三种方式
ServiceA.java文件: 查看Spring Tx的相关日志: 可以看到只创建了一个事物ServiceA.service方法的事务,但是callSelf方法却没有被事务增强; 分析原因:Spr ...
- 基于C++ Qt实现的红色警戒3修改器
前言 这部修改器制作有一段时间了,但是一直没出教程.今天利用周末空闲写篇教程,给后来者指路的同时也加深自己对游戏修改器的理解,大佬就随便看看吧 浏览了一下网络,形形色色的单机游戏修改器教程,但是基本只 ...
- es6学习笔记7--Set
Set 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, ...
- POJ 2262 Goldbach's Conjecture (打表)
题目链接: https://cn.vjudge.net/problem/POJ-2262 题目描述: In 1742, Christian Goldbach, a German amateur mat ...
- 计算文章作品发布时间的php代码
/* 计算发布时间据当前时间 如1秒前 1分钟前 1小时 1天 1个星期 1个人月 1年 */ function format_dates($time) { if($time <= 0) ret ...
- GCD之后台程序运行
点击Home键进入后台时进行计时,直到从新启动,超过三分钟启动手势 // // AppDelegate.m // GCDDown // // Created by City--Online on 15 ...
- [转]csv文件导入Mysql
本文转自:https://blog.csdn.net/quiet_girl/article/details/71436108 本篇博客主要讲将csv文件导入Mysql的方法(使用命令行). Step1 ...
- 【MongoDB-query查询条件】
在上一篇中简要使用了C# 对MongoDB进行数据操作,这里补充一些MongoDB query查询条件文档: Query.All("name", "a",&qu ...
- ADO.NET 【类库】【与数据库的连接】
ADO.NET是什么,有什么用 数据库访问技术 ado.net可让开发人员以一致的方式存取资料来源, 资料共用的消费者应用程序可使用ado.net 来连接至这些资料来源,并且撷取.处理及更新其中所含的 ...