枚举与反射

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

一.枚举类

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

枚举类如何限定对象的?

①不能和普通类一样通过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类型的构造器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值