1、属性集Properties
1.1、概述
【HashMap和Hashtable 都是通过key=value的方式来存储数据的,它俩的区别:Hashtable不能把null作为key和value】
java.util.Properties继承自Hashtable,来表示一个持久的属性集。它使用键值对结构存储数据,每个键及其对应值都是一个字符串。该类是一个非常实用的类,比如:在后续的开发中,获取数据库连接对象,获取一些配置文件信息等
创建属性文件
属性文件一般放置在src根目录下,属性文件的后缀名.properties
属性文件中,每一行只能写一个key=value,而且不需要任何的符合来修饰
1.2、Properties类
构造方法
Properties() 创建一个没有默认值的空属性列表。
基本的储存方法
- public Object setProperty(String key, String value):保存一对键值对
- public String getProperty(String key):根据键获取值
package com.bdit;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/*
Properties属性集
*/
public class Demo9 {
public static void main(String[] args) throws IOException {
//读取config.properties属性文件
InputStream inputStream=Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");
//创建Properties对象
Properties properties=new Properties();
//把InputStream对象加载到properties对象中
properties.load(inputStream);
//根据key获取值
String name=properties.getProperty("name");
String age=properties.getProperty("age");
String address=properties.getProperty("address");
//给属性集对象中的key设置值
properties.setProperty("id","1006");
String id=properties.getProperty("id");
System.out.println(id+" "+name+" "+age+" "+address);
}
}
2、枚举
2.1、枚举
- 枚举也是一种特殊的类(枚举也是一种数据类型)。枚举可以定义在类中,
- 语法:
[访问修饰符] enum 枚举名称{
} - 当然,也可以单独创建一个枚举类,语法:
[访问修饰符] enum 枚举名称{
} - 什么时候需要使用枚举来解决问题?
当一个类的对象是有固定范围的时候,不能随意创建类的对象,这时我们可以采用枚举来解决这一类型的问题。例如:性别类(男、女),季节类(春、夏、秋、冬)。
2.2、枚举的特点
- 声明枚举类以后,就必须在枚举类中的第一句代码中,声明枚举类的所有实例,实例之间用逗号隔开。如果一个枚举类没有声明实例,那么这个枚举则永远不会有实例产生。列出这些实例时系统会自动添加public static final修饰,无需程序员显式添加。
- 在枚举中也可以定义属性和方法
- 如果枚举类确实不存在任何的实例,则枚举类中的第一句代码需要添加一个分号;否则枚举无法编译。
- java为每个枚举类都提供了一个values()方法,用来获取枚举中所有的实例对象。
- 可以通过枚举类.对象名.属性名/方法名的方式调用枚举类中的普通方法和属性
- 如果调用枚举类中的静态方法和属性,语法:枚举类.静态属性/静态方法。
- 枚举类也可以有构造方法,而且构造方法的访问修饰符必须是private。当枚举类在被使用时,枚举类会自动调用构造方法,创建出在枚举中声明的所有实例对象。
- 枚举中的构造方法也可以有参数,如果构造方法是有参数的,那么在声明枚举实例对象时,就必须传递参数,语法:实例名称(参数列表)
- 枚举也可以实现接口
- 枚举不可以继承任何形式的类。
package com.bdit;
/*
定义枚举enum
*/
public class Demo10 {
public enum Gender{
//定义枚举类的实例对象
MAN,WOMEN;
}
public static void main(String[] args) {
Gender[]gs=Gender.values();
for(Gender g:gs){
System.out.println(g);
}
Gender2.MAN.display();
Gender2.display2();
}
}
package com.bdit;
/*
枚举类
*/
public enum Gender2 {
//定义枚举类对象
MAN,WOMEN;
Gender2(){
System.out.println("Gender2的构造方法=====");
}
private int age;
private String name;
public void display(){
System.out.println("枚举类的实例方法");
}
public static void display2(){
System.out.println("枚举类中的静态方法");
}
}
package com.bdit;
public enum Season implements MyInter {
SPRING("春天"),SUMMARY("夏天");
private String name;
private Season(String name){
this.name=name;
}
public static void main(String[] args) {
System.out.println(Season.SPRING.name);
Season.SUMMARY.t1();
}
@Override
public void t1() {
System.out.println("枚举也可以实现接口");
}
}
interface MyInter{
void t1();
}