反射

在反射中如果不使用强制获取私有的方法,无论是再获取成员变量还是方法的时候获取被public修饰的

反射首先获取构造,在获取构造之后才可以获取成员的方法

在java的反射机制都是在运行状态中的,对于任意一个类,都可以知道这个类的所有方法和属性(包括私有),对于人一个类,都能够调用他的任意一个属性和方法,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

如果想要解刨一个类,首先必须获取到该类的字节码文件对象,而解刨使用的就是class类中的方法,所以先要获取每个字节码文件对应的class 类型的对象

反射使用的三种方式(获取类对象的三种方式)

1,创建对象的形式获取类对象   new Student().getClass()

2,直接类名点calss 获取类对象  Student.class

3,根据类的全路径,进行获取类对象  Class.forName("类的全路径")

反射获取构造方法并使用

通过反射获取构造方法并使用

Construcotr <?> [] getConstructors() 获取全部都是都public 修饰的构造方法

Construcotr <?> [] getConstructors(Class<?> ... paramenterType) 获取时可以传入指定的字节码文件,获取有参数的构造

Class  类中的 T newInstance() 方法,在创建一个没空参数的实例对象

Constructor 类中的 newInstance()方法,是在获取参数的时候,看传入的参数列表,如果参数列表中有数据,则newInstance() 方法中也需要传入参数

下面总结一下反射的使用步骤:

 1,首先获取该类的字节码文件对象

       在获取该类的字节码文件的时候,有三种方式进行获取上面已经介绍到

2,获取该类中的构造方法(的对象)

       Constructor <?> [] getConstructors(): 查看字节码对象中有哪些构造方法,然后通过getConstructor(Class <?>  ... parametType),回去有参数的字节码对象,在这一步只是获取到字节码对象还没有真正的创建对象

3,通过根据构造获取的字节码对象,从而进行实例化对象

      在根据构造方法获取的字节码对象,返回Constructor 对象,该对象中有newInstance(Object ...obj ) 的方法,该方法中的参数根据第二步中使用构造获取字节码对象时传递的参数的类型的字节码的参数类型和个数,进行传值,从而实例化该对象

通过反射获取成员变量并使用

    在获取的时候,分只获取公共的成员变量和全部的成员变量

   公共的成员变量

       Field [] getFidlds()  获取所有的公共的成员变量

      Field getField(String name) : 根据指定的字段名称(成员变量的名称),获取对应的字段对象,但是只能获取public 修饰的

    全部的成员变量(包括私有)

       Field [] getDeclaredFields() 获取所有的成员变量(字段名称)

       Field getDeclarredField(String name ): 根据指定的字段名称(成员变量名),获取对应的字段对象,

强制获取私有的属性

   1:获取该类的字节码文件对象

   2: 有该类的字节码文件对象,产生一个实例(没有参数)

    3: 通过该类的字节码对象,获取指定的字段(字段名称)

    4:如果是非public的字段,可以通过getDeclaredField() 获取非public的字段强制获取

    5: 去除 public 的权限,使用setAccessable(true) 方法,将public的修饰去掉

   6: 对成员变量操作,无论是获取还是修改,只有上面将权限去除掉才可以使用

       只有在get和set的时候需要将权限消除

通过反射获取成方法并使用

    在获取的时候参数列表中只能传入类型的字节码对象 

       Method[] getMethods() ;返回所有非私有的方法名 

       Method getMethod(Stirng name,Class<?> .. . paramterType):返回非私有的并且指定参数的方法:拿着传入的参数的类型去字节码对象中中寻找,有匹配的返回Method对象

       Method[] getDeclaredMethods()返回所有的方法包括私有,但是不返回继承的方法

      Method getDeclaredMethod(String name, Class<?>... parameterTypes)返回指定参数的方法包括私有的,就是拿着方法名和参数列表去字节码对象中查找

在上面的操作中,只能传入形参,如果要传入实参,需要下面的方法(就是操作具体的方法,跟上面操作构造函数一般)

Object invoe (Object obj ,Object ...args),将制定的数据传入指定的方法中(实参)、

Obj 表示,对象在传入之前的时候,需要指定要把值给那个对象中的方法,

操作方法的步骤:

   1: 获取字节码对象

   2:获取实例化对象

   3:通过字节码文件的对象获取Method对象,这一步只是 反射阶段,可变参数的数据类型字节码文件对象

   4;  执行方法,将数据写入,通过Method 对象去调用invoke (实例化对象代表该方法是那个duixiang中的方法,具体的实际操作)返回Object

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值