当前位置: 首页 > news >正文

装饰公司网站建设重庆市建设施工安全管理网官网

装饰公司网站建设,重庆市建设施工安全管理网官网,长荣建设深圳公司网站,郑州注册网站我是南城余#xff01;阿里云开发者平台专家博士证书获得者#xff01; 欢迎关注我的博客#xff01;一同成长#xff01; 一名从事运维开发的worker#xff0c;记录分享学习。 专注于AI#xff0c;运维开发#xff0c;windows Linux 系统领域的分享#xff01; 本…我是南城余阿里云开发者平台专家博士证书获得者 欢迎关注我的博客一同成长 一名从事运维开发的worker记录分享学习。 专注于AI运维开发windows Linux 系统领域的分享 本章节对应知识库 反射机制 · 语雀 反射 Java给我们提供的一套API使用这套API可以在运行时动态获取指定对象所属的类创建运行时类的对象调用指定的结构属性、方法等。 Reflection反射是被视为动态语言的关键反射机制允许程序在运行期间借助于Reflection API取得任何类的内部信息并能直接操作任意对象的内部属性及方法。 面向对象调用指定结构属性、方法等功能使用反射与不使用的区别 不使用反射我们需要考虑封装性。比如出了Person类之后就不能调用Person类中私有的结构 使用反射我们可以调用运行时类中任意的构造器、属性、方法。包括了私有的属性、方法、构造器。 反射与创建对象调用方法的方式使用场景 》从作为开发者角度我们开发中主要是完成业务代码对于相关的对象、方法的调用都是确定的。所以在开发中我们使用非反射的方式多一些。 》因为反射体现了动态性可以在运行时动态的获取对象所属的类动态的调用相关的方法所以我们在涉及框架时会使用大量的反射。意味着如果需要学习框架源码时那么就需要学习反射。 框架 注解反射设计模式 封装性体现的是是否建议我们调用内部api的问题。比如private声明的结构意味着不建议调用 反射 体现的是我们能否调用的问题。因为类的完整结构都加载了内存中所以我们就有能力进行调用 反射的优缺点 优点 》提高了Java程序的灵活性和扩展性降低了耦合性提高了自适应能力 》允许程序创建个控制任何类的对象无需提前硬编码目标类 缺点 》反射的性能较低 反射机制主要应用在对灵活性和扩展性要求很高的系统框架上 》反射会模糊程序内部逻辑可读性较差 反射平时开发中我们使用的并不多。主要是在框架的底层使用 class - 反射的源头 针对于编写好的。java源文件进行编译使用javac.exe会生成一个或多个.class字节码文件。接着我们使用java.exe命令对指定的.class文件进行解释运行。在这个解释运行的过程中我们需要将.class字节码文件加载使用类的加载器到内存中存在方法区。加载到内存中的.class文件对应的结构即为Class的一个实例。 比如加载到内存中的Person类或String类都作为Class的一个一个的实例 Class clazz1 Person.class; Class clazz1 String.class; class可以看作是反射的源头 获取Class实例的几种方式 方式1要求编译期间已知类型 前提若已知具体的类通过类的class属性获取该方法最为安全可靠程序性能最高 实例 Class clazz String.class; 方式2获取对象的运行时类型 前提已知某个类的实例调用该实例的getClass()方法获取Class对象 实例 Class clazz www.atguigu.com.getClass(); 方式3可以获取编译期间未知的类型 前提已知一个类的全类名且该类在类路径下可通过Class类的静态方法forName()获取可能抛出ClassNotFoundException 实例 Class clazz Class.forName(java.lang.String); 方式4其他方式(不做要求) 前提可以用系统类加载对象或自定义加载器对象加载指定路径下的类型 实例 ClassLoader cl this.getClass().getClassLoader(); Class clazz4 cl.loadClass(类的全类名); Class的实例指向结构 简言所有的Java类型 》class:外部类成员成员内部类静态内部类局部内部类匿名内部类 》interface:接口 》[]数组 》enum:枚举 》annotation注解interface 》primitive type :基本数据类型 》void 类的加载过程(了解) 过程1类的装载(loading) 将类的class文件读入内存并为之创建一个java.lang.Class对象。此过程由类加载器完成 过程2链接(linking) 验证(Verify):确保加载的类信息符合JVM规范例如以cafebabe开头没有安全方面的问题。 准备(Prepare):正式为类变量static分配内存并设置类变量默认初始值的阶段这些内存都将在方法区中进行分配。 解析(Resolve):虚拟机常量池内的符号引用常量名替换为直接引用地址的过程。 过程3初始化(initialization) 执行类构造器clinit()方法的过程。 类构造器clinit()方法是由编译期自动收集类中所有类变量的赋值动作和静态代码块中的语句合并产生的。 关于类的加载器(了解、JDK8版本为例) 作用负责类的加载并对应于一个Class的实例。 分类分为两种 BootstrapClassLoader:引导类加载器、启动类加载器 使用C/C语言编写的不能通过Java代码获取其实例 负责加载Java的核心库JAVA_HOME/jre/lib/rt.jar或sun.boot.class.path路径下的内容 继承于ClassLoader的类加载器 ExtensionClassLoader:扩展类加载器 负责加载从java.ext.dirs系统属性所指定的目录中加载类库或从JDK的安装目录的jre/lib/ext子目录 下加载类库 SystemClassLoader/ApplicationClassLoader:系统类加载器、应用程序类加载器 我们自定义的类默认使用的类的加载器。 用户自定义类的加载器 实现应用的隔离同一个类在一个应用程序中可以加载多份数据的加密。 以上的类的加载器是否存在继承关系 No! 使用类的加载器获取流并读取配置文件信息 /* * 需求通过ClassLoader加载指定的配置文件 * */ Test public void test3() throws IOException {Properties pros new Properties();//通过类的加载器读取的文件的默认的路径为当前module下的src下InputStream is ClassLoader.getSystemClassLoader().getResourceAsStream(info1.properties);pros.load(is);String name pros.getProperty(name);String pwd pros.getProperty(password);System.out.println(name : pwd); } 反射的应用 1. 创建运行时类的对象 如何实现 通过Class的实例调用newInstance()方法即可 且需要满足以下条件 》要求运行时必须提供一个空参构造器 》要求提供的空参构造器的权限要足够 JavaBean中要求给当前类提供一个公共的的空参的构造器。 作用 场景1子类对象在实例化时子类的构造器的首行默认调用父类空参构造器 场景2在反射中经常用来创建运行时类的对象。那么我们要求各个运行时类都提供一个空参构造器便于我们编写创建运行时类对象的代码。 2. 获取运行时类的内部结构 》获取运行时类的内部结构所有属性、所有方法、所有构造器 》获取运行时类的内部结构父类、接口、包、带泛型的父类、父类的泛型等 3. 调用指定的结构指定的属性、方法、构造器 调用指定的属性步骤 步骤1. 通过Class实例调用getDeclareField(String fieldName)获取运行时类指定名的属性 步骤2. setAccessible(true),确保此属性是可以访问的 步骤3. 通过Field类的实例调用get(Object obj)(获取操作) 或set(Object obj,Object value)设置的操作进行操作 调用指定的方法步骤 步骤1. 通过Class实例调用getDeclareField(String methodNameClass ... args)获取运行时类指定的方法 步骤2. setAccessible(true),确保此属性是可以访问的 步骤3. 通过Method实例invoke(Object obj,Object .. objs),即为对Method对应方法的调用 invoke()返回值即为Method对应方法的返回值 特别的如果Method对应的方法的返回值类型为void,则invoke()返回值为null 调用指定的构造器步骤 步骤1. 通过Class的实例调用getDeclaredConstructor(Class ... args),获取指定参数的构造器 步骤2. setAccessible(true):确保此构造器是可访问的 步骤3. 通过Constructor实例调用newInstance(Object ... objs),返回一个运行时类的实例 4. 注解的使用 框架层面
http://wiki.neutronadmin.com/news/337236/

