黑马面试相关java技术总结注解_第1页
黑马面试相关java技术总结注解_第2页
黑马面试相关java技术总结注解_第3页
免费预览已结束,剩余4页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技术总结注解- android 培训、java 培训、期待与您交流! -注解的概述java 提供的几个基本注解SuppressWarnings通过 System.runFinalizersOnExit(true);的编译警告引出 SuppressWarnings(deprecation)Deprecated直接在刚才的类中增加一个方法,并加上Deprecated 标注,在另外一个类中调用这个方法。Overridepublic总结:equals(Reflect other)方法与 HashSet 结合讲解注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以

2、后,javac 编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。看 java.lang 包,可看到 JDK 中提供的最基本的 anno注解的应用:ion。注解就相当于一个你的源程序中要调用的一个类,要在源程序中应用某个注解,得先准备好了这个注解类。就像你要调用某个类,得先有开发好这个类。自定义注解及其应用:定义一个最简单的注解:public erface MyAnnoion 把它加在某个类上:MyAnnoion public class AnnoionTest用反射进试 Annoion

3、Test 的定义上是否有MyAnnoion,引出Retention 元注解的讲解,其三种取值:根据发射测试RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;分别对应:java 源文件-class 文件-内存中的字节码。思考:Override、SuppressWarnings 和Deprecated 这三个注解的属性值分别是什么?演示和讲解元注解等于 ElementType.METHOD,原来加在类上的注的默认值为任何元素,设置解就报错了,改为用数组方式设置ElementType.METHementType.TYP

4、E就可以了。元注解以及其枚举属性值不用记,只要会看 jdk 提供那几个基本注解的 API 帮助文档的定义或其源代码,按图索骥即可查到,或者直接看 java.lang.anno为注解增加基本属性:注解的属性ion 包下面的类。一个注解相当于一个胸牌,如果你胸前贴了胸牌,就是播客的学生,否则,就不是。如果还想区分出是播客哪个班的学生,这时候可以为胸牌在增加一个属性来进行区分。加了属性的标记效果为:MyAnnoion(color=red)定义基本类型的属性和应用属性:在注解类中增加 String color();MyAnnoion(color=red)用反射方式获得注解对应的实例对象后,再通过该对象

