一、枚举
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相关推荐

  1. 小汤学编程之JAVA基础day12——异常

    一.什么是异常 1.程序错误类型     2.异常的分类     3.深入认识异常 二.异常的继承结构 三.常见的异常收集 四.虚拟机对异常的两种处理方式 1.捕获异常     2.声明和抛出异常 五 ...

  2. 小汤学编程之JAVA基础day05——数组

    一.概念 1.什么是数组      2.为什么要用到数组 二.使用方法 1.声明并分配空间      2.赋值     3.处理数据 三.数组的各种应用 1.求数组中最大/最小值      2.数组反 ...

  3. 小汤学编程之JAVA基础day04——流程结构

    一.认识流程图 二.顺序结构 三.选择结构 四.循环结构 五.扩展&代码块的概念 一.认识流程图 二.顺序结构 体现在程序进入某个方法后,从上到下没有分支的顺序执行. 三.选择结构 1.if选 ...

  4. 小汤学编程之JAVA基础day02——数据类型、Scanner类的使用

    一.JAVA的数据类型 1.变量      2.常量     3.基本数据类型     4.引用数据类型     5.数据类型转换 二.Scanner类的使用 1.作用      2.引入     3 ...

  5. 小汤学编程之JAVA基础day14——xml和反射

    一.xml 1.简介     2.特点     3.使用步骤 二.Reflect反射 1.概念     2.理解Class类     3.反射的功能     4.两个案例 一.xml 1.简介 xml ...

  6. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

  7. 小汤学编程之JAVA基础day09——常用类(一):比较器、内部类和包装类

    一.比较器 1.内部比较器      2.外部比较器 二.内部类 1.成员内部类     2.静态内部类     3.局部内部类     4.匿名内部类 三.包装类 1.概念     2.包装类的应用 ...

  8. 小汤学编程之JAVA基础day07——面向对象(二):封装、继承与多态

    一.封装 1.使用步骤      2.优点     3.包结构     4.访问修饰符 二.继承 1.理解      2.重写     3.final的详解     4.防止被继承的两种方法 三.多态 ...

  9. 小汤学编程之JAVA基础day03——运算符

    一.赋值运算符 1.赋值      2.特点     3.书写格式 二.算术运算符 1.基本运算符      2.复合运算符 三.关系运算符 四.逻辑运算符 五.条件运算符 六.位运算符 七.运算符的 ...

最新文章

  1. html5改成块状标签,HTML5基本网页结构以及标签的改变
  2. 互联网协议 — TCP — 性能问题解析
  3. OpenCV的滑块与回调函数
  4. 【Excel】一次性快速批量删除下面多余的空白行
  5. 如何为Apache Kylin快速开发新数据源?
  6. 工业项目,用MCU还是PLC?
  7. 项目管理知识体系指南_PMP考前冲刺丨项目管理知识体系指南(PMBOK)串讲(4)...
  8. 赛锐信息:优化SAP系统运行时的建议
  9. 计算机病毒实践汇总三:动态分析基础(分析程序)
  10. Ansys 2021中英文切换、背景切换
  11. Virtualbox使用及问题
  12. Android客户端如何使用cookie
  13. 医学影像常用Python包
  14. C++、C#、Java、Python、可以获取L2行情实时数据吗?
  15. 游戏里的角色都什么格式图片_格斗游戏拳皇里的八神庵,为什么在玩家心中人气一直都很高...
  16. Codeforces Round #521 (Div. 3) E - Thematic Contests (二分 + STL)
  17. banner 生成利器 http://patorjk.com/software/taag
  18. 2021年安全员-C证(陕西省)考试资料及安全员-C证(陕西省)新版试题
  19. Word中的公式对齐
  20. form标签的enctype属性

热门文章

  1. Centos 7.x 内核升级
  2. 第二章课后习题2-5
  3. Mobile Web调试工具Weinre
  4. Microsoft Expression Blend 4 下载地址
  5. 得到当前选中行的第几列的值---dataGridView
  6. 工作随想---关于业务流程,落实责任制
  7. CVPR自动驾驶运动预测挑战赛:轻舟智航夺冠方案
  8. 如何评价MSRA视觉组最新提出的Deformable ConvNets V2?
  9. 对于0基础来说,Python 中有哪些难以理解的概念?我似乎明白了
  10. 收藏 | 自监督视觉Transformer