小汤学编程之JAVA基础day15——枚举、注解和Properties

在这里插入图片描述

一、枚举
1.枚举的来由     2.枚举的作用     3.枚举的特点     4.扩展:switch里可以传入哪些类型的值
二、注解
1.作用     2.注解的种类     3.自定义注解     4.通过反射读取并使用注解     5.注解参数的类型
三、Properties
1.什么是properties     2.properties的使用     3.与Java的交互

一、枚举

1.枚举的来由

业务需求(红绿灯):要创建指定个数的指定对象

public class TraLightColor {
	// 创建指定个数的指定对象
    public  static TraLightColor red = new TraLightColor();
    public  static TraLightColor green = new TraLightColor();
    public  static TraLightColor yellow = new TraLightColor();
	// 构造方法私有化,防止随意new任意多个对象
   private TraLightColor(){
   }
} 

用上述方法过于繁琐,枚举的出现大大简化了创建指定个数对象的代码。

使用枚举:

public enum TraLightColor {
	// 创建指定个数的指定对象
    red,green,yellow;
} 
2.枚举的作用

上述例子很明显,枚举用来解决创建指定个数对象的东西。关键字enum。

3.枚举的特点
  • 枚举里可以定义枚举值,类型是当前的枚举类型
  • 除了枚举值,枚举里还可以定义 一个类 里可以定义的所有东西
  • 构造方法必须是私有化的,如果没有定义会默认一个私有的无参构造
  • 构造方法可以重载,可以有参数列表,枚举值需要跟构造方法匹配
  • 所有枚举都默认继承Enum类,从而间接继承Object类
  • .ordinal() 方法返回当前枚举对象在枚举值列表中的索引位置,从0开始
  • .name() 方法返回枚举值对象名
4.扩展:switch里可以传入哪些类型的值

3种整型(byte,short,int)2种字符(char,String)和枚举型。
俗称:3整2符1枚举

二、注解

1.作用

注解是用来对程序进行解释说明。

相比于注释,注解可以实际影响到程序本身(通过反射)。

2.注解的种类
一般注解
注解作用
@Override表示重写
@Deprecated表示过时的
@SuppressWarnings抑制警告
元注解
注解作用
@Target(ElementType) 定义这个当前注解可以修饰哪些内容:方法/类/属性/构造器/临时变量
@Retention(RententionPolicy) 说明此注解生效到哪个阶段:SOURCE 源码阶段/CLASS 字节码阶段/RUNTIME 运行时阶段(常用)
@Documented生成doc说明文档的时候是否显示,有该注解则显示,反之不显示。
@Inherited此注解是否可以被继承,有则可被继承,反之不可。
3.自定义注解
不带参数
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})//注解在什么阶段下生效(source源码阶段、class字节码阶段、runtime运行时阶段) 一般用运行时阶段
@Retention(RetentionPolicy.RUNTIME)
@Documented // 生成doc说明文档时是否显示
@Inherited // 该注解是否可以被继承
public @interface MyAnnotation {

}
带参数

定义:

...
public @interface MyAnnotation {
//  参数类型   参数名
    String  value();
    int age() default 18;
    String [] hobby();
}

使用:

@MyAnnotation(value = "张三" ,hobby = {"唱","跳","rap"})
...

1.当有且只有一个参数且名为value时,使用该注解时可以省略 value =
2.若有多个参数,使用时用逗号隔开
3.参数可以用default关键字来定义默认值
4.参数类型也可以为数组,使用时赋值是用{ }

4.通过反射读取并使用注解
// 获取反射类
Class clazz = Person.class;
// 获取属性
Field nameField = clazz.getDeclaredField("name");
// 获取该属性对应的某个注解
MyAnnotation myAnnotation = nameField.getDeclaredAnnotation(MyAnnotion.class);
// 获取注解里配置的参数值
String nameValue = myAnnotation.value();
int age = myAnnotation.age();
String [] hobby = myAnnotation.hobby();
5.注解参数的类型
注解参数的类型
基本数据类型(4类8种)
String
Class
枚举
注解
以上几种类型组成的数组

三、Properties

1.什么是properties

Properties 是一种文本格式。里面的数据有自己规定的格式,一般存放键值对类型的数据。

相比于.txt,Properties可以很好很方便的跟java程序进行交互。java提供专门跟properties交互的API。存到properties文件中的内容是可以持久化的。properties

2.properties的使用
注释

注释使用 # 号来表示。

内容

键值对一般使用 = (等号)分割,也可以用 : (冒号)或者 (空格)分割,但是尽量使用等号分割,清晰明了。

3.与Java的交互
数据的读取
// 创建字节输入流对象
File file = new File("day04-02/src/hello.properties");
System.out.println(file.exists());
FileInputStream fis = new FileInputStream(file);
//创建Properties对象,并将输入流的数据载入
Properties p  = new Properties();
p.load(fis);
//使用枚举器(Hashtable  Vector)遍历输出
Enumeration<Object> keys = p.keys();
while (keys.hasMoreElements()){
	String key = (String) keys.nextElement();
	System.out.println(key + " = " + p.getProperty(key) );
}
数据的存储
//创建我们要保存的文件对象,如果不存在就创建这个文件
File f = new File("day04-02/src/hello2.properties");
if(!f.exists()){
	f.createNewFile();
}
//创建字节输出流对象
FileOutputStream fos = new FileOutputStream(f);
//创建Properties对象,并将要存储的数据传入
Properties p = new Properties();
p.setProperty("name","张三");
p.setProperty("age","18");
p.setProperty("sex","男");
//将Properties对象中的数据通过输出流存储到文件中
p.store(fos,"test");

注意:当既有读取又有存储时,使用完某个流时必须及时关闭,不能混用。

其他

获取资源文件的流我们还可以通过

InputStream fis = Person.class.getClassLoader().getResourceAsStream("hello.properties");

但是这种方式会将数据缓存到虚拟机中,如果缓存有数据则使用,没有则读取文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值