Java基础笔记(四)--枚举类和Java常用类

枚举类
枚举类型本质是一种继承 java.lang.Enum 类. 特点:
  1. 枚举类是引用类型, 具有面向对象特性, 可以添加成员变量和方法.
  2. 枚举类父类是 java.lang.Enum, 不需要显示声明.
  3. 枚举类可以实现接口, 与类接口实现类似.
  4. 枚举类不能被继承, 不存在子类.
声明:
[public] enum 枚举名{
  枚举常量列表
}
示例:
enum WeekDays{
  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
}
枚举在 switch 语句中的应用
WeekDays day = WeekDays.FRIDAY;
System.out.println(day); // 输出FRIDAY
 
switch(day) {
  case MONDAY:
    System.out.println("周一");
    break;
  case TUESDAY:
    System.out.println("周二");
    break;
  case WEDNESDAY:
    System.out.println("周三");
    break;
  case THURSDAY:
    System.out.println("周四");
    break;
  case FRIDAY:
    System.out.println("周五");
    break;
}
枚举类中的成员变量和成员方法
enum WeekDays{
  // 枚举常量列表
  MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY;
  // 实例变量
  private String name;
  // 静态变量
  private static int staticVar = 100;
  // 实例方法
  public void getInfo() {
    // 输出枚举类实例的常量值, 如FRIDAY
    System.out.println(this.toString());
  }
  // 静态方法
  public static void getStaticVar()
  {
    System.out.println(staticVar);
  }
}
调用:
day.getInfo(); // 输出FRIDAY
WeekDays.getStaticVar();
枚举常量列表语句必须是枚举类中的第一行.
枚举类构造方法
枚举类可通过构造方法初始化成员变量.
示例:
enum WeekDays{
  // 枚举常量列表, 定义枚举常量同时调用构造函数
  MONDAY("周一"), TUESDAY("周二"), WEDNESDAY("周三"), THURSDAY("周四"), FRIDAY("周五");
  // 实例变量
  public String name;
  // 构造函数
  private WeekDays(String name) {
  this.name= name;
  }
}
调用:
WeekDays day = WeekDays.FRIDAY;
System.out.println(day + ": " + day.name);
枚举类的构造方法必须是 private 级别, 定义构造方法时可以省略该关键字.

枚举常用方法

  1. int ordinal(): 返回枚举常量的顺序. 从 0 开始.
  2. 枚举类型[] values(): 静态方法, 返回一个包含全部枚举常量的数组.
  3. 枚举类型 valueOf(String str): 静态方法, str 是枚举常量对应的字符串, 返回一个包含枚举类型实例.
Java 类引用类型进行比较时, 有两种比较方法==equals, ==比较的是两个引用是否指向同一个对象, equals比较的是两个对象的内容是否相同. 但枚举类中==equals是一样的, 都比较两个引用是否指向同一个实例. 枚举类中每个枚举常量无论何时都只有一个实例.

Java 常用类

Java 的根类–Object

  1. 位于 java.lang 包中.
  2. 不需要 import 语句引入, 有解释器自动引入.
常用方法:
String toString(): 返回该对象的字符串表示. 如果没有覆盖此方法, 返回值是 “类名@对象的十六进制哈希吗”.
System.out.println 等输出语句会自动调用对象的 toString() 方法.
boolean equals(Object obj): 判断某个对象是否与此对象相等.

包装类

Java 的 8 中基本数据类型不属于类, 不具备对象的特征. 为此 Java 为每种基本数据类型提供了对应的包装类.
Alt text
数值包装类( Short/Byte/Integer/Long/Double/Float)
数值包装类具有相同的特征, 下面以 Integer 类为例:
  1. 构造方法
    Integer(int value): 通过一个数值构造 Integer 对象.
    Integer(String s): 通过制定一个十进制字符串表达式构造对象.
  2. 共同的父类
    数值包装类共同的父类是 Number. 该类是一个抽象类, 包括以下常用方法:
    byte byteValue(): 将当前对象转换为 byte 类型数值.
    double doubleValue(): 将当前对象转换为 double 类型数值.
    float floatValue(): 将当前对象转换为 float 类型数值.
    int intValue(): 将当前对象转换为 int 类型数值.
    long longValue(): 将当前对象转换为 long 类型数值.
    short shortValue(): 将当前对象转换为 short 类型数值.
  3. compareTo() 方法
    int compareTo(数值包装类对象): 返回 0, 表示数值相等; 返回负数, 此对象小于参数对象; 返回正数, 此对象大于参数对象.
  4. 字符串转换为基本数据类型
    static int parseInt(String s): 将字符串转换为有符号的十进制正数.
    static int parsetInt(String s, int radix): 将字符串转换为指定进制的有符号正数.
  5. 基本数据类型转换为字符串
    static String toString(int i): 将正数转换为有符号表示的十进制字符串.
    static String toString(int i, int radix): 将正数转换为指定进制的有符号表示的字符串.
