【Java编程思想笔记】注解1-简单了解注解
文章参考:https://www.cnblogs.com/xuningchuanblogs/p/7763225.html
https://www.cnblogs.com/xdp-gacl/p/3622275.html
学习网站:how2java.cn
1.注解是什么
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种标记,看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。
2.为什么要用注解
使用Annotation之前(甚至在使用之后),XML被广泛的应用于描述元数据。不知何时开始一些应用开发人员和架构师发现XML的维护越来越糟糕了。他们希望使用一些和代码紧耦合的东西,而不是像XML那样和代码是松耦合的(在某些情况下甚至是完全分离的)代码描述。
假如你想为应用设置很多的常量或参数,这种情况下,XML是一个很好的选择,因为它不会同特定的代码相连。如果你想把某个方法声明为服务,那么使用Annotation会更好一些,因为这种情况下需要注解和方法紧密耦合起来,开发人员也必须认识到这点。
另一个很重要的因素是Annotation定义了一种标准的描述元数据的方式。在这之前,开发人员通常使用他们自己的方式定义元数据。例如,使用标记interfaces,注释,transient关键字等等。每个程序员按照自己的方式定义元数据,而不像Annotation这种标准的方式。
目前,许多框架将XML和Annotation两种方式结合使用,平衡两者之间的利弊。
简单来说:本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程更加简洁,代码更加清晰。
3.怎么使用注解
一、注解的分类
(1)按照运行机制划分:
1)源码注解: 只在源码中存在,编译成.class文件就不存在了
2)编译时注解: 在源码和.class中都存在,像@Override @Deprecated @SuppressWarnning等都属于编译时注解
3)运行时注解: 在运行阶段还起作用,甚至会影响运行逻辑的注解。像@Autowired自动注入的这样一种注解就属于运行时注解,它会在程序运行的时候把你的成员变量自动注入进来。
(2)按照来源划分:1)来自JDK的内置注解 2)来自第三方的注解 3)自定义注解
(3)元注解:元注解就是给注解进行注解,可以理解为注解的注解就是元注解(都不认识注解俩字了)
二、详细举例:
(1)基本内置注解
1)@Override:
@Override 用在方法上,表示这个方法重写了父类的方法,如toString()。如果父类没有这个方法,那么就无法编译通过,如例所示,在fromString()方法上加上@Override 注解,就会失败,因为Hero类的父类Object,并没有fromString方法
public class Person {
    String name;
    @Override
    public String toString(){
        return name;
    }
@Override
public String fromString(){
return name;
}
}
2) @Deprecated:
@Deprecated 表示这个方法已经过期,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)
public class Person {
    String name;
    @Deprecated
    public void doBad(){
        System.out.println("");
    }
}
之后在使用doBad()方法时就会有破折号提示:这个方法已过时
3)@SuppressWarnings:
@SuppressWarnings Suppress英文的意思是抑制的意思,这个注解的用处是忽略警告信息。比如大家使用集合的时候,为了不去定义泛型,就会使用这个注解:
    @SuppressWarnings({"rawtype","unused"})
    public static void main(String[] args){
        List list = new ArrayList();
    }
或者使用上面@Deprecated注解过的方法时,为了消除过时提示,也会使用抑制注解
@SuppressWarnings("deprecation")
    public static void main(String[] args){
        Person p = new Person();
        p.doBad();
    }
@SuppressWarnings的常见值如下:
1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);
                    2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告
                    3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
                    4.path:在类路径、源文件路径等中有不存在的路径时的警告;
                    5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
                    6.finally:任何 finally 子句不能正常完成时的警告;
                    7.rawtypes 泛型类型未指明
                    8.unused 引用定义了,但是没有被使用
                    9.all:关于以上所有情况的警告。
