注解&反射

1 篇文章 0 订阅
1 篇文章 0 订阅

注释

写给程序员看的,帮助程序员理解代码:

  1. 单行注释 对单行代码进行解释说明
  2. 多行注释 对一段代码进行解释说明
  3. 文档注释 对一个方法或者类进行解释说明 javadoc生成文档

注解

给java程序员看的,帮助程序员理解代码 标签

为什么要学习注解
(1)使代码更加简洁,逻辑更加清爽
(2)以后使用别人的注解(大公司自有框架  开源框架(spring Springmvc))
(3)分析别人的代码
作用
(1)生成文档
(2)分析代码
(3)校验
如何使用注解
(1)拿到注解(需要一个注解  别人已经定义好的  自己定义的)
(2)使用  贴到什么地方
(3)完成功能(Override的功能检验是否是注解)
jdk四大内置注解
@Override用于检验方法是否为覆写的方法
@Deprecated用于标记方法过时 过时的方法依然可以使用  但是不建议使用
@SuppressWarings 抑制警告(如:当定义了一个变量未使用的时候)
@SafeVarargs 抑制堆污染警告 有了这个注解 jvm就不会再去做校验 定义了泛型 定义的类型和内部使用的类型不一致

自定义一个注解:

注解内容
(1)模仿别人的
(2)作用范围:如果没有指定作用范围 默认是都可以使用
	指定作用范围的时候,如果指定的特殊的结果,以数组的方式
(3)完成什么功能
	生命周期的指定 一般来说,自定义的注解生命周期指定为源文件 但是根据具体的业务情况来指定
	如果需要在自定义注解中传值  类型 变量名();默认值default 值
	类型:基本数据类型 String Class Enum
语法
	(1)@Target(类 方法 构造方法 字段 参数)(指定作用范围)
	(2)@Rentention(源文件 字节码文件 运行时) (约束生命周期)
	(3)@Documented 生成文档
	(4)@Inherited 子类可以获得父类上面的注解信息
	public @interface 注解名{
	}
元注解:注解上面的注解,用来约束注解的作用范围、生命周期、生成文档、能否被子类访问
(1)@Target用来约束注解作用范围(类 方法 构造方法 字段)
(2)@Retention 用来约束注解的生命周期(java源文件 编译后的字节码文件 运行时 )
(3)@Documented 如果用来自定义注解的时候 再自定义的注解上面使用@Documented这个元注解一并生成到api中
(4)@inherited 如果自定义的注解使用了@Inherited这个元注解修饰 在类上使用自定义注解的时候 从这个类的子类上也能够获取到该注解的信息 反射以后再来验证

反射

反射基本介绍

通过字节码文件去获取类中的信息(无论私有还是公有 都可以获取得到)
程序运行的时候 动态的去获取类中的相关信息(类的信息:字段 方法 构造方法 注解)
权限定名:包名+类名 比如cn.itsource.annotation.Test
(1)优点:功能强大 灵活
(2)缺点:破坏封装 效率较低
(3)作用:主要是框架底层的设计实现

获取字节码文件对象
类 接口 数组 基本数据类型 Void
1.类的字节码文件对象  一个类的字节码文件对象只有一个
	a.  类名.class
	b.  对象名.getClass()
	c.  Class.forName(权限定名)
2.接口的字节码文件对象
	a.  接口名称.class
	b.  Class.forName(权限定名)
3.数组的字节码文件对象
	a.  数组对象。getClass()
	b.  数组类型.class
4.基本数据类型的字节码文件对象
5.Void	Void.class
反射获取类构造器(创建类对象)
1.获取字节码文件对象
2.使用字节码文件对象调用方法 
	a.  字节码文件.newInstance()  默认调用无参的构造方法 直接返回的是该类的对象
	b. 需要调用公有的有参的构造方法,需要先获取构造器
		字节码文件对象.getConstructor(参数类型的字节码文件对象)  得到构造器对象
		构造器对象.newInstance(实参)	
	c.调用私有的构造方法(注意)
		字节码问价对象.getDeclaredConstructor(参数类型的字节码文件)  得到构造器对象
		设置访问权限  构造器对象.setAccessible(true)
		构造器对象.newInstance(实参)
反射获取类中的方法
1.获取字节码文件对象
2.获取方法
	a.获取公共方法
		字节码文件对象.getMethod(参数方法的名称,方法上参数类型字节码对象)  得到方法
		获得对象
		方法.invoke(对象,该方法的实参)
	b.获取私有方法
		字节码文件对象.getDeclaredMethod()
		设置访问权限
		方法.invoke(对象,该方法的实参)
反射获取类中的字段
1.获取字节码文件对象
2.获取私密字段
	字节码对象.getField(字段名称)  得到字段
	设置访问权限
	字段.set(对象,要赋的值)
反射获取类中的注解
1.获取字节码文件对象
2.通过字节码文件.getDeclaredAnnotation(注解的字节码文件对象)  得到注解
3.注解.value 得到注解
(有@Inherited修饰的注解子类可以通过这个方法进行访问父类注解)

新手程序猿,欢迎大家多多交流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值