全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java中的反射机制详解

Java中的反射机制详解

反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧!

一,先看一下反射的概念:

主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!

看概念很晕的,继续往下看。

二,反射机制的作用:

1,反编译:.class-->.java

2,通过反射机制访问java对象的属性,方法,构造方法等;

这样好像更容易理解一些,下边我们具体看怎么实现这些功能。

三,在这里先看一下sun为我们提供了那些反射机制中的类:

java.lang.Class;        

java.lang.reflect.Constructor; java.lang.reflect.Field;    

java.lang.reflect.Method;

java.lang.reflect.Modifier;

很多反射中的方法,属性等操作我们可以从这四个类中查询。还是哪句话要学着不断的查询API,那才是我们最好的老师。

四,具体功能实现:

1,反射机制获取类有三种方法,我们来获取Employee类型

//第一种方式:
Classc1 = Class.forName("Employee");
//第二种方式:
//java中每个类型都有class 属性.
Classc2 = Employee.class;
 
//第三种方式:
//java语言中任何一个java对象都有getClass 方法
Employeee = new Employee();
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)

2,创建对象:获取类以后我们来创建它的对象,利用newInstance:

   Class c =Class.forName("Employee");
 
      //创建此Class 对象所表示的类的一个新实例
      Objecto = c.newInstance(); //调用了Employee的无参数构造方法.

3,获取属性:分为所有的属性和指定的属性:

a,先看获取所有的属性的写法:

//获取整个类
  Class c = Class.forName("java.lang.Integer");
    //获取所有的属性?
  Field[] fs = c.getDeclaredFields();
 
        //定义可变长的字符串,用来存储属性
  StringBuffer sb = new StringBuffer();
     //通过追加的方法,将每个属性拼接到此字符串中
  //最外边的public定义
  sb.append(Modifier.toString(c.getModifiers()) + " class " + c.getSimpleName() +"{\n");
     //里边的每一个属性
  for(Field field:fs){
  sb.append("\t");//空格
  sb.append(Modifier.toString(field.getModifiers())+" ");//获得属性的修饰符,例如public,static等等
  sb.append(field.getType().getSimpleName() + " ");//属性的类型的名字
  sb.append(field.getName()+";\n");//属性的名字+回车
  }
 
  sb.append("}");
 
  System.out.println(sb);

 b,获取特定的属性,对比着传统的方法来学习:

public static void main(String[] args) throws Exception{
  
<span style="white-space:pre"> </span>//以前的方式:
 /*
 User u = new User();
 u.age = 12; //set
 System.out.println(u.age); //get
 */
  
 //获取类
 Class c = Class.forName("User");
 //获取id属性
 Field idF = c.getDeclaredField("id");
 //实例化这个类赋给o
 Object o = c.newInstance();
 //打破封装
 idF.setAccessible(true); //使用反射机制可以打破封装性,导致了java对象的属性不安全。
 //给o对象的id属性赋值"110"
 idF.set(o, "110"); //set
 //get
 System.out.println(idF.get(o));
}

4,获取方法,和构造方法,不再详细描述,只来看一下关键字:

这样我们就可以获得类的各种内容,进行了反编译。对于JAVA这种先编译再运行的语言来说,反射机制可以使代码更加灵活,更加容易实现面向对象。

五,反射加配置文件,使我们的程序更加灵活:

在设计模式学习当中,学习抽象工厂的时候就用到了反射来更加方便的读取数据库链接字符串等,当时不是太理解,就照着抄了。看一下.NET中的反射+配置文件的使用:

当时用的配置文件是app.config文件,内容是XML格式的,里边填写链接数据库的内容:

   <configuration>
  <appSettings>
  <add   key="" value=""/>
  </appSettings>
      </configuration>

反射的写法:

 assembly.load("当前程序集的名称").CreateInstance("当前命名空间名称".要实例化的类名);

这样的好处是很容易的方便我们变换数据库,例如我们将系统的数据库从SQL Server升级到Oracle,那么我们写两份D层,在配置文件的内容改一下,或者加条件选择一下即可,带来了很大的方便。

当然了,JAVA中其实也是一样,只不过这里的配置文件为.properties,称作属性文件。通过反射读取里边的内容。这样代码是固定的,但是配置文件的内容我们可以改,这样使我们的代码灵活了很多!

综上为,JAVA反射的再次学习,灵活的运用它,能够使我们的代码更加灵活,但是它也有它的缺点,就是运用它会使我们的软件的性能降低,复杂度增加,所以还要我们慎重的使用它。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Java中的反射机制  # java  # 反射机制  # 详解java中反射机制(含数组参数)  # Java的RTTI和反射机制代码分析  # Java 中利用泛型和反射机制抽象DAO的实例  # 老生常谈Java反射机制(必看篇)  # Java反射机制详解_动力节点Java学院整理  # Java 反射机制详解及实例  # Java基础--反射机制  # Java反射机制实例代码分享  # 配置文件  # 使我  # 都有  # 先看  # 我们可以  # 反编译  # 在这里  # 也有  # 最好的  # 才是  # 很容易  # 也可  # 能在  # 很高  # 希望能  # 带来了  # 任何一个  # 升级到  # 会使  # 看一下 


相关文章: 建站之星2.7模板快速切换与批量管理功能操作指南  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何快速上传建站程序避免常见错误?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  建站之星如何助力企业快速打造五合一网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  在线制作视频网站免费,都有哪些好的动漫网站?  网站制作模板下载什么软件,ppt模板免费下载网站?  无锡营销型网站制作公司,无锡网选车牌流程?  网站制作公司,橙子建站是合法的吗?  建站主机选购指南:核心配置与性价比推荐解析  网站制作价目表怎么做,珍爱网婚介费用多少?  建站DNS解析失败?如何正确配置域名服务器?  小型网站制作HTML,*游戏网站怎么搭建?  建站之星安装失败:服务器环境不兼容?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何零基础开发自助建站系统?完整教程解析  音响网站制作视频教程,隆霸音响官方网站?  建站之星CMS五站合一模板配置与SEO优化指南  制作网站怎么制作,*游戏网站怎么搭建?  如何在建站主机中优化服务器配置?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  公司网站的制作公司,企业网站制作基本流程有哪些?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  如何在Golang中使用replace替换模块_指定本地或远程路径  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  5种Android数据存储方式汇总  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  黑客入侵网站服务器的常见手法有哪些?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  宝塔新建站点为何无法访问?如何排查?  如何用免费手机建站系统零基础打造专业网站?  宝塔建站后网页无法访问如何解决?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  ,在苏州找工作,上哪个网站比较好?  宁波自助建站系统如何快速打造专业企业网站?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  制作网站外包平台,自动化接单网站有哪些?  网站制作壁纸教程视频,电脑壁纸网站?  一键网站制作软件,义乌购一件代发流程?  寿县云建站:智能SEO优化与多行业模板快速上线指南  深圳网站制作的公司有哪些,dido官方网站?  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何挑选高效建站主机与优质域名?  建站为何优先选择香港服务器?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  营销式网站制作方案,销售哪个网站招聘效果最好?  如何用wdcp快速搭建高效网站?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。