• 枚举与反射


    类是创建对象的模板,理论上一个类可以创建无数个对象。有时候一个类只能创建几个特定的对象(限定:星期类,七个 对象;季节类,四个对象)。

    一.枚举类

    能够限定我们创建对象的个数。每个枚举项之间用逗号相连,采用全部大写的方式进行命名。

    枚举类如何限定对象的?

    ①不能和普通类一样通过new构造器的方式来创建对象。

    ②所有的对象在创建枚举类的时候就先定义好,然后直接调用对象。

    二.线程状态

    根据线程状态创建枚举类

    三.反射

    java获取类信息的能力叫做反射。

    1.反射的创建方式:

    ①Class.forName("全类名"),全类名:包名+类名;

    ②类名.class;

    ③对象名.getClass;

    2.通过反射获取类信息(全局变量、方法、构造器)

    ①全局变量

    getDeclaredFields(); 获取所有的类的全局变量 Field[ ]

    getFields(); 获取public修饰符修饰的全局变量 Field[ ]

    getDeclaredField(String name); 获取指定变量 Field

    getField(String name); 获取public下的指定变量 Field

    ②方法

    getDeclaredMethods(); 获取全部的类的方法

    getMethods(); 获取所有的public修饰的方法信息

    getDeclaredMethod(name, String.class,char.class); 获取指定的类的方法(里面是入参类型)(“方法名”,参数类型.class)

    getMethod(name, int.class,char.class); 获取public修饰的指定的类的方法

    ③构造器

    getDeclaredConstructors(); 获取全部的类的构造器

    getConstructors(); 获取所有的public修饰的类构造器

    getDeclaredConstructor(parameterTypes); 获取指定的构造器(里面是入参类型)

    getConstructor(String.class,int.class); 获取public修饰的指定的类构造器

    3.通过信息来操作类

    ①变量

    获取变量,并给变量赋值

    Field name = class1.getField("name");

    EnumClass enums = new EnumClass(); 因为反射只能赋值,所以我们提前创建对象给全局变量分配内存空间

    赋值set(obj,value) set(对象,值) 取值get(obj,value) 针对public类型的全局变量

    Field phone = class1.getDeclaredField("phone"); 针对default/protected类型的全局变量

    sex.setAccessible(true); 针对private类型,我们不能直接设置值,需要暴力反射

    ②方法

    Method run = class1.getMethod("run", int.class);

    执行方法invoke(obj, args)

    EnumClass enums = new EnumClass();

    run.invoke(enums, 1000); 针对public类型的方法

    Method eat = class1.getDeclaredMethod("eat", String.class,int.class);

    eat.setAccessible(true);

    eat.invoke(enums1, "张三",10); 针对private类型的方法

    ③构造器

    Constructor constructor = class1.getConstructor(String.class,int.class);

    newInstance();

    EnumClass enums = (EnumClass) constructor.newInstance("张三",200); 针对public类型的构造器

    Constructor constructor1 = class1.getDeclaredConstructor(String.class);

    constructor1.setAccessible(true);

    EnumClass enums2 = (EnumClass) constructor1.newInstance("121212121"); 针对private类型的构造器

  • 相关阅读:
    【Git】Deepin提示git remote: HTTP Basic: Access denied 错误解决办法
    掌动智能浅析Web自动化测试的重要性
    【unity2023打包安卓工程】踩坑记录
    TI AM335x继任者?AM6254性能解析
    【三维重建补充知识-0】视差、深度概念及其转换
    微信支付——微信H5支付实战教程(微信支付v3版本java)
    vue项目打包部署流程
    windows上传文件到linux的方法
    AVFrame内存管理api
    Topaz Video AI:一键提升视频品质,智能重塑影像魅力 mac/win版
  • 原文地址:https://blog.csdn.net/weixin_53170971/article/details/126436256