最近本着不求甚解的态度重温了一下主流框架的源码,所以趁热打铁的总结一下,学习框架或开发框架所必备的基础知识:
一、反射
1.1、简介
本文简单总结一下Java反射和注解,反射可以算是必备条件了,基本学习的主流框架中都会看到反射的身影,他的灵活使用也为很多逻辑的扩展提供了可能,通过Java的反射机制,可以在程序中访问已经加载到JVM中的Java对象的描述,实现访问、检测、修复和修改描述Java本身对象的功能,Java中的java.lang.reflect包提供使用注解功能。
Java中的所有类均即成了Object类,在Object类中定义了getClass方法,该方法返回一个Class的对象:
Class c = object.getClass();
利用返回的Class,即可访问Class描述信息,如:属性、方法‘构造函数等;
1.2、访问构造函数
- Java提供了一下通过反射获取构造函数的方法:
- getConstructors():获取权限位Public的构造函数
- getConstructors(Class<?> … parameterTypes):获取权限为public且指定参数类型的构造函数
- getDeclaredConstructors():按照声明顺序返回所有构造函数,包private类型
- getDeclaredConstructors(Class<?> … parameterTypes):获取指定参数类型的构造函数
- 针对Constructor常用的方法:
- isVarArgs():是否允许可变数量参数,返回boolean ,true表示有,false表示没有
- getParameterTypes():按照声明的顺序返回参数类型
- getExceptionTypes():返回抛出异常的类型
- newInstance():根据传入的参数调用构造函数创建实例
- setAccessible():默认不允许反射privite修饰的方法和属性,但如果先执行并设置为true,则可以反射
- getModifiers():获得可以解析出方法修饰符的整数
-
Modifier常用的解析方法
- isPublic(int mode):是否为Public修饰符
- isProtected(int mode):是否为Protected修饰符
- isPrivate(int mode):是否为Private修饰符
- isStatic(int mode):是否为Static修饰符
- isFinal(int mode):是否为Final修饰符
- toString(int mode):以字符串返回修饰符
- 实例:
- 创建实例ConstructExample
public class ConstructorExample {
int number;
public String name;
protected float aFloat;
private ConstructorExample() {
}
protected ConstructorExample(int number) {
this.number = number;
}
public ConstructorExample(String name, int number) throws NumberFormatException {
this.number = number;
this.name = name;
}
public void prinln() {
System.out.println("name = " + name);
System.out.println("number = " + number)