Cathy学习Java——反射和类的加载

    技术2026-01-16  7

    工厂设计模式 工厂方法模式 概述 工厂:就是生产特点产品的 实现方式 1>创建一个抽象工厂类,声明抽象方法 2>写一个具体抽象工厂类的子类,由子类负责对象的创建 优点:后期容易维护,增强了系统的扩展性 缺点:需要额外的编写代码,增加了工作量 简单工厂模式 又叫静态工厂模式,它定义一个具有的工厂类负责创建一些类的实例 特点:一个类负责很多对象的创建 类的加载 类得加载的过程 当程序要使用某个类时,如果类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化 加载::就是指将class文件存入内存,并为之创建一个class对象。任何类被使用时系统都会建立一个class对象 链接:

    验证 是否有正确的内部结构,并和其他类协调一致

    准备 负责为类的静态成员分配内存,并设置默认初始化

    解析 将类的二进制数据中符号的引用替换为直接引用

    初始化: 就是给属性赋值 ➢类的加载概述 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初化。 ①就是指将class文件读入内存, 并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。 连接 ①验证是否有正确的内部结构,并和其他类协调一致 ②准备负责为类的静态成员分配内存,并设置默认初始化值 ③解析将类的二进制数据中的符号引用替换为直接引用 初始化就是我们以前讲过的初始化步骤

    ➢类加载时机

    创建类的实例访问类的静态变量,或者为静态变量赋值调用类的静态方法初始化某个类的子类直接使用java. exe命令来运行某个主类使用反射方式来强制创建某个类或接口对应的java. lang. Class对象

    类加载器的概述和分类 ➢类加载器的概述 负责将. class文件加载到内存中,并为之生成对应的Class对象。虽然我们不需要关心类加载机制,但是了解这个机制我们 就能更好的理解程序的运行。 ➢类加载器的分类 Bootstrap ClassLoader 根类加载器 Extension ClassLoader 扩展类加载器 System ClassLoader 系统类加载器

    ➢类加载器的作用 Bootstrap ClassLoader 根类加载器 ①也被称为引导类加载器,负责Java核心类的加载 ②比如System, String等。在JDK中JRE的lib目录下rt. jar文件中 ●Extension ClassLoader扩展类加载器 ①负责JRE的扩展目录中jar包的加载。 ②在JDK中JRE的1ib目录下ext目录 ●System ClassLoader 系统类加载器 ①负责在JVM启动时加载来自java命令的class文件,以及classpath环境变 量所指 定的jar包和类路径

    反射概述

    反射概述 ① Java反射机制是在运行状态中对于任意一个类,都能够知道这个类的所有属性和方法 ②对于任意一个对象,都能通过反射够调用它的任意一个方法和属性 ③这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 ④要想解剖一个类,必须先要获取到该类的字节码文件对象。 ⑤而解剖 使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类型的对象。 ➢三种方式 ①0bject 类的getClass()方法,判断两个对象是否是同一个字节码文件 ②静态属性class,锁对象 ③Class类 中静态方法forName(),读取配置文件

    通过反射获取参构造方法 1.如果要使用反射,先要获取字节码对象 2.通过字节码对象的getConstructor()可以获取到构造方法对象 3.构造方法对象(Contructor),有个newInstance方法创建这个字节码对象 4.反射是在java.lang.reflect这个包中 5.反射的作用一般是用于写框架(ssh,ssm)

    3.6通过反射获取方法并使用 使用要点 1.反射中通过Method类描述方法[ 构造方法: Contructor,字 段:Field ] 2.通过Class 的getMethod可以获取-一个方法 3.通过getDeclaredMethod可以获取私有方法 4.如果要调用私有方法,设置访问权限setAccessible 越过泛型的检查

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { //1.声明泛型集合 List<Integer> list=new ArrayList<Integer>(); list.add(110); //2.通过反射往集合里添加字符串 //2.1获取字节码对象(Class) Class clz=list.getClass(); //2.2通过反射获取方法 clz.getMethod("add",Object.class); Method method=clz.getMethod("add",Object.class); //2.3 调用方法 method.invoke(list,"hkx"); System.out.println(list); }

    写一个通用的方法来设置对象属性 Demo1类

    public class Demo1 { public static void main(String[] args) throws Exception { //练习:写一个通用方法,设置对象的属性值 //通过反射给私有属性赋值 Teacher teacher=new Teacher(); // test1(teacher); Tool.SetFieldValues(teacher,"name","hkx"); Tool.SetFieldValues(teacher,"homntown","hkx"); Tool.SetFieldValues(teacher,"height",180.0); System.out.println(teacher); } private static void test1(Teacher teacher) throws NoSuchFieldException, IllegalAccessException { //1.获取字节码 Class clz=teacher.getClass(); //2.获取属性Field Field field1=clz.getDeclaredField("name"); Field field2=clz.getDeclaredField("homntown"); Field field3=clz.getDeclaredField("height"); //3.设置权限 field1.setAccessible(true); field2.setAccessible(true); field3.setAccessible(true); //4.设置属性 field1.set(teacher,"hkx"); field2.set(teacher,"涿州"); field3.set(teacher,177.0); } } public class Tool { /** * 通过反射给属性赋值 * @param fieldName 要赋值的属性名 * @param fieldValue 要赋值的属性值 * @param obj 需要赋值的对象 * */ public static void SetFieldValues(Object obj,String fieldName,Object fieldValue) throws Exception { //1.获取字节码 Class clz=obj.getClass(); //2.获取属性Field Field field1=clz.getDeclaredField(fieldName); //3.设置权限 field1.setAccessible(true); //4.设置属性 field1.set(obj,fieldValue); } public static void main(String[] args) { } }

    反射:用于获取类的方法和属性 使用要点: 1.如果要使用反射,要先获取字节码对象 2.通过字节码对象的getConstructor()可以获取构造方法对象 3.构造方法对象(Constructor),有个newInstance方法创建这个字节码对象 4.反射是在java.lang.reflect这个包中 ■枚举类的常见方法 ■ int ordinal() ■ int compareTo(E o) String name () ■String toString () T value0f (Class type, String name)通 过字节码对象获取枚举对象 ■ values(L此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便 ■JDK7的六个新特性回顾和讲解| A:二进制字面量 B:数字字面量可以出现下划线 C:switch语句可以用字符串 D:泛型简化,菱形泛型 E:异常的多个catch合并,每个异常用或| F: try with-resources 语句

    Processed: 0.013, SQL: 9