3)@SafeVarargs :这是1.7 之后新加入的基本注解. 如例所示,当使用可变数量的参数的时候,而参数的类型又是泛型T的话,就会出现警告。 这个时候,就使用@SafeVarargs来去掉这个警告 ( 具体是啥没搞明白)
@SafeVarargs
public static <T> T getOne(T... elements){
return elements.length>0? elements[0]:null;
}
4)@FunctionalInterface:这是Java1.8 新增的注解,用于约定函数式接口。
函数式接口概念: 如果接口中只有一个抽象方法(可以包含多个默认方法或多个static方法),该接口称为函数式接口。函数式接口其存在的意义,主要是配合Lambda 表达式来使用。 (在使用Lambda表达式的时候的疑惑就是,如果Lambda表达式要实现的接口中不小心定义了多种方法要怎么办)
@FunctionalInterface
public interface Run {
public void run();
}
(2)元注解: 元注解是组成自定义注解的重要器件,其有很多内容,可以参考后面的文章
元注解包括:@Target,@Retention,@Inherited,@Documented,@Repeatable
(3)自定义注解:
【Java编程思想笔记】注解1-简单了解注解的更多相关文章
- Java编程思想 笔记
		
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
 - java编程思想笔记(1)
		
java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...
 - #Java编程思想笔记(一)——static
		
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
 - 2.1(java编程思想笔记)位移操作
		
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
 - 【Java编程思想笔记】注解--元注解
		
参考文章:(小白的小小白的白 )https://blog.csdn.net/weixin_42315600/article/details/80630669 https://www.cnblogs.c ...
 - 【Java编程思想笔记】注解--自定义注解
		
文章参考自:https://www.cnblogs.com/xdp-gacl/p/3622275.html 学习网站:how2java.cn 一.自定义注解的创建过程 第一步:(元注解) 使用元注 ...
 - Java编程思想笔记
		
打好java基础 后续会增加相应基础笔试题 目录如下 1 对象导论2 一切都是对象3 操作符4 控制执行流程5 初始化与清理6 访问控制权限7 复用类8 多态9 接口10 内部类11 持有对象12 通 ...
 - 7.JAVA编程思想笔记隐藏实施过程
		
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040237 "进行面向对象的设计时,一项主要的考虑是:怎样将发生变 ...
 - java编程思想笔记(第一章)
		
Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5 ...
 
随机推荐
- pytorch Debug —交互式调试工具Pdb (ipdb是增强版的pdb)-1-在pytorch中使用
			
参考深度学习框架pytorch:入门和实践一书第六章 以深度学习框架PyTorch一书的学习-第六章-实战指南为前提 在pytorch中Debug pytorch作为一个动态图框架,与ipdb结合能为 ...
 - python小白——进阶之路——day3天-———运算符
			
(1)算数运算符: + - * / // % ** (2)比较运算符: > < >= <= == != (3)赋值运算符: = += -= *= /= //= %= ** ...
 - 深入理解 Java 基本数据类型
			
深入理解 Java 基本数据类型
 - 迷茫<第三篇:再到北京>
			
这是2016年初春,三月的北京仍带着丝丝的冷意,我再次来到了这座熟悉又陌生的城市.我是早上6点钟到的北京西站,坐火车过来的,一夜未眠,眼睛很疲劳.这次过来和上次回长沙一样,下了火车先把行李寄存在朋友家 ...
 - 分享数百个 HT 工业互联网 2D 3D 可视化应用案例
			
过去的 2018 年,我们认为是国内工业互联网可视化的元年,图扑软件作为在工业可视化领域的重度参与者,一线见证了众多 HTML5/Web 化.2D/3D 化的项目在工业界应用落地,我们觉得有必要在此分 ...
 - 【Swift 3.0】iOS 国际化切换语言
			
有的 App 可能有切换语言的选项,结合系统自动切换最简单的办法: fileprivate var localizedBundle: Bundle = { return Bundle(path: Bu ...
 - Qt中的QWebView
			
一.Webkit了解 Webkit是一个开源的浏览器引擎,chrome也使用了作为核心.Qt中对Webkit做了封装,主要有以下几个类: QWebView :最常用的类,作为一个窗体控件 QWeb ...
 - 近期学习docker遇到的一些问题
			
最近看某谷的springboot视频,看到了docker部分,在实践过程中遇到了一些问题 默认国外镜像,下载软件很慢 linux内核版本过低,与docker运行不匹配 这里记录一下解决方案 第一个问题 ...
 - github 管理代码:  code.Aliyun
			
阿里云代码管理,,cao,搞了半天,配置百度就可以了,我只想说代码控制可以用github桌面版管理
 - BZOJ3028食物——生成函数+泰勒展开
			
题目描述 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数.他这次又准备带一些 ...