Java反射、注解

反射:

1)类对象:加载的类文件,保存在方法区的对象

获取的三种方式:

Class.forName(类字符串) // 字符串格式为:包名.类名
类名.class
对象.getClass()

获取成员变量:

getFields() // 获得可见的成员变量,包含从父类继承的成员变量
getDeclaredFields() // 获得本类所有成员变量,包含私有,不包含继承
getField(String 变量名) // 获得指定的变量
获取构造方法:
getConstructors() // 获得可见的构造方法
getDeclaredConstructors() // 获取所有的构造方法,包括私有
getConstructor(class<> 类对象) // 获得指定参数的构造方法

获取普通方法:

getMethods() // 获取可见的方法,包含继承
getDeclaredMethods() // 获取本类定的的方法,包括私有,不包含继承
getMethod(String 方法名) // 获取指定的方法
getMethod(String 方法名, Class<?> …) //

2)反射创建对象

执行无参构造
Object obj = clazz.newInstance()
执行有参构造
a)Constructor t = clazz.getConstructor(参数类型) // 获得构造方法
b)Object obj = t.newInstance(参数数据) // 创建对象并执行有参构造

3)一些方法:

Modifier.toString(t.getModifiers()) // 查看修饰符
.getType().getSimpleName() // 类型
.getName() // 变量名
方法对象.invoke(对象); // 执行方法
方法对象.invoke(对象, 属性值) // 执行


注解:

通过@interface关键字定义:
public @interface TestAnnotation{}

注解Test类(在类上面添加)

@TestAnnotation
public class Test {}
元注解(一种基本注解,可以引用到其他注解上)

@Retention
@RetentionPolicy.SOURCE // 注解只在源码阶段保留,编译期被忽略
@RetentionPolicy.CLASS // 保存到编译期,不会加载进JVM
@RetentionPolicy.RUNTIME // 保留到程序运行期,,会被加载进JVM,程序运行时能被获取到
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
String value() default “”;
}

@Documented
能够将注解中的元素包含到Javadoc中
@Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。

@Target
指定了注解运用的场景(类,方法,方法参数等)
ElementType.ANNOTATION_TYPE // 给一个注解进行注解
ElementType.CONSTRUCTOR // 给构造方法注解
ElementType.FIELD // 给属性注解
ElementType.LOCAL_VARIABLE // 给局部变量注解
ElementType.METHOD // 给方法注解
ElementType.PACKAGE // 给包注解
ElementType.PARAMETER // get方法内的参数进行注解
ElementType.TYPE // 给一个类型注解,如类、接口、等

@Inherited
继承,如果一个超类被注解,它的子类继承超类的注解

@Repeatable
1.8新特性,不理解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值