注解入门

蓝汇云音乐解析API对接Aplayer播放器 你的域名/index/music/index?TP5开发的音乐解析API对接aplayer播放器。酷狗歌单说明酷狗音乐不能解析到平台里的自建歌单。现在需要在程序里注册并且在添加歌单音乐请求示例。音乐解析API对接aplayer播放器。 阅读详情

注解入门

注解和注释

注释是给人看的,注解是给机器(编译器,虚拟机)看的。

注解的概念

注解是一个标识,或者说是标签。

注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。
注解有许多用处,主要如下:
- 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息
- 编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。
- 运行时的处理: 某些注解可以在程序运行的时候接受代码的提取

注解长什么样,怎么用,如何生效,效果是什么

需要提前说的是,单单为一个类/一个方法/一个变量/等添加注解,完全不会影响代码地运行。重要的是程序对注解进行提取,根据提到的注解做一定的事情才会起作用(提取以及响应可以由编译器、框架代码或者开发者自己处理,一般框架只会处理框架定义的注解,开发人员也只会处理自己定义的注解)。

先来一个系统定义的 : Override

//注解的定义是这样的
@Target(ElementType.METHOD)//标明该注解的使用对象是方法
@Retention(RetentionPolicy.SOURCE)//标明该注解的生效场景是在源码中
    public @interface Override {
}

//注解的使用是这样的
@Override
public void methodDefineInParentType(){
     // your code...
}

// 如何生效
// 前面注释说到了该注解仅在源码中生效,由编译器识别注解,并且给予开发者提示

// 效果是什么
// 如果父类定义了该方法,则没有什么效果,仅用于提示。如果父类没有该方法,则编译器给出提示,并且编译器不允许编译通过(其实编译器也可以允许编译通过,即使通过,也不影响代码的运行效果)

再来一个自定义的:

/**
 * 自定义注解跟系统定义的注解都一样,可以使用元注解对注解进行说明
 * Target = Element.TYPE 说明了该注解可以作用在类和接口上
**/
@Target(ElementType.TYPE)//可以用在类、接口、枚举类上
@Retention(RetentionPolicy.RUNTIME)//保留到运行时
public @interface UselessAnnotation{
        String stringValue() default "test";//添加了一个成员变量,变量的默认值是test
}

//使用
@UselessAnnotation(stringValue = "helloWorld")
public class MainActivity extends AppCompatActivity {
        ...

        //1. 判断MainActivity.class上是否存在特定类型的注解
        //2. 获取MainActivity.class上是特定类型的注解
        //3. 获取注解的变量值并且赋值给一个textView
        if (MainActivity.class.isAnnotationPresent(UselessAnnotation.class)) {
            UselessAnnotation annotation = MainActivity.class.getAnnotation(UselessAnnotation.class);
            String string = annotation.stringValue();
            textView.setText(string);
        }  

        ...
}

元注解

作用在注解上的注解叫做元注解。
Java提供的元注解有五种:
- @Retention : 设置保留期
- @Documented :设置是否在javaDoc中呈现
- @Target :设置注解的作用对象
- @Inherited ://设置注解可被继承
- @Repeatable ://设置注解可重复

@Retention

retention用于说明注解保留的时间

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     * Returns the retention policy.
     * @return the retention policy
     */
    RetentionPolicy value();
}

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     * 注解只在源码中存在,保留到编译之前,在编译时就扔掉了
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     * 保留到编译器进行编译时,编译时注解可以在编译时被注解处理器进行处理,然后插入生成代码之类的(这也是很多编译时注解框架使用的方法)。
     * 但是不会保留到运行时
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     * 保留到Java字节码文件中,并且被加载到虚拟机中,故而可以在运行时通过反射获取
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

@Documented

顾名思义,这个元注解肯定是和文档有关。它的作用是能够将注解中的元素包含到 Javadoc 中去

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}

@Target

Target 是目标的意思,@Target 指定了注解运用的地方。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}

@Target 有下面的取值

  • ElementType.ANNOTATION_TYPE 可以作用于注解
  • ElementType.CONSTRUCTOR 可以作用于构造方法
  • ElementType.FIELD 可以作用于属性
  • ElementType.LOCAL_VARIABLE 可以作用于局部变量
  • ElementType.METHOD 可以作用于方法
  • ElementType.PACKAGE 可以作用于包
  • ElementType.PARAMETER 可以作用于参数
  • ElementType.TYPE 可以作用于一个类型,比如类、接口、枚举

@Inherited

如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}

@Repeatable

