反射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

相关文章
|
22天前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
2月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
88 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
1月前
|
Java
Java的反射
Java的反射。
26 2
|
2月前
|
存储 Java
[Java]反射
本文详细介绍了Java反射机制的基本概念、使用方法及其注意事项。首先解释了反射的定义和类加载过程,接着通过具体示例展示了如何使用反射获取和操作类的构造方法、方法和变量。文章还讨论了反射在类加载、内部类、父类成员访问等方面的特殊行为,并提供了通过反射跳过泛型检查的示例。最后,简要介绍了字面量和符号引用的概念。全文旨在帮助读者深入理解反射机制及其应用场景。
34 0
[Java]反射
|
3月前
|
安全 Java 索引
Java——反射&枚举
本文介绍了Java反射机制及其应用,包括获取Class对象、构造方法、成员变量和成员方法。反射允许在运行时动态操作类和对象,例如创建对象、调用方法和访问字段。文章详细解释了不同方法的使用方式及其注意事项,并展示了如何通过反射获取类的各种信息。此外,还介绍了枚举类型的特点和使用方法,包括枚举的构造方法及其在反射中的特殊处理。
73 9
Java——反射&枚举
|
2月前
|
安全 Java 测试技术
🌟Java零基础-反射:从入门到精通
【10月更文挑战第4天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
29 2
|
3月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
17 0
|
3月前
|
存储 安全 Java
扫盲java基础-反射(一)
扫盲java基础-反射(一)
|
3月前
|
Java
扫盲java基础-反射(二)
扫盲java基础-反射(二)