(一)Java的反射
反射 注解 动态代理在平时不常用,主要用于编写框架和学习框架的源码

1.1 认识反射
反射(Reflection)
反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)
反射就是用来做框架的

1.1.1 反射学什么?
- 学习获取类的信息、操作它们
具体步骤
- 1、反射第一步:加载类,获取类的字节码:Class对象
- 2、获取类的构造器:Constructor对象
- 3、获取类的成员变量:Field对象
- 4、获取类的成员方法:Method对象

1.2 获取类
- 1、反射第一步:加载类,获取类的字节码:Class对象

获取Class对象的三种方式
- Classc1=类名.class
- 调用Class提供方法:public static Class forName(String package);
- Object提供的方法:public Class getClass();Class c3=对象.getClass();
public class FansheTest {
public static void main(String[] args) throws Exception {
Class c1 = Student.class;
System.out.println(c1.getName());//全类名
System.out.println(c1.getSimpleName());//简名:Student
Class c2=Class.forName("com.qianxin.fanshe.Student");
System.out.println(c1 ==c2);
Student s=new Student();
Class c3=s.getClass();
System.out.println(c3 == c2);
}
}
com.qianxin.fanshe.Student
Student
true
true
1.3 获取类的构造器
- 2、获取类的构造器:Constructor对象
Class提供了从类中获取构造器的方法

getConstructors() 只能获取public修饰的构造器
import org.junit.Test;
import java.lang.reflect.Constructor;
public class TestConstructor {
@Test
public void testGetConstructors() {
//1、反射第一步:必须先得到这个类的Class对象
Class c = Cat.class;
// 2、获取类的全部构造器
Constructor[] constructors = c.getConstructors();// 3、遍历数组中的每个构造器对象
for (Constructor constructor : constructors) {
System.out.println(constructor.getName() + "--->"
+ constructor.getParameterCount());
}
}
}
getDeclaredConstructors() 只要存在构造器就能拿到
import java.lang.reflect.Constructor;
public class TestConstructor {
@Test
public void testGetConstructors() {
//1、反射第一步:必须先得到这个类的Class对象
Class c = Cat.class;
// 2、获取类的全部构造器
Constructor[] constructors = c.getDeclaredConstructors();// 3、遍历数组中的每个构造器对象
for (Constructor constructor : constructors) {
System.out.println(constructor.getName() + "--->"
+ constructor.getParameterCount());
}
}
}
getConstructor 获取某个构造器:无参数构造器 getDeclaredConstructor获取有参数构造器
import org.junit.Test;
import java.lang.reflect.Constructor;
@Test
public void testGetConstructor()throws Exception {
//1、反射第一步:必须先得到这个类的Class对象
Class c = Cat.class;
// 2、获取某个构造器:无参数构造器
//Constructor constructor =c.getConstructor();
Constructor constructor = c.getDeclaredConstructor();
System.out.println(constructor.getName() + "--->"
+ constructor.getParameterCount());
// 3、获取有参数构造器
Constructor constructor2 =
c.getDeclaredConstructor(String.class, int.class);
System.out.println(constructor2.getName() + "--->"
+ constructor2.getParameterCount());
}
}
获取类构造器的作用:依然是初始化一个对象返回

1.3 获取类的成员变量
- 3、获取类的成员变量:Field对象
1.4 获取类的成员方法
- 4、获取类的成员方法:Method对象
:Java的高级技术:反射&spm=1001.2101.3001.5002&articleId=138093372&d=1&t=3&u=44036044f7cc42b3bbedc45460592de2)

被折叠的 条评论
为什么被折叠?



