反射Reflect(Java基础篇)(二)

简介: 反射Reflect(Java基础篇)(二)

④. 用户自定义类加载器(了解)


4.用户自定义类加载器


  • 在Java的日常应用程序开发中,类的加载几乎是由上述3种类加载器相互配合执行的,在必要时,我们换可以自定义类加载器,来定制类的加载方式


  • 如果获取ClassLoader


微信图片_20220106121746.png

⑤. 双亲委派机制 掌握


5. 双亲委派机制(掌握)


  • ①. 工作原理


微信图片_20220106121804.png


②. 优势:


微信图片_20220106121831.png


⑥. 沙箱安全机制


6. 沙箱安全机制(掌握)


微信图片_20220106121846.png


⑦. 如何判断两个Class对象是否相同


7.如何判断两个Class对象是否相同


  • ①. 相同必须的两个条件如下:


微信图片_20220106121905.png


②. JVM必须知道一个类型是由启动加载器加载还是用户类加载器加载的。如果一个类型是又用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类型信息的一部分保存在方法区中。


⑧. 主动使用和被动使用


8.主动使用和被动使用


微信图片_20220106121930.png


④. 创建运行时类的对象


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,取消访问检查


微信图片_20220106122714.png

微信图片_20220106122720.png

/*
    通过反射实现如下的操作:
        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);
    }
}


微信图片_20220106122745.png

相关文章
|
6天前
|
Java C++
Java反射的简单使用
Java反射的简单使用
22 3
|
6天前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
4天前
|
安全 Java API
JAVA-不安全的反射--RCE
JAVA不安全的反射造成的RCE小案例
|
6天前
|
SQL 存储 Java
【Java反射详解】
【Java反射详解】
13 1
|
6天前
|
Java
JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识
【5月更文挑战第2天】JAVA难点包括异常处理、多线程、泛型和反射,以及复杂的分布式系统知识。入坑JAVA因它的面向对象特性、平台无关性、强大的标准库和活跃的社区支持。
42 2
|
6天前
|
Java 测试技术
滚雪球学Java(24):Java反射
【4月更文挑战第13天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
23 0
滚雪球学Java(24):Java反射
|
6天前
|
Java
Java 反射
Java 反射
|
6天前
|
设计模式 Java 索引
由反射引出的Java动态代理与静态代理
由反射引出的Java动态代理与静态代理
16 0
|
6天前
|
存储 Java Shell
深入剖析Java中的反射,由浅入深,层层剥离!
深入剖析Java中的反射,由浅入深,层层剥离!
14 1
|
6天前
|
Java API Spring
Java基础教程(13)-Java中的反射和动态代理
【4月更文挑战第13天】Java反射机制允许程序在运行时获取类的信息并调用其方法。Class类是基础,提供获取类属性和方法的能力。通过Class对象,可以操作实例字段和方法,如getField、getDeclaredField等。动态代理是Java提供的创建接口实例的机制,其中JDK动态代理需目标类实现接口,而Cglib则可代理未实现接口的类。动态代理涉及Proxy和InvocationHandler接口。