5、调用属性对应的方法MyAnnoion a =(MyAnnoion)AnnoionTest.class.getAnnoion(MyAnnoion.class);System.out.prln(a.color();可以认为上面这个MyAnno为属性指定缺省值:String color() default yellow; value 属性:String value() default zxx;ion 是 MyAnnotaion 类的一个实例对象如果注解中有一个名称为 value 的属性,且你只想设置 value 属性(即其他属性都采用默认值或者你只有一个 value 属性),那么可以省略 value

6、=部分,例如:MyAnnoion(lhm)。为注解增加高级属性:数组类型的属性 arrayAttr() default 1,2,3;MyAnnoion(arrayAttr=2,3,4)如果数组属性中只有一个元素,这时候属性值部分可以省略大括枚举类型的属性EnumTest.TrafficLl() ;MyAnnoion(l=EnumTest.TrafficL.GREEN)注解类型的属性:MetaAnnoMyAnnoion annoionAttr() default MetaAnnoion(x);ion(annoionAttr=MetaAnnoion(“yyy”) ),可以认为上面这个MyAnnoi

7、on 是 MyAnnotaion 类的一个实例对象,同样的道理,可以认为上面这个MetaAnnoion 是 MetaAnnoion 类的一个实例对象,调用代码如下: MetaAnnoion ma = myAnnoion.annoionAttr();System.out.prln(ma.value();注解的详细语法可以通过看 java 语言规范了解,即看 java 的 language specification。代码体现:Annoion 在java 的世界正铺天盖地展开,有空写这一篇简单的annoions 的文章,算是关于 Annoion 入门的文章吧,希望能各位们能抛砖,共同学习.第一部分

8、:了解一下 java1.5 起默认的三个 annoion 类型:一个是Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。一个是Deprecated:建议别人不要使用旧的API 的时候用的,编译的时候会用产生警告信息可以设定在程序里的所有的元素上.一个是SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.如果不清楚上面三个类型的具体用法,各位可以 baidu 或一下的,很简单的。第二部分:讲一下 annoion 的概念先,再来讲一下怎样设计自己的 annoion.首先在 jdk 自带的 java.lang.annoion 包里,打开如下几个源文件

9、:一、源文件.java edRetention(RetentionPolicy.RUNTIME)(ElementType.ANNOION_TYPE)public erface ElementType value();edRetention(RetentionPolicy.RUNTIME)(ElementType.ANNOION_TYPE) public erfaceElementType value();其中的erface 是一个关键字,在设计 annoions 的时候必须把一个类型定义为erface,而不能用 class 或erface 关键字(会不会觉得 sun 有点,偏偏搞得与 erfa

10、ce 这么像).二、源文件 Retention.java edRetention(RetentionPolicy.RUNTIME)(ElementType.ANNOION_TYPE)public erface Retention RetentionPolicy value();在上面的文件都用到了 RetentionPolicy,ElementType 这两个字段,你可能就会猜到这是两个 java 文件.这两个文件的源代码如下:三、源文件 RetentionPolicy.javapublic enum RetentionPolicy SOURCE,CLASS, RUNTIME这是一个 enum

11、 类型,共有三个值,分别是 SOURCE,CLASS 和 RUNTIME。SOURCE 代表的是这个 Annoion 类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annoion 的数据就会,并不会保留在编译好的.class 文件里面。ClASS 的意思是这个 Annoion 类型的信息保留在程序源码里,同时也会保留在编译好的.class 文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个 Annoion 类型的 Retention 值时,系统默认值是 CLASS.第三个,是 RUNTIME,表示在源码、编译好的.class 文件中保留信

12、息,在执行的时候会把这一些信息加载到 JVM 中去的举一个例子,如Override 里面的 Retention 设为 SOURCE,编译成功了就不要这一些检查的信息;相反,Deprecated 里面的 Retention 设为 RUNTIME,表示除了在编译时会警告 使用了哪个被 Deprecated 的方法,在执行的时候也可以查出该方法是否被 Deprecated。四、源文件 ElementType.javapublic enum ElementType TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,LOCAL_VARIABLE, ANNOION_T

13、YPE,PACKAGE里面的 ElementType 是用来指定 Annoion 类型可以用在哪一些元素上的。说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量),ANNOION_TYPE,PACKAGE(包),其中的 TYPE(类型)是指可以用在 Class,erface,Enum和 Annoion 类型上.另外,从 1 的源代码可以看出,自己也用了自己来自己,只能用在ANNOION_TYPE 之上.如果一个 Annoion 类型没有指明使用在哪些元素上,那么它可

14、以使用在任何元素之上,这里的元素指的是上面的八种类型.举几个正确的例子: (ElementType.METHOD)(value=ElementType.METHOD)(ElementType.METHementType.CONSTRUCTOR)具体参考一下 javadoc 文档上面一下 1 和 2 的源文件,它们都使用了ed,ed 的目的就是让这一个 Annoion 类型的信息能够显示在 javaAPI 说明文档上;没有添加的话,使用 javadoc 生成 API 文档的时候就会找不到这一个类型生成的信息.另外一点,如果需要把 Annoion 的数据继承给子类,那么就会用到Inherited

15、这一个Annoion 类型.第三部分:下面讲的设计一个最简单的 Annoion 例子,这一例子共用四个文件;一、Description.javapackage com.itheima.ymx;import java.lang.anno import java.lang.anno import java.lang.anno import java.lang.annoimport java.lang.annoion.ed;ion.ElementType;ion.Retention; ion.RetentionPolicy;ion.;(ElementType.TYPE)Retention(Reten

16、tionPolicy.RUNTIME)public ederface Description String value();说明:所有的 Annoion 会自动继承 java.lang.anno的类或是接口.ion 这一个接口,所以不能再去继承别最重要的一点,Annoion 类型里面的参数该怎么设定::只能用 public 或默认(default)这两个defaul 默认类型。权修饰.例如,String value();这里把方法设为:参数成员只能用基本类型 byte,short,char,long,float,douboolean 八种基本数据类型和 String,Enum,Class,an

17、noions 等数据类型,以及这一些类型的数组.例如,Stringvalue();这里的参数成员就为String。:如果只有一个参数成员,最好把参数名称设为value,后加小括号.例:上面的例子就只有一个参数成员。二、Name.javapackage com.itheima.ymx;import java.lang.anno import java.lang.anno import java.lang.anno import java.lang.annoimport java.lang.annoion.ed;ion.ElementType; ion.Retention;ion.Retentio

18、nPolicy;ion.;/注意这里的与Description 里的不同,参数成员也不同(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)public ederface Name String originate();String community();三、HeiMa.javapackage com.itheima.ymx; Description(ymx,这个很有意思) public class HeiMa Name(originate=作者:ymx,community=HeiMa)public String getName()re

19、turn null;Name(originate=作者:Ymx,community=ItHeiMa)public String getName2()return 呵呵;四、最后,写一个可以运行提取 HeiMa 信息的类 TestAnnopackage com.itheima.ymx; import java.lang.reflect.Method; import java.util.HashSet; import java.util.Set;ionpublic class TestAnno/*ion * 说明:具体相关 Anno*/ion 的 API 的用法请参见 javaDoc 文档public sic void main(String

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论