反射
2023-04-26 19:50:32 10 举报
AI智能生成
简单学习了反射的基本概念以及基本用法
作者其他创作
大纲/内容
注解(Annotation):是代码里的特殊标记,程序可以读取注解,一般用于替代配置文件
开发人员可以通过注解告诉类如何运行
在Java技术里注解的典型应用场景是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类
1、概念
定义注解使用@interface关键字,注解中只能包含属性
常见注解:@Override
2、定义注解
1、注解只能是属性
2、如果注解中属性只有一个,且是value。那么使用的时候,value=可以省略
3、如果属性是一个数组,那么在使用的时候如果只有一个参数,大括号可以省略
4、注解中的属性类型可以是:基本类型、String类型、注解类型、数组
3、使用注解注意事项
Class(默认的):class源文件期间保留
Source:编译期间保留
Runtime:在运行期保留
@Retention:定义注解的生命周期
TYPE:类上使用
FIELD:属性上使用
METHOD:方法上使用
PARAMETER:参数上使用
@Target:定义注解的使用范围
加在注解上的注解
4、元注解
四、注解【掌握】
类的对象:基于某个类new出来的对象,也称为实例对象
类对象:类加载的产物。封装了一个类的所有信息(类名、父类、接口、属性、方法、构造方法)
注意:每个类加载到内存都会生成一个唯一的类对象
1、什么是类对象
1、通过对象的getClass方法。应用场景:必须有类的对象
2、通过类的class属性。应用场景:一般多用于方法传参
3、通过Class类的forName方法。应用场景:一般在运行期获取类对象(使用较多)
如何获取Class对象,一共有三种方式获取类对象
2、获取类的对象
c.getSimpleName() 获取类名
c.getName() 获取类的全限定名
c.getSuperclass() 获取父类的类对象
c.getInterfaces 获取父接口的类对象,返回的是一个数组
newInstance() 通过类对象创建的类的对象
Class对象的常用方法
1、这个类必须有一个无参构造方法 InstantiationException
2、这个类的构造方法必须是public修饰 IllegalAccessException
调用newInstance方法需要注意:
3、类对象常用的方法
Field类表示类对象中的属性
获取它的目的:赋值和取值
获取类中所有的公开属性(包括父类):c.getFields()
获取类中指定的公开属性(包括父类):c.getField()
获取本类中所有的属性(包括非公开的、不包括父类):c.getDeclaredFields()
获取本类中指定的属性(包括非公开的、不包括父类):c.getDeclaredField()
存值、取值
常用方法:
4、Filed类
Constructor类表示类对象中的方法
获取它的目的,创建对象
获取本类中公开构造方法:c.getConstructors()
获取本类中所有的构造方法:c.getDeclaredConstructors()
获取本类中指定的构造方法:c.getDeclaredConstructor(变量类型.class)
创建类的对象
常用方法
5、Constructor类
Method类表示类对象的方法
获取它的目的,调用它并获取方法的返回值(如果方法没有返回值则返回null)
获取所有的公开方法(包括父类的):c.getMethods()
获取指定的公开方法(包括父类的):c.getMethod(\"方法名\",变量类型.class,...)
获取本类中所有的方法(不包括父类,包括私有的):c.getDeclaredMethods()
获取本类中指定的方法(不包括父类,包括私有的):c.getDeclaredMethod(\"方法名\")
方法用来调用
6、Method类
一、反射【掌握】
一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
可以简单理解为特定问题的固定解决方式
在Gof的《设计模式》书中描述了23种设计模式
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、重用性。
2、好处
开发中有一个非常重要的原则”开闭原则“,对拓展开放、对修改关闭。(不要修改原来的代码但是可以进行拓展)
工厂模式主要负责对象创建的问题
可通过反射进行工厂模式的设计,完成动态的对象创建
3、工厂模式
二、设计模式
枚举是一个引用类型,枚举是一个规定了取值范围的数据类型。表示状态 用常量不方便 jdk之后出现了枚举
枚举变量不能使用其他的数据,只能使用枚举中常量赋值,提高程序的安全性
定义枚举使用enum关键字
枚举是一个终止类,并继承Enum抽象类
枚举中常量是当前类型的静态常量
枚举的本质:
枚举中必须要包含枚举常量,也可以包含属性、方法、私有构造方法
枚举常量必须在前面,多个常量之间使用逗号隔开,如果没有定义其他内容,最后分隔号可写可不写
注意:
一般已经确定类的对象个数,可以使用枚举定义
三、枚举【了解】
反射
0 条评论
回复 删除
下一页