[转帖]注解机制(Annotation,区别于comment)
[19/04/16-星期二] 注解机制(Annotation,区别于comment(传统意义上的注释))
一、概念
作用:
——不是程序本身,可以对程序作出解释。(这一点和注释没什么区别)
——可以被其它程序(比如编译器)读取,这是区别于注释的最重要的一点。
格式:
——"@注释名" ,还可以添加一些参数,例如@SuppressWarnings(Value="unchecked")
用在哪里?
——可以附加在package(包)、class(类)、method(方法)、field(属性),相当于给他们添加额外的辅助信息,可以通过反射机制编程实现对这些元数据的访问
【系统注解】
/*** * 学习注解 */ package cn.sxt.jvm; import java.util.*; public class Test_0416_Annotation { public static void main(String[] args) { System.out.println("hello"); Date date=new Date(); //date.parse("dd");//jar中加了中划线,表示不推荐使用 ,源码中会有这个@Deprecated test01();//自己写的 ,不建议使用不是不能使用 } /*注解1、@Override 表示重写父类的方法 如果不加@Override,把toString()写成tostring()【大小写拼错】 编译器是不会报错的,只会把它当成一个自己写的普通方法,但是加了@Override会报错,编译器会去父类的方法中(默认继承Object类) 寻找有没有这个方法,如果没有则会报错!。只用于方法的前边*/ @Override //英文:覆盖,重写 public String toString() {//重写toString方法 return "爱你"; } /*注解2、@Deprecated 不赞成使用的方法或者类,自己写的类也可以加上。不是不能使用 */ @Deprecated //英文:反对,不赞成 public static void test01() { System.out.println("不建议使用,不是不能使用!"); } /*注解3、@SuppressWarnings("all"),如果没有这个,下边没有用到的语句或其他情况左边会有黄色警告。 * 可以用在包、类、方法、属性的前边 */ @SuppressWarnings("all") //Suppress镇压.翻译:抑制由此以下的一切警告 . private void test02() { java.util.List list=new ArrayList(); } //自己定义的注解,也可以在注解中更改默认设置 @Test_0416_SxtAnnotation (studentName="小李",id=1001,age=18,schools="武汉大学") private void test03() { } }
【自定义注解】
/*** * 自定义一个注解 */ package cn.sxt.jvm; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target (value=ElementType.METHOD) //元注解1 Target:[英文]目标,服务对象,靶子。表示自定义的注解只能用于方法前边 //@Target(value={ElementType.METHOD,ElementType.TYPE}) 表示这个注解可以用于方法和类的前边 @Retention(RetentionPolicy.RUNTIME)//元注解2 Retention[英文]保留 有3个级别。 //SOURCE,在源文件中有效;ClASS,在class文件中有效;RUNTIME运行时有效,为Runtime可以被反射机制读取,级别最高。 public @interface Test_0416_SxtAnnotation { String studentName() default "";//加了默认值 int age() default 0; int id() default -1; //默认值-1 String[] schools() default {"清华大学","北京大学"}; //数组 //String value(); 如果注解只有一个属性,通常这样定义,属性名定义为value,假设新注解为Test_0416_SxtAnnotation02 //用的时候直接这样Test_0416_SxtAnnotation02(value="小李")或者Test_0416_SxtAnnotation02("小李") //由于注解时没有设置默认值,所以使用时必须给它一个值 }
【反射+注解】
/*** * ORM:Object relationship Mapping 对象关系映射 * Java中的类与数据库中关系表相对应 * -类与表结构对应 * -属性与子段对应 * -对象与记录对应 * * 学习使用注解完成类和表结构的映射关系 */ package cn.sxt.jvm; @Test_0416_OrmAnnotation("tb_student") //与tb_student这个表对应 public class Test_0416_ORM { @Test_0416_OrmAnnotationField(columnName="id",type="int",length=10)//对应于表中的各项数据 private int id; @Test_0416_OrmAnnotationField(columnName="sname",type="varchar",length=10) private String stuName; @Test_0416_OrmAnnotationField(columnName="age",type="int",length=3) private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
/*** * 使用反射解析注解信息,模拟处理注释信息的流程,实际用的是各种框架去解析,不用自己写 */ package cn.sxt.jvm; import java.lang.annotation.Annotation; import java.lang.reflect.Field; public class Test_0416_OrmReflect { public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException { Class clz=Class.forName("cn.sxt.jvm.Test_0416_ORM");// clz这个对象包含了Test_0416_ORM这个类的全部信息(包括注解) Annotation[] annotation= clz.getAnnotations();//获得Test_0416_ORM这个类全部的注解 for (Annotation ann : annotation) { System.out.println(ann);//输出这个类上边的注解 @Test_0416_OrmAnnotation("tb_student") } //直接通过类名获得注解 Test_0416_OrmAnnotation为写的一个注解 Test_0416_OrmAnnotation st=(Test_0416_OrmAnnotation)clz.getAnnotation(Test_0416_OrmAnnotation.class); System.out.println(st.value()); //获得类的属性的注解,以stuName的注解为例,在实际应用中获取的是数据库表的相关信息 Field f=clz.getDeclaredField("stuName"); Test_0416_OrmAnnotationField field=f.getAnnotation(Test_0416_OrmAnnotationField.class); System.out.println(field.columnName()+"->"+field.type()+"->"+field.length()); //然后根据获得表名和字段信息,拼出DDL(Data Definition Language,数据库模式定义语言)语句 (相关的SQL语句),然后使用 //JDBC执行这个SQL,然后在数据库中生成相关的表。此处省略 } }
/*** * 配套注解 注解类 */ package cn.sxt.jvm; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target (value={ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Test_0416_OrmAnnotation { String value();//只有一个属性,用于与某个表对应 } /*** * 注解属性 */ package cn.sxt.jvm; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target (value=ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Test_0416_OrmAnnotationField { String columnName();//列名 String type(); int length(); }
[转帖]注解机制(Annotation,区别于comment)的更多相关文章
- [19/04/16-星期二] 注解机制(Annotation,区别于comment(传统意义上的注释))
一.概念 作用: ——不是程序本身,可以对程序作出解释.(这一点和注释没什么区别) ——可以被其它程序(比如编译器)读取,这是区别于注释的最重要的一点. 格式: ——"@注释名" ...
- 注解【Annotation】、反射
注解:Annotation是从JDK5.0开始引入的新技术.Annotation的作用:如果没有注解信息处理流程,则注解毫无意义)- 不是程序本身,可以对程序作出解释.(这一点,跟注释没什么区别)- ...
- Java核心知识体系2:注解机制详解
1 Java注解基础 注解是JDK1.5版本开始引入的一个特性,用于对程序代码的说明,可以对包.类.接口.字段.方法参数.局部变量等进行注解. 它主要的作用有以下四方面: 生成javadoc文档,通过 ...
- 深入理解Spring注解机制(一):注解的搜索与处理机制
前言 众所周知,spring 从 2.5 版本以后开始支持使用注解代替繁琐的 xml 配置,到了 springboot 更是全面拥抱了注解式配置.平时在使用的时候,点开一些常见的等注解,会发现往往在一 ...
- 【Android框架进阶〖0〗】ThinkAndroid注解机制
由于项目需要,开始研究ThinkAndroid. 个人认为该框架的注解机制十分新颖,所以先研究这个,顺便学习下 Java 的annotation. 粗略的看了看,该机制在BaseActivity中初始 ...
- 【转】Android 最火框架XUtils之注解机制详解
原文:http://blog.csdn.net/rain_butterfly/article/details/37931031 在上一篇文章Android 最火的快速开发框架XUtils中简单介绍了x ...
- Java_注解_01_注解(Annotation)详解
一.注解的概念 Annotation(注解)是插入代码中的元数据(元数据从metadata一词译来,就是“描述数据的数据”的意思),在JDK5.0及以后版本引入.它可以在编译期使用预编译工具进行处理, ...
- Java注解(Annotation):请不要小看我!
Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分.注解对于代码的运行效果没有直接影响. 网络上对注解的解释过于严肃.刻板,这并不是我喜欢的风格.尽管这样的 ...
- (转)深入理解Java注解类型(@Annotation)
背景:在面试时候问过关于注解的问题,工作中也用到过该java的特性,但是也没有深入的了解. 秒懂,Java 注解 (Annotation)你可以这样学 ps:注解最通俗易懂的解释 注解是一系列元数据, ...
随机推荐
- java+上传后的文件展示
文件夹结构支持 大文件上传控件6支持向服务器上传整个文件夹,并且在服务端保存时与本地目录结构完全保持一致,同时在数据库中也保留文件夹的层级结构.开发人员可以借助于数据库中的层级信息方便的管理文件,管理 ...
- java+大文件上传下载
文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...
- (三)根据向导创建MFC工程,事件的添加和删除
一,文档视图结构 文档:它是一个类,这个类专门用来存储数据 视图:它是一个类,这个类专门用来显示和修改数据 框架类:一个容器,这个容器装了视图 健完工程之后,类视图: 运行一下: 几个比较重要的函数 ...
- 洛谷P2789 直线交点数 [数论,递归]
题目传送门 题目描述 平面上有N条直线,且无三线共点,那么这些直线能有多少不同的交点数? 输入格式 一个正整数N 输出格式 一个整数表示方案总数 输入输出样例 输入 #1 4 输出 #1 5 说明/提 ...
- XGBoost的优点
1. Gradient boosting(GB) Gradient boosting的思想是迭代生多个(M个)弱的模型,然后将每个弱模型的预测结果相加,后面的模型Fm+1(x)基于前面学习模型的Fm( ...
- node和npm版本引起的安装依赖和运行项目失败问题
问题:node版本不同导致的安装依赖版本不同而无法启动 https://www.jianshu.com/p/c07293c8c6d4 实际上问题分为两个部分: 1,npm包管理器安装依赖不成功,此时需 ...
- java什么时候进行垃圾回收,垃圾回收的执行流程
java的垃圾回收分为 三个区域新生代 老年代 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间如果有 不进行垃圾回收 ,对象直接在伊甸园存储.如果伊甸园内存已满,会进行一次minor gc然后 ...
- 提交本地文件至gitlab已有的项目中(更新gitlab)
gitlab代码更新 gitlab官网 1.安装git git官网 官网下载安装,安装过程一直next即可(路径自己选) 2.clone至本机 格式:git clone url(可转到指定目录克隆) ...
- python中list不能做索引
先看python中内置的list不能作为字典的key. 可将list或者ndarray转化为tuple再做索引. list不能进行hash: import numpy as np a1 = np.ar ...
- shell 基数数值方法
shell 下获取数值的结果 1. # expr 1 "+" 2 2. # echo "1+2" |bc 3. # echo $(( 1+3))