注意区分注释和注解,注释是给人看的,注解是给程序看的。

  注解的作用是代替配置文件,在servlet3.0中,就可以不再使用web.xml文件,而是所有配置都是用注解!比如注解类 @WebServlet ,可以在servlet3.0中使用这个注解,用来代替<servlet>的配置,然后Tomcat通过反射来读取注解中的信息。注解的作用目标:类,方法,构造器,参数,局部变量以及包

  注解也是一个类,所有注解的父类都是 Annotation,定义一个注解的语法:public @interface MyAnno{},注解也可以以后属性,定义语法为:注意定义属性的语法和类的属性语法结构有差别。当注解给出属性后,使用时必须为注解赋值。注解的属性可以有默认值,默认值可以不赋值,当使用注解时,如果只给名为value的属性赋值时,可以省略“value=”,用法如下:

 public @MyAnno{
int value;
String value1;
} public @MyAnno2{
String value default "hello world";
String value1;
} @MyAnno(value=100,value1="hello")
@MyAnno(value1="hello")
public class MyClass{ }

  注解的属性的类型:8种基本类型, String, Enum, Class, 注解类型以及以上类型的一维数组类型。

  注解作用目标的限定:在定义注解时,给注解添加注解,这个注解是@Target, 能够限定注解的作用目标。

 @Target(value={ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})//定义MyAnno1只能作用在类,方法和属性上
@interface MyAnno1 { }

  注解的保留策略:注解是只保留在源代码(SOURCE)上,还是保留到class文件上,再或者是类在运行时(JVM),可以被类加载器加载到内存中。使用@RetentionPolicy 指定注解的保留策略。值得注意的是,保留策略是运行中时,注解在源代码、字节码文件中存在,并且在JVM加载类时,会把注解加载到JVM内存中(它是唯一可反射注解!)。

 @Retention(RetentionPolicy.RUNTIME)
@interface MyAnno1 { }

  注解可以通过反射来读取:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface MyAnn {
String value() default "hello";
int value1() default 100;
} @MyAnn(value="hello world", value1=200)
public class MyClass {
private int a; @MyAnn("myMethod")
public void fun() {}
} public class Demo1 {
public static void main(String[] args) throws Exception {
Class clazz = MyClass.class;
MyAnn myAnn = (MyAnn) clazz.getAnnotation(MyAnn.class);
System.out.println(myAnn.value());
System.out.println(myAnn.value1()); Method method = clazz.getMethod("fun");
MyAnn myAnn1 = method.getAnnotation(MyAnn.class);
System.out.println(myAnn1.value());
System.out.println(myAnn1.value1());
}
}

Java自学手记——注解的更多相关文章

  1. Java自学手记——struts2

    struts2框架 struts2是一种基于MVC模式的框架,是在struts1的基础上融合了xwork的功能. struts2框架预处理了一些功能: >请求数据自动封装, >文件上传的功 ...

  2. Java自学手记——servlet3.0新特性

    servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...

  3. Java自学手记——Java中的关键字

    Java中的一些关键字对于初学者来说有时候会比较混乱,在这里整理一下,顺便梳理一下目前掌握的关键字. 权限修饰符 有四个,权限从大到小是public>protected>defaul(无修 ...

  4. Java自学手记——接口

    抽象类 1.当类和对象被abstract修饰符修饰的时候,就变成抽象类或者抽象方法.抽象方法一定要在抽象类中,抽象类不能被创建对象,如果需要使用抽象类中的抽象方法,需要由子类重写抽象类中的方法,然后创 ...

  5. Java自学手记——泛型

    泛型在集合中的应用 泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时:2.避免了无谓的强制类型转换. 用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐. ...

  6. Java自学手记——集合

  7. Java自学手记——多态

    对象转型 学习多态前先明白一个叫对象转型的概念,如: class Animal{ void sleep(){ System.out.println("睡觉"); } } class ...

  8. Java自学路线图之Java框架自学

    Java自学路线图的框架分为两个阶段,第一阶段的Java框架包含六个内容:MyBatis,Spring,SpringMVC,Maven高级,Git,Dubbo. 在Java自学过程中掌握框架的使用,对 ...

  9. 大学四年,总结一套适合小白的Java自学路线和方法

    前言篇 大家好,我是bigsai 好久不见,甚是想念,文章同时收录在回车课堂(文底阅读原文可达). 无论你是大学生还是在职人员,想学Java时,都会面临两个选择,自学或者报班.报班通常太费钱,时间又不 ...

随机推荐

  1. MySQL高可用方案MHA自动Failover与手动Failover的实践及原理

    集群信息 角色                             IP地址                 ServerID      类型 Master                     ...

  2. 开关调色新世界BP2888电源解决方案

    LED智能方案经过几年的拼杀,已经风靡照明界.但人们渐渐发现,对照明来说,一味追求花哨的功能并不被市场所认同,而其中开关调色,以其简单易操作的特点,已逐步融入广大消费者的生活习惯中.对吸顶灯,面板灯等 ...

  3. Struts2入门(一)

    今天学习Struts2首先struts是一个成熟的框架.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Cont ...

  4. php原生curl接口的请求

    /** * @desc 接口请求处理 * @date 2017/5/19 11:39 * @param [$url请求的接口地址,$way为false为get请求,true为post请求] * @au ...

  5. iOS开发之 Lottie -- 炫酷的动效

    动效在软件开发中非常常见,炫酷的动画能提升应用的B格,然而由设计师的设计转化成程序猿GG的代码是个非常"痛苦"的过程.对于复杂动画,可能要花费很多时间去研究和实现.Lottie 的 ...

  6. 【Netty】WebSocket

    一.前言 前面学习了codec和ChannelHandler之间的关系,接着学习WebSocket. 二.WebSocket 2.1. WebSocket介绍 WebSocket协议允许客户端和服务器 ...

  7. 使用 Hive装载数据的几种方式

    装载数据 1.以LOAD的方式装载数据 LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION( ...

  8. MarkDown编辑器快捷方式

    常用快捷: Ctrl+K 插入代码块 Ctrl+G 插入图片 Ctrl+B 文字加粗 Ctrl+I 文字倾斜 Ctrl+G 插入图片 Tab 默认新建高亮代码块 ">" 向右 ...

  9. Chrome 开发者工具断点调试(视频教程)

    很多人不了解 Chrome Dev Tools (开发者工具)的使用方法和技巧. 其中很多技能,无论是前端开发从业者,还是普通用户,了解一些还是对日常很有帮助的. 本猿定期录制.甚至根据您的需求来订制 ...

  10. python os模块学习

    一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是wi ...