@Repeatable 是 Java 1.8 才加进来的,所以算是一个新的特性。
什么样的注解会多次应用呢?通常是注解的值可以同时取多个(这似乎可以被数组取代)。暂时不明白它的独特点。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Repeatable {
    /**
     * Indicates the <em>containing annotation type</em> for the
     * repeatable annotation type.
     * @return the containing annotation type
     */
    Class<? extends Annotation> value();
}
用一个通俗的例子讲清楚API 随着移动互联网的发展, 基于互联网的应用正变得越来越普及,在这个过程中,更多的平台将自身的资源开放给开发者来调用。对外提供的API 调用使得平台之间的内容关联性更强,同时这些开放的平台也为用户、开发者和中小网站带来了更大的价值。 那么API究竟是何方神圣?首先我们在百度百科查询到的解释是:API(Application Programming Interface,应用程序编程接口)是一些预... 阅读详情

相关推荐

APIPlayer Setup.msi

APIPlayer Setup.msi

如何使用Aplayer播放器

Aplayer 一、部署 1、Aplayer 官网体验网址:https://aplayer.js.org/ Aplayer的GitHub网址:https://github.com/MoePlayer/APlayer 中文文档手册网址:首页 – APlayer 使用方法很简单,加载Aplayer的js和css,在想要展先的位置调用即可。Aplayer支持很多模式,上图展示的效果为吸底模式,就是在网页的页面最左下角展示。本文以吸底模式为例进行说明,如果想采用其它模式,可以根据文档手册修改代码。...

豪先生的博客 2万+

API浏览器中文破解版

API浏览器中文破解版 API浏览器 中文 破解 系统工具 编程工具

分享一个开源免费、功能强大的视频播放器库(1)

