小汤学编程之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");
但是这种方式会将数据缓存到虚拟机中,如果缓存有数据则使用,没有则读取文件。
小汤学编程之JAVA基础day15——枚举、注解和Properties相关推荐
- 小汤学编程之JAVA基础day12——异常
一.什么是异常 1.程序错误类型 2.异常的分类 3.深入认识异常 二.异常的继承结构 三.常见的异常收集 四.虚拟机对异常的两种处理方式 1.捕获异常 2.声明和抛出异常 五 ...
- 小汤学编程之JAVA基础day05——数组
一.概念 1.什么是数组 2.为什么要用到数组 二.使用方法 1.声明并分配空间 2.赋值 3.处理数据 三.数组的各种应用 1.求数组中最大/最小值 2.数组反 ...
- 小汤学编程之JAVA基础day04——流程结构
一.认识流程图 二.顺序结构 三.选择结构 四.循环结构 五.扩展&代码块的概念 一.认识流程图 二.顺序结构 体现在程序进入某个方法后,从上到下没有分支的顺序执行. 三.选择结构 1.if选 ...
- 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用
一.JAVA的数据类型 1.变量 2.常量 3.基本数据类型 4.引用数据类型 5.数据类型转换 二.Scanner类的使用 1.作用 2.引入 3 ...
- 小汤学编程之JAVA基础day14——xml和反射
一.xml 1.简介 2.特点 3.使用步骤 二.Reflect反射 1.概念 2.理解Class类 3.反射的功能 4.两个案例 一.xml 1.简介 xml ...
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
- 小汤学编程之JAVA基础day09——常用类(一):比较器、内部类和包装类
一.比较器 1.内部比较器 2.外部比较器 二.内部类 1.成员内部类 2.静态内部类 3.局部内部类 4.匿名内部类 三.包装类 1.概念 2.包装类的应用 ...
- 小汤学编程之JAVA基础day07——面向对象(二):封装、继承与多态
一.封装 1.使用步骤 2.优点 3.包结构 4.访问修饰符 二.继承 1.理解 2.重写 3.final的详解 4.防止被继承的两种方法 三.多态 ...
- 小汤学编程之JAVA基础day03——运算符
一.赋值运算符 1.赋值 2.特点 3.书写格式 二.算术运算符 1.基本运算符 2.复合运算符 三.关系运算符 四.逻辑运算符 五.条件运算符 六.位运算符 七.运算符的 ...
最新文章
- html5改成块状标签,HTML5基本网页结构以及标签的改变
- 互联网协议 — TCP — 性能问题解析
- OpenCV的滑块与回调函数
- 【Excel】一次性快速批量删除下面多余的空白行
- 如何为Apache Kylin快速开发新数据源?
- 工业项目,用MCU还是PLC?
- 项目管理知识体系指南_PMP考前冲刺丨项目管理知识体系指南(PMBOK)串讲(4)...
- 赛锐信息:优化SAP系统运行时的建议
- 计算机病毒实践汇总三:动态分析基础(分析程序)
- Ansys 2021中英文切换、背景切换
- Virtualbox使用及问题
- Android客户端如何使用cookie
- 医学影像常用Python包
- C++、C#、Java、Python、可以获取L2行情实时数据吗?
- 游戏里的角色都什么格式图片_格斗游戏拳皇里的八神庵,为什么在玩家心中人气一直都很高...
- Codeforces Round #521 (Div. 3) 	E - Thematic Contests (二分 + STL)
- banner 生成利器 http://patorjk.com/software/taag
- 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
- Word中的公式对齐
- form标签的enctype属性