范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

关于Java反射的一点代码

  一、背景
  最近又看了下java反射的一些东西,所以简单汇总记录一下.二、关于java反射2.1、什么是java反射
  ① 反射是一种动态获取信息及调用对象的一种机制。
  ② 对于一个在运行中的java类,我们都可以知道它的所有属性和方法。
  ③ 对于一个在运行状态中的对象,我们也都能通过反射来调用它的任意方法已经属性的调用及改变2.2、什么情况下会用到反射
  ① 一般来说我们在日常开发中直接用到反射的地方不多,它更多用于框架的开发
  ② 不能明确接口调用的是哪个函数,需要根据传入参数再运行时决定。
  ③ 不能明确传入函数的参数类型,但是又需要再运行时处理任意对象2.3、反射给我们提供了那些支持
  ① Class.forName(String className): 返回给定字符串名称的类或接口的相关类对象
  ② getDeclaredConstructors():返回一个数组,包含类的公共构造函数
  ③ getConstructor(Class<?>, paremeterTypes):返回指定反射类的指定入参类型的构造函数
  ④ getDeclaredMethos():返回一个数组,包含反射类的所有公共、保护、私有、默认方法(不包括继承的方法 )
  ⑤ getDeclaredFields():返回一个数组,包含反射类的所有字段属性
  ⑥ getDeclaredField(String fieldName): 返回反射类指定名称的字段属性
  ⑦ getMethods(): 返回一个数组,包含反射类的公共方法,包含继承的方法
  ⑧ getMethod(String name, Class<?>, paremeteraTypes): 返回反射类指定的公共成员方法
  PS:更多信息,请参考官方文档。 三、代码示例     @Data     public class Person {              private String name;          private int age;          public Person(){             System.out.println("我是默认构造方法,我被调用了!");         }          public Person(String name, int age){             System.out.println("有参构造 --- 姓名为:" + name + " 年龄为:" + age);         }      }
  import com.example.easyexcel.model.Person;     import java.lang.reflect.Constructor;     import java.lang.reflect.Field;     import java.lang.reflect.InvocationTargetException;      public class Test     {         public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException, ClassNotFoundException,              NoSuchMethodException, InvocationTargetException, InstantiationException, NoSuchFieldException {             System.out.println("通过反射调用类的默认构造方法");             Class person = Class.forName("com.example.easyexcel.model.Person");             Constructor constructor = person.getConstructor(null);             constructor.newInstance(null);              System.out.println("通过反射调用类的有参构造方法");             Constructor constructor1 = person.getConstructor(String.class, int.class);             constructor1.newInstance("XiaoMing", 19);             System.out.println("======================================");              Person bean = new Person();             bean.setName("ZZSS");             Field[] fields = bean.getClass().getDeclaredFields();             Field field = bean.getClass().getDeclaredField("name");             field.setAccessible(true);             Object objectName = field.get(bean);             System.out.println("获取指定字段name的值为:" + objectName);             System.out.println("======================================");              for(int i = 0;i < fields.length;i++){                 Field fieldTmp = fields[i];                 // 设置属性是可以访问的                 fieldTmp.setAccessible(true);                 // 得到此属性的值                 Object valTmp = fieldTmp.get(bean);                 String type = fieldTmp.getType().toString();                 System.out.println("字段类型为:" + type);                 System.out.println("属性名:" + fieldTmp.getName());                 System.out.println("属性值:" + valTmp);                 System.out.println("======================================");                 // 得到此属性的类型                 if(type.endsWith("String"))                 {                     // 给属性设值                     fieldTmp.set(bean,"LFG");                 }                 else if(type.endsWith("int") || type.endsWith("Integer"))                 {                     // 给属性设值                     fieldTmp.set(bean,121);                 }             }              System.out.println("重新设值后的对象属性为:"+bean.getName()+"  "+bean.getAge());         }      }
  Java
  程序输出如下:
  通过反射调用类的默认构造方法
  我是默认构造方法,我被调用了!
  通过反射调用类的有参构造方法
  有参构造 --- 姓名为:XiaoMing 年龄为:19
  ======================================
  我是默认构造方法,我被调用了!
  获取指定字段name的值为:ZZSS
  ======================================
  字段类型为:class java.lang.String
  属性名:name
  属性值:ZZSS
  ======================================
  字段类型为:int
  属性名:age
  属性值:0
  ======================================
  重新设值后的对象属性为:LFG 121
  四、日志模块中部分代码示例     private void saveSysLog(ProceedingJoinPoint joinPoint, long time) {         MethodSignature signature = (MethodSignature) joinPoint.getSignature();         Method method = signature.getMethod();          SysLogEntity sysLog = new SysLogEntity();         SysLog syslog = method.getAnnotation(SysLog.class);         if (syslog != null) {             // 注解上的描述             sysLog.setOperation(syslog.value());         }          // 请求的方法名         String className = joinPoint.getTarget().getClass().getName();         String methodName = signature.getName();         sysLog.setMethod(className + "." + methodName + "()");          // 请求的参数         Object[] args = joinPoint.getArgs();         try {             String params = new Gson().toJson(args[0]);             sysLog.setParams(params);              …         } catch (Exception e) {          }          // 获取request         HttpServletRequest request = HttpContextUtils.getHttpServletRequest();         // 设置IP地址         sysLog.setIp(IPUtils.getIpAddr(request));          …         sysLogApi.saveLog(sysLog);     }
  Java
  PS: 可以参见:Springboot自定义注解日志管理实现

希区柯克女郎盘点希区柯克,一位享誉世界的电影导演。他从影近六十年间,拍摄制作了超过六十部作品,为影迷们奉献了众多家喻户晓的经典作品他创造并完善了制造悬念的艺术,使银幕下的观众身临其境,他名字甚至成从屏下指纹到屏下摄像头,国产科技制胜的创新步伐正不断加大谈到手机行业,我们印象最深的可能还是苹果公司,自从乔帮主开创性的开启了智能手机的先河后,便一直引领着手机行业的发展并产生深刻影响,他所采用的设计理念,产品语言和材质工艺,无不被人所向阳而生!弘阳地产弘心服务体系白皮书发布随着社会发展行业进步,消费正在升级,消费者需求同步进化,更多人在物质富足的同时,对尊重审美和自我实现有了更多的精神需求。这是一种高阶的需求驱动,它改变了人们的生活方式,也塑造了新的窦文涛圆桌派第五季重磅回归,第一期邓亚萍解读乒乓奥运风云时隔将近两年,圆桌派第五季终于开播了!窦文涛马未都许子东陈晓卿周轶君又可以看到这群有趣的文化人围坐聊天。第五季首期嘉宾除了窦文涛马未都和许子东这三位老朋友,邓亚萍首次受邀出席。当期蒙牛总裁卢敏放生态化乳业有助于捍卫全球粮食安全10月11日15日,生物多样性公约缔约方大会第十五次会议(COP15)第一阶段会议在昆明召开。13日,COP15高级别会议部长级全体会议闭幕式隆重举办。会议由生态环境部部长黄润秋主22家万达酒店再易主,融创交棒华住集团管理与万达分手后,融创将22家酒店的管理权交棒给了华住集团,双方将进一步发展和壮大合资公司永乐华住。华住新增酒店包,你住过华住旗下的酒店么?10月9日,融创官微宣布,融创文旅计划将旗下华为终端完成6000元以内的产品布局,品牌效应更加明显26日,华为在深圳坂田基地,举办了一场小型发布会,正式对外发布了传闻已久的mateX5G版,还发布了全新适配的5G终端路由器5GCPEPro,支持5G网络,官方售价2499,在会上从产品特性解析华为鸿蒙系统科技创新吹响中国高端发展号角华为2019开发者大会宣布正式发布基于微内核的全场景的分布式鸿蒙系统,从之前的喧嚣尘上和各方猜测,关于鸿蒙自身的创新和科技搭配都落下尘埃,至此这款备受瞩目的国产操作系统Harmon总要年轻人选择,这款20万内最值得购买的SUV真的行吗?值不值?专注SUV的长城在几年前就打出了中国第一款豪华SUV的名头,几乎还原概念车型的设计让wey备受瞩目,从第一年的每月销售过万,到后期的增长疲软,vv7话题一直不断,这款车型从来没有停三打价格战让长虹崛起,如今无人问津,昔日ampampquot彩电大王ampampquot走向末路他四十多岁时老将出马,带领企业一举成名。然而企业的发展几经波折,好在两次死里逃生,他借力改革春风成为了彩电大王。二十年来的风风火火,如今一再没落,当时的传奇人物到现在却无人问津,他德系干将家用好选择,省油耐用配置超CRV,十万级年轻奶爸选择当第一批20后出生,第一批90后迈入30岁。在人生的重要当口,或许曾今的青春热情已经转换成责任担当,男人们更多的要考虑家庭因素,要给家人更好的生活。选车不光要颜值操控,更要省油耐用
经科聚焦暑期手机销售火热,九成为国产!这些国产手机受青睐每年暑期都是手机销售旺季这两天受假期促销活动七夕节新机型上市等多重因素叠加手机市场再现热销近日相关数据显示今年17月国内市场手机总体出货量为2。03亿部同比增长15。6相当于每七个OPPO新机入网!或命名为OPPOK9Pro,搭载天玑1200最近,国内各大手机厂商都在筹备自己的新品。比如,就在今晚预热许久的iQOO8系列将会正式亮相明天下午realmeBook也将会发布。而值得关注的是,多款新机也在近日先后入网,引起了小米MIX4首销战绩出炉,手机平板都破记录,米粉支持力度真大小米是一个非常有竞争力的手机品牌,特别是近两年的市场热度,还有用户口碑来看,几乎每一代小米Redmi新机都拥有非常高的销量,从工艺设计到硬件配置,基本上全面满足了国内消费者的购机指OPPO新机通过工信部设备认证,或为K系列新品随着今年下半年新机发布潮的节目,目前已经有部分旗舰新机开始亮相,并且后续包括中低端机型在内也势必将陆续现身。日前有消息显示,OPPO旗下一款产品型号为PEYM00的新机已经通过工信ThinkPadX395售价4599元左右搭载512GB固态硬盘上班的人们最担心的就是电脑卡顿,一台性能优异的电脑至关重要。千万别让自己的工作效率拖累了工作,别人升职加薪的时候,自己闷头苦干这怎么行,今天我给大家推荐这一台超值办公利器Think微信8。0。10再度更新!又上线5个新功能,你升级了吗?分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园!就在昨天,安卓微信终于也完成了8。0。10版本更新,目前安卓和iOS微信版本号已经相同了,本次更新又上线了5个自断一臂,360安全卫士极速版上线,永久免费无弹窗广告对于电脑端的安全维护软件其实相对比较好的,算来算去也就那几个了,而笔者算是360安全卫士的忠实用户了,从拥有自己的第一台电脑就一直用到现在了,不管是台式还是笔记本,每次重装系统也好5G消息取代App小程序?今年底或将全面商用图源东方IC30秒快读1hr5G消息是什么?它有可能代替微信小程序公众号,甚至去App化。25G消息的标准统一仍在进行中,2021年底或将全面商用,运营商终端厂商开发商将如何来分这试驾韭菜神车特斯拉Model3,真的比燃油车好开吗?最近女朋友有20万左右预算买车,考虑到车的颜值,领克03奥迪A3和特斯拉这几辆车纠结了一段时间,其中价格最高的特斯拉Model3比较中意,于是去当地直营店感受一下。感受之前,浩南先特斯拉三星联手打造5nm芯片应用于自动驾驶,计划量产在即据相关消息称,特斯拉与三星已达成合作,共同研发一款全新的5nm芯片,而该款芯片未来会被用于特斯拉下一代自动驾驶平台HW4。0。据悉,5nm芯片计划于2021年第四季度进行量产。目前高颜值和高画质并存富士XE4最佳随身相机对于喜爱摄影的朋友来说,一台随身相机就和手机一样是不可或缺的装备。那么一台合格的随身相机需要符合哪些条件呢?简单来说,除了高画质表现外还要轻便小巧颜值高,这样携带更方便,也让人更有