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

java properties/反射基础

Properties

1.不使用Properties的普通方法

建立一个文件,然后用BufferReader读取,如图

这里用 FileReader 作为参数创建了一个 BufferedReader 对象,因为直接使用 BufferedReader 不能独立读取文件,因为它是依赖于一个字符流或者字节流来读取文件内容的。也就是说,BufferReader本身并不具备从磁盘中读取数据的能力,它需要借助 FileReader(或者其他字符流)来进行文件的输入操作

BufferedReader 是 Java 中用于读取字符流的一个类,它提供了缓冲功能,能有效提高读取性能

FileReader 是 Java 中的一个字符输入流类,它主要用于从文件中读取字符数据(而非字节数据)

它是一个低级流,不具有缓冲区,直接从文件中读取数据。如果文件较大或频繁读取,会导致性能较差。因此,通常与 BufferedReader 结合使用,以提高性能。

但是只要数据一多,这种方法很麻烦,而且如果想要拿出来某一个值,那又得写if语句

2.介绍并使用Properties

使用properties修改文件

使用store创建时,null处对应的是备注

于是这里出现了一个mysql2.properties的文件并创建了输入值

再修改一下源代码,mysql2中的中的值也重新被修改了

底层源码

反射

反射的引入

反射(Reflection)是 Java 中的一种强大机制,它允许程序在运行时动态地查询和操作类、对象、方法、字段等信息。通过反射,Java 程序可以在运行时加载、探测、调用类中的方法,而不是在编译时就确定这些信息。

1.按照上图要求输入以下代码(过程中抛了很多异常)

但是,不可以像Cat cat2=new com.hspedu.Cat()这样创建对象!因为它是一个字符串

2.反射机制很重要,它可以通过调整配置文件,从而不需要修改源码来控制程序

这里的methodName就是前面的method,改了个名而已

其中返回Class类型的对象很重要,注意这里class是个类

java9以上的版本的newInstance()已过时,换成下面这种

Class cla=Class.forName(classfullpath);// 动态加载指定类,使用 classfullpath(类的全路径)
Object o = cla.getDeclaredConstructor().newInstance();
System.out.println(o.getClass().getName());// 输出对象实例的类名,确认对象是否成功创建

最终可以成功输出方法

如果把re.properties中的method换成别的方法,依旧可以不改源码直接调用

※反射的机制

1.

2.

※反射原理图

但我还不是特别理解,等学了jvm后来补充?

类加载器这个过程,就是体现反射的过程

3.主要类

constructor2处传入的String.class就是String类的class对象

4.优缺点

4.1传统方式

4.2反射方式

4.3可以看到时间差异

5.反射优化

5.1 在原有代码上加一个setAccessible(true)即可

5.2 m3是改良后的函数,可以看到是有作用的


文章转载自:

http://r1lUpMzZ.kbqbx.cn
http://Ya4HcR9S.kbqbx.cn
http://wFTeezCq.kbqbx.cn
http://QXvjb12Z.kbqbx.cn
http://o2uGNMdi.kbqbx.cn
http://VdPmM8q5.kbqbx.cn
http://FUy80OiE.kbqbx.cn
http://1nodDvDp.kbqbx.cn
http://e43WscrH.kbqbx.cn
http://KRTAXP2T.kbqbx.cn
http://T0tFAWlZ.kbqbx.cn
http://3jKS847O.kbqbx.cn
http://qGp6s0Sy.kbqbx.cn
http://QBHvDMnZ.kbqbx.cn
http://v0M6Z6CD.kbqbx.cn
http://U3ToiAod.kbqbx.cn
http://LyE1xTwT.kbqbx.cn
http://8BGWsErv.kbqbx.cn
http://x83BCqOA.kbqbx.cn
http://qSNuvL5G.kbqbx.cn
http://wD3loitS.kbqbx.cn
http://zheklgol.kbqbx.cn
http://ifrdDRRH.kbqbx.cn
http://FbPUH0hQ.kbqbx.cn
http://6tJ3fvKh.kbqbx.cn
http://FAnj4zXs.kbqbx.cn
http://nTtNDyXU.kbqbx.cn
http://nsvoYssH.kbqbx.cn
http://3eCPOawR.kbqbx.cn
http://umIAnyJ4.kbqbx.cn
http://www.dtcms.com/a/379191.html

相关文章:

  • solidity的高阶语法4
  • Vue.js Data定义方式对比 data() { return {...} } 与 data: {} 的区别
  • P11961原根判断(1)
  • 特征空间的转换方法 IPM/LSS/Transformer
  • 【Vue3】05-Options API和Composition API的区别
  • 锁框架-面试
  • 电商 API 爬虫高阶技巧:多线程 / 异步请求结合,突破接口频率限制
  • vue两个组件互相引入时候会报错
  • 《芯片封装后未测试品粘连及边缘残胶的多维度工艺与材料失效分析》
  • MySQL基础全面解析
  • 探索容器技术:从LXC到Podman的演进
  • IntelliJ IDEA 启动项目时配置端口指南
  • java 实现rtsp 直播流下载
  • Python高级编程实战:装饰器、迭代器与生成器的深度应用
  • 高级SQL技术综合指南(MySQL)
  • 【51单片机】【protues仿真】基于51单片机电子琴系统
  • 解决idea2021maven依赖导入后还是找不到包,爆红无法导入
  • Netty学习
  • VGGNet:为什么16层简单堆叠能成为CNN经典?
  • 知识图谱RAG
  • 与controller层的接口入参注解@Valid有关的实体类判断空的注解
  • 基于AT89C52单片机的智能蓝牙台灯设计
  • Javaweb前端内容的思维导图
  • PyTorch深度学习实战【10】之神经网络的损失函数
  • 3.前置知识学习
  • Whois查询域名信息
  • 机器学习vs人类学习:人类学习如何借鉴机器学习方法?
  • ES6 面试题及详细答案 80题 (41-54)-- 异步编程(Promise/Generator/async)
  • Bug记录:Lombok @Builder 注解的两大陷阱及解决方案
  • ARM汇编 beep及bsp工程管理