Character 类
Character 类是 char 类型的包装类. 常用方法如下:
  1. Character(char value): 构造方法, 通过 char 值创建一个新的 Character 对象.
  2. char charValue(): 返回此 Character 对象的值.
  3. int compareTo(Character anotherCharacter): 返回0, 表示该对象等于参数对象; 返回负数, 表示该对象小于参数对象; 返回正数, 表示该对象大于参数对象.
Boolean 类
Boolean 类是 boolean 类型的包装类.
  1. 构造方法
    Boolean(boolean value): 通过一个 booelan 值创建一个 Boolean 对象.
    Boolean(String s): 通过字符串创建 Boolean 对象. s 不能为 null. 如果 s 是忽略大小写 “true”, 则转换为 true, 其他字符串转换为 false.
  2. int compareTo()方法
  3. 字符串转换为 Boolean 类型
    static Boolean parseBoolean(String s): 将字符串转换为对应的 boolean 类. s 不能为 null. 如果 s 是忽略大小写的 “true”, 则转换为 true, 其他字符串转换为 false.
自动装箱/拆箱
自动装箱: 自动地将基本数据类型的数值转换为对应的包装类对象.
自动拆箱: 自动将包装类对象转换为对应的基本数据类型.
在自动装箱/拆箱时, 要避免空对象.

Math 类

java.lang.Math 类是 final 的, 无法被继承.
舍入方法
static double ceil(double a): 返回大于或等于 a 的最小整数.
static double floor(double a): 返回小于或等于 a 的最大整数.
static int round(float a): 四色五入.
最大/小值
static int min(int a, int b): 返回两个 int 中的最小值.
static int min(long a, long b): 返回两个 long 中的最小值.
static int min(float a, float b): 返回两个 float 中的最小值.
static int min(double a, double b): 返回两个 double 中的最小值.
绝对值
static int/long/float/double abs(int/long/float/double a): 返回 a 的绝对值.
随机值
static double random(): 返回大于或等于 0, 小于或等于 1.0 的随机数.
常量
PI: 圆周率.
E: 自然对数的底数.

大数值

BigInteger
java.math.BigInteger 是不可变的任意精度的大整数. 其构造方法有很多, 其中字符串参数的构造方法有:
BigInteger(String val): 将十进制字符串 val 转换为 BigInteger 对象.
BigInteger(String val, int radix): 将指定进制的字符串转换为 BigInteger 对象.
常用方法:
int compareTo(BigInteger val): 意义与其他类的 compareTo() 方法相同.
BigInteger add(BigInteger val): 加法运算
BigInteger substract(BigInteger val): 减法运算
BigInteger multiply(BigInteger val): 乘法运算
BigInteger divide(BigInteger val): 除法运算
BigInteger 继承了抽象类 Number, 它实现了 Number 的 6 个方法.
BigDecimal
java.math.BigDecimal 是不可变的任意精度的有符号十进制数.
构造方法:
BigDecimal(BigInteger val): 将 BigInteger 对象转换为 BigDecimal 对象.
BigDecimal(double val): 将 double 转换为 BigDecimal 对象, 参数 val 是 double 类型的二进制浮点值准确的十进制表示形式.
BigDecimal(int val): 将 int 转换为 BigDecimal 对象.
BigDecimal(long val): 将 long 转换为 BigDecimal 对象.
BigDecimal(String val): 将字符串表示的数值转换为 BigDecimal 对象.
常用方法:
int compareTo(BigDecimal val):
BigDecimal add(BigDecimal val): 加运算.
BigDecimal substract(BigDecimal val): 减运算
BigDecimal mutiply(BigDecimal val): 乘运算
BigDecimal divide(BigDecimal val): 除运算
BigDecimal 继承了抽象类 Number, 它实现了抽象类 Number 的 6 个方法.

日期时间相关类

