一:
反射的定义:在运行期载入,探知和使用编译期完全未知的类。
1 查看类信息
反射机制里一个特点就是实例化Class对象,因为任意一个类对象都是Class的实例...那么如何实例化Class对象呢?三种方法:
常用的;
1: Class c = Class.forName("全限定类名");
全限定类名:包名.类名
2:对象.getClass();
3:类.class;
在Class类中 有三个常用的类Field,Method,Constructor类
得到的是Class类public的的属性,方法,构造器:getFields(),getMethods(),getConstructors().
得到的是Class所包含的类的所有属性,方法,构造器:getDeclaredFields(),getDeclaredMethods(),getDeclaredConstructors().
2 创建对象
eg:
a : Object object = c.newInstance();//调用无参构造器创建对象
b :通过getConstructor()方法得到指定的构造器,再用指定的构造器创建对象的实例
eg: Constructor cons = c.getConstructor(Class<?>...parameterType); 参数列表
Object object = cons.newInstance(传入实参);
3 调用方法
首先导入 import java.lang.reflect.Method;
eg: Method method = c.getMethod(String name,Class<?>... parameterTypes);
method.invoke(Object obj,Object ...args);// 调用底层方法对象,用于方法调用的参数
4 获取字段
首先导入 import java.lang.reflect.Field;
eg: Field[] field = c.getDeclaredFields();
for (Field fi : field) {//遍历
System.out.println(fi);
}
5 获取方法 访问修饰符 返回类型 方法名 (参数类型)
首先导入 import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
eg:
Method[] methods = c.getDeclaredMethods();
for (Method method : methods) {
System.out.print(Modifier.toString(method.getModifiers()) + " "+ method.getReturnType().getCanonicalName() + " "+ method.getName() + "(");
//method.getModifiers()这个返回的int,所有用Modifier.toString转换成字符串类型的
Class[] types = method.getParameterTypes();
int len = types.length;
for (int i = 0; i < len; i++) {
System.out.print(types[i].getName());
if (i != len - 1)
System.out.print(",");
}
System.out.println(")");
}
6 获取构造器
首先要导入 import java.lang.reflect.Constructor;
其实与获取方法的差不多。
Constructor[] constructor = c.getDeclaredConstructors();
二:垃圾回收
三:类加载器
主要包括: 根类加载器(核心Java类) ; 扩展加载器(Javax); 系统加载器(运行时加载);
类加载的过程: 加载 连接(验证,准备,解析) 初始化
四:如果你写了一些方法,没有导入包的话,就会报错(这是一定的),当你把鼠标移到错误的地方,就会显示一个框,然后点击你所需要的包就可以了。