另外 Plyr 还支持我们添加一些自定义样式,我们需要使用 CSS Custom Properties 即可轻松实现样式复写。比如说,我们想要把默认的按钮颜色由蓝色改成红色,那就可以直接添加 CSS 样式::root {这样 Plyr 就可以读取这个 CSS 属性,然后实现样式控制了。更多的自定义样式名称可以参考:https://github.com/sampotts/plyr#customizing-the-css。

2301_79099606的博客 4764

Python实战:用MNE-Python从脑电数据中提取P300成分(附完整代码)

本文提供了一份使用MNE-Python从脑电数据中提取P300成分的完整实战指南。通过详细的代码示例,系统讲解了从环境搭建、数据加载、预处理(滤波、分段、伪迹剔除)到P300波形提取、可视化与参数量化的全流程。重点介绍了如何利用零相位滤波和叠加平均技术,从EEG信号中精准分离出反映认知加工的P300事件相关电位,适用于脑机接口与认知神经科学研究。

weixin_29240343的博客 338

oracle19c 无备份情况下重建ocr 和 votedisk

无备份情况下重建ocr 和 votedisk – 19c 备注:测试环境基本上都有ocr自动备份文件,建议参考有备份情况下恢复ocr和votedisk Deconfigure and reconfigure entire cluster will rebuild OCR and Voting Disk, user resources (database, instance, service, ...

fangang001的专栏 4179

Java注解:从入门到精通

注解详细解读

qq_73698057的博客 1204

Android 11多窗口+分屏+APP窗口嵌套TaskView实现原理一

然而随着版本的迭代升级,google对分屏的定制差异化也越来越大,Androd 11的分屏用的是split-screen-primary和split-screen-secondary的方式,在systemui中去实现的,其定制化的灵活度不是很高,很多业务都是放到sustemui或者fw去实现,但是随着版本的升高,后面出现了TaskView来替代了老版本的分屏方式,但是Task的核心原理其实和之前的方式是一样的,TaskView来实现分屏。

qq_18420641的博客 2615

mybatis入门案例及注解开发

知识点 mybatis的入门 mybatis注解开发和编写dao实现类的方式 目标 能够掌握编写mybatis的入门案例 能够清楚mybatis可以使用注解和实现类方式开发 在resources中创建一个login4j.properties的文件 # Set root category priority to INFO and its only appender to CONSOLE. #lo...

piaok_yumian的博客 280

基于STM32、HAL库、I2C接口的姿态传感器/陀螺仪之ICM-42670-P驱动 C语言程序设计

/ 设置加速度计和陀螺仪的工作模式。// 读取加速度计和陀螺仪数据。

corlin6688的博客 1180

dolphinscheduler集群服务一键安装启动实现流程剖析

通过以上分析我们基本梳理清楚了整个dolphinscheduler项目的一键安装启动逻辑, 我们现在在通过一张图正好理一下整个实现流程。关于一键停止集群服务及一件查询集群各个角色服务实例运行状态的实现也都在stop-all.sh/status-all.sh及dolphinscheduler-daemon.sh这三个脚本中, 有兴趣自行研究。写这篇文章的核心目的不仅在于给大家分享如何优秀的开源项目的一键安装部署的实现过程。

最爱嫣夜来 1207

SpringMVC使用入门及常用注解

SpringMVC使用入门及常用注解一、SpringMVC入门程序1.创建WEB工程,引入开发的jar包,具体的坐标如下:2.配置核心的控制器(在web.xml配置文件中核心控制器DispatcherServlet)3.编写springmvc.xml的配置文件4.编写index.jsp和HelloController控制器类5.在WEB-INF目录下创建pages文件夹,编写success.jsp...

InMyHeart丿的博客 241

微信小程序:errno: 600001, errMsg: “uploadFile:fail errcode:-101 cronet_error_code:-10001 error_msg:net::E

微信小程序报错uploadFile:fail errcode:-101 cronet_error_code:-10001 error_msg:net::ERR_CONNECTION_RESET, custum ip is invalid, didn't find user's ip,wx.uploadFile errno: 600001 errcode:-101 ?微信小程序wx.uploadFile错误,wx.uploadFile 在真机上报下面的错误,调试工具里没有问题,其它接口在真机/调试工具都正常,

✅ 精选推荐文章 4260

Mybatis的入门案例以及基于注解的入门案例

mybatis的入门案例 第一步:读取配置文件 第二步:创建SqlSessionFactory工厂 第三步:创建SqlSession 第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方式:指定实体类的全限定类名 mybatis基于注解的入门案例: 把IUserDao.x...

派拉斯兔子的博客 550

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mybatis基于注解的入门案例

mybatis基于注解的入门案例: 把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都...

qq_39368007的博客 302

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring AOP 入门 注解

Spring AOP 入门 注解 一、注解方式开发AOP 创建Maven项目引入相应的pom 引入Spring的配置文档 applicationContext.xml 编写目标类以文章的增删改查为例,并完成配置 ArticleDao.java public class ArticleDao { public void save() { System.out.printl...

GreatDistance的博客 275

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring boot入门注解说明

常用注解(annotations)列表: @SpringBootApplication: 包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让springBoot扫描到Configuration类并把它加入到程序上下文。 @Configuration 相当于传统的xml配置文件,如果...

常年被追砍的博客 179

Spring 注解配置入门指南

核心注解:处理Web请求@Service:业务逻辑实现:数据持久化操作@Component:通用组件标识运行机制组件扫描:通过自动完成依赖注入:使用@Autowired实现组件装配开发规范严格分层(controller/service/repository)优先使用构造器注入遵循单一职责原则通过本节学习,您已掌握Spring注解开发的核心技术!这些注解可满足95%的开发需求。@Bean配置方式数据访问:Spring Data JPA的使用高级特性。

m0_75107803的博客 774

Java注解Annotation从入门到精通

注解(Annotation)是Java代码里的特殊标记,比如:@Override、@Test等,其作用是:通过反射机制让其他程序根据注解信息来决定怎么执行该程序。比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解。比如要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解。模拟JUnit框架,运行加注注解的方法,实现步骤:定义若干个方法,只要加注了MyTestAnno注解,才会触发该方法执行。

weixin_50083448的博客 1174

如何获取注解中的值_用大白话聊聊JavaSE - 自定义注解入门

注解在JavaSE中算是比较高级的一种用法了,为什么要学习注解,我想大概有以下几个原因:1. 可以更深层次地学习Java,理解Java的思想.2. 有了注解的基础,能够方便阅读各种框架的源码,比如hibernate,SpringMVC等等。里面就用到了大量的注解。即便无法阅读源码,以后使用这些框架,会有一种心理上的安全感。3. 方便今后跟别人吹牛。(当然,这也很重要。)好了,话不多说,我们开始吧。...

weixin_39656853的博客 137

SpringMVC入门程序-以注解方式

本文将以注解的方式完成一个SpringMVC的入门程序,为什么不用 xml 方式,因为 xml 方式比较繁琐,没有 注解 方式来得简单,所以推荐注解方式。 一、开发准备 1、准备 jar 包 本程序因为没有 涉及到数据库,所有数据都是存在对象中。所以不需要 mysql-jdbc 驱动包因为我们的程序需要写jsp代码,这里我们需要 jstl.jar和一个 standard.jar日志包也是

576

深入理解Java:注解(Annotation)自定义注解入门

转载:深入理解Java:注解(Annotation)自定义注解入门 - peida - 博客园

sky198989的博客 149

Spring注解开发 -- Spring入门(六)

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。(博客的参考源码以及文章末尾链接的学习视频源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)IOC容器相关bean相关依赖注入相关(博客的参考源码以及文章末尾链接的学习视频源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

HHX_01的博客 9442

mybatis之入门案例-注解写法【新手入门】

mybatis的环境搭建 第一步:创建maven工程并导入坐标 第二步:创建实体类和dao的接口 第三步:创建Mybatis的主配置文件 SqlMapConifg.xml 第四步:编写测试类 ** 步骤开始: ** 包的层级关系: **第一步:创建maven工程并导入坐标 <dependencies> <!--mybatis的依赖--> &...

wangxuejava的博客 427
上一篇: 常用命令行
下一篇: 安卓手机屏幕相关
ApiPlayer
博客等级 码龄12年 34粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值