[JAVA学习1]注解
来源:互联网 发布:国家数据统计 编辑:程序博客网 时间:2024/06/04 00:55
一个多月没写了,app开发告一段落,已经提交到appstore,但还在审核。
昨天刚刚接触当今最热门的语言java。没办法,不想学这个,公司偏偏又用这个。不过2天下来,觉得还挺有意思的,好多语法都是没见过的。
今天简单练习了注解,不出意外,这个月都得折腾java了。
环境先说下:
MacBook Pro 版本10.11.6
java version "1.8.0_101"
Eclipse Java EE IDE for Web Developers.
Version: Luna Service Release 2 (4.4.2)
不知道是不是最新的,不管了,就它了。
第一步:新建自定义注解
/*
* 测试注解
* 1:@interface自定义注解,里面的是属性,不是接口的方法,但属性后面得加()
* 2:所有的Annotation自动继承java.lang.annotation接口
* 3:自定义注释的成员变量访问类型只能是public、default;
*/
package annotationTest;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
@Documented//出现在javadoc中
@Target({ElementType.METHOD,ElementType.TYPE})//方法和类的注解
@Retention(RetentionPolicy.RUNTIME)//能反射读取
public @interface sayHello {
public String name() default "Hello";
}
第二步:解析自定义注解
package annotationTest;
import java.lang.reflect.Method;
import annotationTest.sayHello;
public class parseAnnotation {
//注意1:这里的参数里面的Class类型要大写,而且后面的类型不能省,否则警告
public static void parseMethod(Class<? extends Object> C) {
for (Method M: C.getDeclaredMethods()) {
if (M.isAnnotationPresent(sayHello.class)) {//如果有sayHello的注解
sayHello s = M.getAnnotation(sayHello.class);
System.out.println(s.name());//打印
}
}
}
public static void parseClass(Class<? extends Object> C) {
if (C.isAnnotationPresent(sayHello.class)) {//如果有sayHello的注解
sayHello s = C.getAnnotation(sayHello.class);
System.out.println(s.name());//打印
}
}
}
第三步:测试自定义注解
/*相关说明
* @Target:指定程序元定义的注释所使用的地方
* public enum ElementType {
TYPE, // 指定适用点为 class, interface, enum
FIELD, // 指定适用点为 field
METHOD, // 指定适用点为 method
PARAMETER, // 指定适用点为 method 的 parameter
CONSTRUCTOR, // 指定适用点为 constructor
LOCAL_VARIABLE, // 指定使用点为 局部变量
ANNOTATION_TYPE, //指定适用点为 annotation 类型
PACKAGE // 指定适用点为 package
}
*@Retention
*public enum RetentionPolicy {
SOURCE, // 编译器处理完Annotation后不存储在class中
CLASS, // 编译器把Annotation存储在class中,这是默认值
RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要
}
*@Documented:是一个标记注释,表示注释应该出现在类的javadoc中
*@Inherited:如果一个方法使用了的注释用了@inherited,那么其子类的该方法同样继承了该注释
*/
package annotationTest;
import annotationTest.sayHello;
import annotationTest.parseAnnotation;
@sayHello(name="Class hello world")
public class TestAnnotation {
@sayHello(name="Method hello world")
public void showHello(){
}
public static void main(String[] args) {
parseAnnotation.parseMethod(TestAnnotation.class);
parseAnnotation.parseClass(TestAnnotation.class);
}
}
正确输出:
Method hello world
Class hello world
我只是简单的写了下,有个大概印象,具体推荐:
http://blog.csdn.net/liuwenbo0920/article/details/7290586/
昨天刚刚接触当今最热门的语言java。没办法,不想学这个,公司偏偏又用这个。不过2天下来,觉得还挺有意思的,好多语法都是没见过的。
今天简单练习了注解,不出意外,这个月都得折腾java了。
环境先说下:
MacBook Pro 版本10.11.6
java version "1.8.0_101"
Eclipse Java EE IDE for Web Developers.
Version: Luna Service Release 2 (4.4.2)
不知道是不是最新的,不管了,就它了。
第一步:新建自定义注解
/*
* 测试注解
* 1:@interface自定义注解,里面的是属性,不是接口的方法,但属性后面得加()
* 2:所有的Annotation自动继承java.lang.annotation接口
* 3:自定义注释的成员变量访问类型只能是public、default;
*/
package annotationTest;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
@Documented//出现在javadoc中
@Target({ElementType.METHOD,ElementType.TYPE})//方法和类的注解
@Retention(RetentionPolicy.RUNTIME)//能反射读取
public @interface sayHello {
public String name() default "Hello";
}
第二步:解析自定义注解
package annotationTest;
import java.lang.reflect.Method;
import annotationTest.sayHello;
public class parseAnnotation {
//注意1:这里的参数里面的Class类型要大写,而且后面的类型不能省,否则警告
public static void parseMethod(Class<? extends Object> C) {
for (Method M: C.getDeclaredMethods()) {
if (M.isAnnotationPresent(sayHello.class)) {//如果有sayHello的注解
sayHello s = M.getAnnotation(sayHello.class);
System.out.println(s.name());//打印
}
}
}
public static void parseClass(Class<? extends Object> C) {
if (C.isAnnotationPresent(sayHello.class)) {//如果有sayHello的注解
sayHello s = C.getAnnotation(sayHello.class);
System.out.println(s.name());//打印
}
}
}
第三步:测试自定义注解
/*相关说明
* @Target:指定程序元定义的注释所使用的地方
* public enum ElementType {
TYPE, // 指定适用点为 class, interface, enum
FIELD, // 指定适用点为 field
METHOD, // 指定适用点为 method
PARAMETER, // 指定适用点为 method 的 parameter
CONSTRUCTOR, // 指定适用点为 constructor
LOCAL_VARIABLE, // 指定使用点为 局部变量
ANNOTATION_TYPE, //指定适用点为 annotation 类型
PACKAGE // 指定适用点为 package
}
*@Retention
*public enum RetentionPolicy {
SOURCE, // 编译器处理完Annotation后不存储在class中
CLASS, // 编译器把Annotation存储在class中,这是默认值
RUNTIME // 编译器把Annotation存储在class中,可以由虚拟机读取,反射需要
}
*@Documented:是一个标记注释,表示注释应该出现在类的javadoc中
*@Inherited:如果一个方法使用了的注释用了@inherited,那么其子类的该方法同样继承了该注释
*/
package annotationTest;
import annotationTest.sayHello;
import annotationTest.parseAnnotation;
@sayHello(name="Class hello world")
public class TestAnnotation {
@sayHello(name="Method hello world")
public void showHello(){
}
public static void main(String[] args) {
parseAnnotation.parseMethod(TestAnnotation.class);
parseAnnotation.parseClass(TestAnnotation.class);
}
}
正确输出:
Method hello world
Class hello world
我只是简单的写了下,有个大概印象,具体推荐:
http://blog.csdn.net/liuwenbo0920/article/details/7290586/
0 0
- [JAVA学习1]注解
- java注解学习1,了解和入门注解的应用
- Java 注解学习
- java 注解的学习
- java 注解 学习
- java 注解 学习
- java注解学习
- Java 注解学习笔记
- Java 注解学习笔记
- java基础学习-注解
- java注解初步学习
- JAVA 注解深入学习
- java注解再学习
- JAVA注解学习
- java注解学习笔记
- java注解学习
- java注解的学习
- java自定义注解学习
- MySQL通过sql语句获取当前日期|时间|时间戳
- RabbitMQ 实战教程(一)
- nginx: [warn] conflicting server name "localhost" on 0.0.0.0:80, ignored
- JavaScript基础入门 封装DOM 连缀
- CNN的发展史
- [JAVA学习1]注解
- spring封装hbase的代码实现
- Grub2加密
- python 定时任务去检测服务器端口是否通
- 栈和队列面试题
- XML文件各种操作--源码
- 统计学习方法——感知机(perceptron)
- android 内存管理几篇文章
- Java多线程之并发协作生产者消费者设计模式