加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

深入浅出的分析 Properties

发布时间:2019-11-12 14:17:08 所属栏目:优化 来源:炸鸡可乐
导读:最近在看 java 集合源码的时候,发现原来我们经常使用的 Properties 类既然继承自 Hashtable!又涨见识了! 01. 摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properti
副标题[/!--empirenews.page--]

最近在看 java 集合源码的时候,发现原来我们经常使用的 Properties 类既然继承自 Hashtable!又涨见识了!

深入浅出的分析 Properties

01. 摘要

在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properties 等等。

深入浅出的分析 Properties

在上一章节中,咱们介绍到 Hashtable 的数据结构和算法实现,在 Java 中其实还有一个非常重要的类 Properties,它继承自 Hashtable,主要用于读取配置文件。

本文通过看 JDK 和一些网友的博客总结,主要从 Properties 的用法实例来做介绍,如果有理解不当之处,欢迎指正。

02. 简介

Properties 类是 java 工具包中非常重要的一个类,比如在实际开发中,有些变量,我们可以直接硬写入到自定义的 java 枚举类中。

但是有些变量,在测试环境、预生产环境、生产环境,变量所需要取的值都不一样,这个时候,我们可以通过使用 properties 文件来加载程序需要的配置信息,以达到一行代码,多处环境都可以运行的效果!

最常见的比如 JDBC 数据源配置文件,properties文件以.properties作为后缀,文件内容以键=值格式书写,左边是变量名称,右边是变量值,用#做注释,比如新建一个jdbc.properties文件,内容如下:

深入浅出的分析 Properties

Properties 类是 properties 文件和程序的中间桥梁,不论是从 properties 文件读取信息,还是写入信息到 properties 文件,都要经由 Properties 类。

好了,唠叨了这么多,咱们回到本文要介绍的主角Properties!

从集合 Map 架构图可以看出,Properties 继承自 Hashtable,表示一个持久的 map 集合,属性列表以 key-value 的形式存在,Properties 类定义如下:

  1. public class Properties extends Hashtable<Object,Object> { 
  2.     ...... 

Properties 除了继承 Hashtable 中所定义的方法,Properties 也定义了以下几个常用方法,如图所示:

 深入浅出的分析 Properties

常用方法介绍

set 方法(添加修改元素)

set 方法是将指定的 key, value 对添加到 map 里,在添加元素的时候,调用了 Hashtable 的 put 方法,与 Hashtable 不同的是, key 和 value 都是字符串。

打开 Properties 的 setProperty 方法,源码如下:

  1. public synchronized Object setProperty(String key, String value) { 
  2.     //调用父类 Hashtable 的 put 方法 
  3.     return put(key, value); 

方法测试如下:

  1. public static void main(String[] args) { 
  2.     Properties properties = new Properties(); 
  3.     properties.setProperty("name1","张三"); 
  4.     properties.setProperty("name2","张四"); 
  5.     properties.setProperty("name3","张五"); 
  6.     System.out.println(properties.toString()); 

输出结果:

{name3=张五, name2=张四, name1=张三}

get 方法(搜索指定元素)

get 方法根据指定的 key 值返回对应的 value,第一步是从调用 Hashtable 的 get 方法,如果有返回值,直接返回;如果没有返回值,但是初始化时传入了defaults变量,从 defaults变量中,也就是 Properties 中,去搜索是否有对于的变量,如果有就返回元素值。

打开 Properties 的 getProperty 方法,源码如下:

  1. public String getProperty(String key) { 
  2.     //调用父类 Hashtable 的 get 方法 
  3.     Object oval = super.get(key); 
  4.     String sval = (oval instanceof String) ? (String)oval : null; 
  5.      //进行变量非空判断 
  6.     return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval; 

查看 defaults 这个变量,源码如下:

  1. public class Properties extends Hashtable<Object,Object> { 
  2.     protected Properties defaults; 

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读