相关文章:

  • 怎样建设网站优化学院网站建设与管理办法
  • 网站建设兼职薪酬怎么样网站开发工作流程
  • 农资销售网站建设方案凡科建站怎么样
  • 带搜索网站建设视频教程慈溪做网站公司哪家好
  • 自己怎么个人网站wordpress多作者
  • lamp网站架构小红书推广在哪里
  • 可视化网站设计工具网页设计作业主题推荐
  • 泉州响应式网站建设怎么做原创动漫视频网站
  • 网站报备深圳建工建设集团有限公司
  • 德城区建设局网站永清建设局网站
  • 给公司做网站 图片倾权福州网站推广
  • 是否有可能一个人完成网站开发南通网站制作价格
  • 有哪些网站免费学习建设网站的wordpress 公众号主题
  • 保定网站建设方法网店seo关键词
  • 网站注销申请表鞍山建站
  • ai可以做网站吗wordpress查询页面id
  • 天津建设银行官网站首页学院招生网站建设方案
  • 做教育的需要做个网站吗怎么做告白网站
  • 榆林高端网站建设如何设计wordpress 登录后页面空白
  • 给自己的爱人做网站网站开发语言排名
  • 西安建设用地规划查询网站wordpress账号破解
  • 旅游网站建设设计公司怎么申请一个网站
  • 网站建设推广是什么工作室用html5做的网站的原代码
  • 中国手机网站建设公司开发公司保障员工安全的措施
  • 做网站的目的与意义手机网站建设网
  • 加强协会网站建设意义sem培训机构
  • 免费做金融网站有哪些WordPress重置密码链接失效
  • 响应式网站要多久南京高淳开展规模性核酸检测
  • 开通公司网站怎么做分录在线教育网站开发经验简历填写
  • 深圳广告网站设计制作树莓派怎么打开 wordpress