④. 用户自定义类加载器(了解)
4.用户自定义类加载器
- 在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们换可以自定义类加载器,来定制类的加载方式
- 如果获取ClassLoader
⑤. 双亲委派机制 掌握
5.
双亲委派机制(掌握)
- ①. 工作原理
②. 优势:
⑥. 沙箱安全机制
6.
沙箱安全机制(掌握
)
⑦. 如何判断两个Class对象是否相同
7.如何判断两个Class对象是否相同
- ①. 相同必须的两个条件如下:
②. JVM必须知道一个类型是由启动加载器加载还是用户类加载器加载的。如果一个类型是又用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。
⑧. 主动使用和被动使用
8.主动使用和被动使用
④. 创建运行时类的对象
4>.
创建运行时类的对象
1.
创建运行时类对象
newInstance( ):
调用此方法创建对应运行时类的对象;内部调用了运行时类的空参构造方法要想此方法正常的创建运行时类的对象,要求:
- ①. 运行时类必须提供空参的构造器
- ②. 空参的构造器的访问权限得够。通常,设置为public
2.
要求
- 在javaBean中要求提供一个public的空参构造器。
原因:
- ①. 便于通过反射,创建运行时类的对象
- ②. 便于子类继承此运行时类时,默认调用super()时,保证父类有此构造器
Class clazz=Person.class; /* Object obj = clazz.newInstance(); Person p=(Person)obj;*/ Person p=(Person) clazz.newInstance(); System.out.println(p);
5>. 反射获取构造方法并使用
①. Constructor<?>[ ] getConstructors():返回所有公共构造方法对象的数组
②. Constructor<?> [ ] getDeclaredConstructors():返回所有构造方法对象的数组
③. Constructor<T> getConstructor(Class<?>... parameterTypes) :返回单个公共构造方法对象
参数:你要获取的构造方法的参数的个数和数据类型对应的字节码文件对象 .class
④. Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) :
返回单个构造方法对象
Constructor 类中用于创建对象的方法
T newInstance(Object ...initargs):
根据指定的构造方法创建对象
public void setAccessible(boolean flag):
值为true,取消访问检查
/* 通过反射实现如下的操作: Student s = new Student("林青霞",30,"西安"); System.out.println(s); */ public class ReflectDemo02 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { //获取Class对象 Class<?> c = Class.forName("com.itheima_02.Student"); //public Student(String name, int age, String address) //Constructor<T> getConstructor(Class<?>... parameterTypes) Constructor<?> con = c.getConstructor(String.class, int.class, String.class); //基本数据类型也可以通过.class得到对应的Class类型 //T newInstance(Object... initargs) Object obj = con.newInstance("林青霞", 30, "西安"); System.out.println(obj); } }