Java 8 之前日期类是 java.util.Date, 该类比较古老, 很多方法已经废弃. Java 8 之前与日期时间相关的类还有 DateFormat (日期格式化)、Calendar (日历类)、TimeZone (时区类).
Java SE 核心类中有两个 Date, 分别是 java.util.Date 和 java.sql.Date. 前者是日期时间类, 后者是 JDBC 中的日期字段类型.
Date 类
构造方法:
Date(): 用当前时间创建 Date 对象, 精确到毫秒.
Date(long date): 指定标准基准时间以来的毫秒数创建 Date 对象. 标准基准时间是格林威治时间 1970 年 1 月 1 日 00:00:00.
常用方法:
boolean after(Date when): 测试此日期是否在指定日期后.
boolean before(Date when): 测试此日期是否在指定日期前.
int compareTo(Date anotherDate): 比较两个日期的顺序. 日期相等返回 0, 如果此日期小于参数日期, 返回值小于 0; 此日期大于参数日期, 则返回值大于 0.
long getTime(): 返回自标准基准时间以来此 Date 对象的毫秒数.
void setTime(long time): 用毫秒数设置日期对象, time 是自标准基准时间以来的毫秒数.
日期格式化和解析
DateFormat 类中提供日期格式化和日期解析方法, 具体如下:
String format(Date date): 将一个 Date 格式化为日期/时间字符串.
Date parse(String source): 从给定字符串的开始解析文本, 以生成一个日期对象. 如果解析失败则抛出 ParseException.
DateFormat是一个抽象类, 常用具体类是 java.text.SimpleDateFormat. 该类的构造方法有:
SimpleDateFormat(): 用默认模式和默认语言环境的日期格式符号构造 SimpleDateFormat.
SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat. pattern 参数是日期和时间格式模式. 常用日期和时间格式模式如下:
Alt text
日期格式化既可以将日期对象转换为特定格式的字符串, 也可以将特定格式的字符串转换为日期对象.
Calendar 类
java.util.Calendar 类是一个抽象类, 不能直接实例化, 但通过静态工厂方法getInstance()可以获得 Calendar 实例.
该类主要方法有:
static Calendar getInstance(): 使用默认时区和语言环境获得一个日历.
void set(int field, int value): 将给定的日历字段设置为给定值.
void set(int year, int month, int date): 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值.
Date getTime(): 返回一个表示此 Calendar 时间值 (从 1970 年 1 月 1 日 00:00:00 至现在的毫秒数) 的 Date 对象.
boolean after(Object when): 判断此 Calendar 表示的时间是否在指定时间之后, 返回判断结果.
boolean before(Object when): 判断此 Calendar 表示的时间是否在指定时间之前, 返回判断结果.
int compareTo(Calendar anotherCalendar): 比较两个 Calendar 对象表示的时间值.
void clear(): 清除 Calendar 实例之前设置的各个字段的值.

Java 8 新日期时间相关类

Java 8 之后提供了新的日期时间相关类、接口和枚举.
时间和日期
Java 8 之后提供了三个新的日期时间类: LocalDate、LocalTime 和 LocalDateTime, 它们都位于 java.time 包中. LocalDate 表示一个不可变的日期对象, LocalTime 表示一个不可变的时间对象, LocalDateTime 表示一个不可变的日期和时间.
这三个类并没有共有的构造方法, 使用静态工厂方法创建它们的对象. 主要有now()of()方法.
now()方法说明如下:
static LocalDate now(): LocalDate 静态工厂方法, 该方法使用默认时区获得当前日期, 返回 LocalDate 对象.
static LocalTime now(): LocalTime 静态工厂方法, 该方法使用默认时区获得当前时间, 返回 LocalTime 对象.
static LocalDateTime now(): LocalDateTime 静态工厂方法, 该方法使用默认时区获得当前日期时间, 返回 LocalDateTime 对象.
of()方法说明如下:
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second): 按照指定的年、月、日、小时、分钟和秒获得 LocalDateTime 实例, 将纳秒设置为零.
static LocalTime of(int hour, int minute, int second): 按照指定的小时、分钟和秒获取一个 LocalTime 实例.
static LocalDate of(int year, int month, int dayOfMonth): 按照指定的年、月和日获得一个 LocalDate 实例, 日期中年、月和日必须有效, 否则将抛出异常.
以上方法的参数取值范围:
Alt text
日期格式化和解析
Java 8 提供的日期格式化类是 java.time.format.DateTimeFormatter, 该类本身没有提供日期格式化和日期解析方法, 这些方法有 LocalDate、LocalTime 和 LocalDateTime 提供.
日期格式化
String format(DateTimeFormatter formatter): 这三个类都有该方法, 参数 formatter 是 DateTimeFormatter 类型.
日期解析
日期解析方法是parse, 这三个类每一个都有两个重载的 parse 方法, 具体如下:
static LocalDateTime parse(CharSequence text): 使用默认格式从一个文本字符串获取一个 LocalDateTime 实例, 如 200-12-03T10:15:30.
static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter): 使用指定格式化, 从文本字符串获取 LocalDateTime 实例.
static LocalDate parse(CharSequence text): 使用默认格式从一个文本字符串获取一个 LocalDate 实例, 如 200-12-03T10:15:30.
static LocalDate parse(CharSequence text, DateTimeFormatter formatter): 使用指定格式化, 从文本字符串获取 LocalDate 实例.
static LocalTime parse(CharSequence text): 使用默认格式从一个文本字符串获取一个 LocalTime 实例, 如 200-12-03T10:15:30.
static LocalTime parse(CharSequence text, DateTimeFormatter formatter): 使用指定格式化, 从文本字符串获取 LocalTime 实例.
示例:
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String text = dateTime.format(formatter);
 
LocalDateTime parseDateTime = LocalDateTime.parse("2018-08-18 08:58:18", formatter);

猜你喜欢

转载自www.cnblogs.com/fxyy/p/11421952.html