注解,反射的总结知识

1|0一、注解的总结 

1|11、注解的本质 

注解的本质其实就是接口,也就是给参数附带其他数据类型

系统默认的注解

@Oververride //方法重写
@Deprecated //提示作用,表示此方法已过时,过时的原因就是有新的API的类替代了此方法
@SuppressWarnings //阻止编译器发出某些警告信息

1|22、元注解:

注解的作用就是负责注解其他注解,Java定义了四个标准的meta-annotation类型,它们被用来提供对其他annotation 类型做说明

  这些类型和它们锁支持的类在java.langannotation 包中可以找到(@Target,@Retention,@Documented,@Inherited)


  1.@Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)


  2.@Retention:表示需要在什么级别保存该注解信息,用于描述注解的生命周期
(SOURCE(源代码) 《 CLASS(字节码) 《 RUNTIEM(运行时))


  3.@Document:说明该注解将被包含在javadoc中


  4.@Inherited:说明子类可以继承父类中的该注解
 

1|33、自定义注解


使用@interface 自定义注解是,自动继承了 java.lang.annotation.Annotation接口

创建新的注解时必须使用Target和Retention两个基本的元注解(元注解接收的值都在枚举中定义)
分析:
  1.@Interited 用来声明一个注解,格式:public @ interface 注解名{ 定义内容 }
  2.其中的每一个方法实际上是声明了一个配置参数
  3.方法的名称就是参数的名称
  4.返回值类型就是参数的类型(返回值只能是基本类型,Class,String,enum)。
  5.可以通过default 来声明参数的默认值
  6.如果只有一个参数成员,一般参数名为value
  7.注解元素必须要有值,我们定义注解元素时,经常使用空字符串,0作为默认值

package interfenceDemo; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; public class Texxt { /*注解可以显示赋值。如果没有默认值,我们就必须给注解赋值 注解的赋值没有顺序 @MyAnnotatioon02{name = "赵雷",schools={“GUET”}} **/ } @MyAnnotatioon02() public void test(){ } } @Target(value = {ElementType.TYPE,ElementType.METHOD]}) @Retention(value = RetentionPolicy.RUNTIME) @interface MyAnnotatioon02{ //注解的参数:参数类型 参数名() //注意:这并不是一个方法 //default "":默认值 默认为空 String name() default ""; int age() default 0; int id() default -1; String[] schools() default {"GUET"} }

只有一个值的时候可以在使用注解的时候给他赋值(当然也可以使用default对其进行赋值)

@MyAnnotation01("在这里赋值") public void test(){ } } //如果只有一个值的时候可以使用value命名,可以在调用的时候省略value @Target(value ={ElementType.TYPE,ElementType.METHOD}) @Retention(value = RetentionPolicy.RUNTIME) @interface MyAnnotation01{ String value(); String name();//这里可以添加default给它赋初值 }

如果注解只有一个值,可以使用value命名,可以在调用的使用省略value

但是当只有一个值的时候且它的值不是value则不能省略

2|0 二、反射的总结

 可以利用类的对象返回该对象的描述信息

 

Java 反射机制提供的功能

  1.在运行时判断任意一个对象所属的类
  2.在运行时构造任意一个类的对象
  3.在运行时判断任意一个类所具有的成员变量和方法
  4.在运行时获取泛型信息
  5.在运行时调用任意一个对象的成员变量方法
  6.在运行时处理注解
  7.生成动态代理

反射相关主要API

  java.lang.Class :代表一个类

  java.lang.reflect.Method:代表类的方法

  java.lang.reflect.Field:代表类的成员变量

  java.lang.reflect.Constructor:代表类的构造器

获取Class类的实例

  1.若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高。

Class clazz = Person.class

  2.已知某个类的实例,调用该实例的getClass()方法获取Class对象

Class clazz = person.getclass

  3.已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException

Class clazz = Class.forName("=====输入该类的路径====")

 通过方法getfields()和getMethods()依次获取权限为public的成员变量和方法时,将包含从超类中继承到的成员变量和方法;而通过方法getDeclaredFields()和getDeclaredMethods()只是获取在本类中的所有成员变量和方法

3|0三、类加载与内存分析 


__EOF__

本文作者userName
本文链接https://www.cnblogs.com/20kkk/p/16537553.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   鹅城小铁匠  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
Fork me on GitHub
点击右上角即可分享
微信分享提示