学习Java中关于反射的知识,以理解框架
目录
1.认识反射
2.获取类
3.获取构造器
4.获取成员变量编辑
5.获取成员方法
6.作用 应用场景
1.认识反射
反射
加载类 并允许以编程的方式解刨类中的各种成分(成员变量 方法 构造器)
学习反射就是学习获取类的信息 操作他们
2.获取类
加载类 获取类的字节码对象 Class对象
获取Class类名的三种方式
Class c1 = 类名.class
调用Class提供的方法:public static Class forName(String package)
Object提供的方法:public Class getClass() //需要先获取一个对象才能使用
package High_reflect;public class TextClass {public static void main(String[] args) throws Exception {Class c1 = Student.class;System.out.println(c1.getName()); //全类名System.out.println(c1.getSimpleName()); //简名:StudentClass c2 = Class.forName("class High_reflect.Student");System.out.println(c1 == c2);Student s3 = new Student();Class c3 = s3.getClass();}
}
3.获取构造器
方法 | 说明 |
Constructor<?>[ ] getConstructors() | 获取全部构造器(只能获得public修饰的) |
Constructor<?>[ ] getDeclaredConstructors() | 获取全部构造器 |
Constructor<T>[ ] getConstructor(Class<?>... parametertypes) | 获取某个构造器 |
Constructor<Y>[ ] getDeclaredConstructor(Class<?>... parameterTypes) | 获取全部构造器 |
package High_reflect;import java.lang.reflect.Constructor;public class TextClass {public static void main(String[] args) throws Exception {Class c1 = Student.class;System.out.println(c1.getName()); //全类名System.out.println(c1.getSimpleName()); //简名:Student// 2.获取类的全部构造器(只可以拿到public修饰的构造器)Constructor[] constructor = c1.getConstructors();//3.遍历数组中的每一个构造器对象for (Constructor constructor1 : constructor) {System.out.println(constructor1.getName()+"------->"+constructor1.getParameterCount());}Constructor[] constructor1 = c1.getDeclaredConstructors();for (Constructor constructor2 : constructor1) {System.out.println(constructor2.getName()+"------->"+constructor2.getParameterCount());}}
}
4.获取成员变量
package High_reflect;import org.junit.Test;import java.lang.reflect.Field;public class TextClass1 {@Testpublic void testGetFields() throws Exception {Class c = Student.class;//获取全部成员变量Field[] declaredFields = c.getDeclaredFields();for (Field declaredField : declaredFields) {System.out.println(declaredField.getName() + declaredField.getType());}//定位某个成员变量Field fName = c.getDeclaredField("name");System.out.println(fName.getName());}}
获取变量的作用依然是进行赋值和取值
5.获取成员方法
6.作用 应用场景
- 基本作用:得到一个类的全部成分然后操作
- 可以破坏封装性
- 最重要:适合做java的框架,基本上主流的框架都会基于反射设计功能
学习时间:2024.09.06