JavaSE基础复习三:常用工具类

本文最后更新于:2021年7月23日 晚上


JavaSE基础复习三:常用工具类

常用工具类设计思想

  • 构造方法用private修饰,防止创建对象

  • 方法用public static修饰,以供直接访问

Math类

  • 方法都是静态,可以直接调用

  • 常用方法:

    方法名 说明
    public static void abs(int a) 绝对值
    public static double ceil(double a) 返回大于或等于参数的最小double,等于一个正是
    public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数
    public static int round(float a) 按照四舍五入返回最接近的int值
    public static int max(int a, int b) 返回两个int值中的较大值
    public static int min(int a, int b) 返回两个int值中的较小值
    public static double pow(double a, double b) 返回a的b次幂
    public static double random() 返回为随机的double的正值[0.0, 1.0)

System类

  • 在java.lang中,不用导包

  • 常用方法:

    方法名 说明
    exit(int status) 退出,输入退出的状态码,非零表示异常
    static Map<String,​String> getenv(String name) 获取系统环境变量
    static String getenv​(String name) 获取确切的某个环境变量值
    static String currentTimeMillis() 获取时间(从1970到现在的毫秒)
  • currentTimeMills()可用来计时

Object类

  • Object类是所有类的超类

  • 常用方法

    方法名 说明
    boolean equals() 判断对象是否相等,默认比较地址。建议所有子类重写此方法
    String toString() 返回对象的字符串表示形式。默认返回包名类名@地址的字符串。建议所有子类重写此方法

Arrays类

  • 包含操作数组的各种方法

  • 常用方法:toString(),sort()

  • 冒泡排序:

    • n个元素进行排列,总共需要比较n-1次

    • 每一次比较完毕,下一次的比较就会少一个数据参与运算

基本类型包装类

  • 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

  • 常用的操作:基本数据类型和字符串之间的转换

  • 对应关系:

    基本数据类型 包装类
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    char Character
    boolean Boolean
  • Integer类(其它的包装类类似):

    • 包含的有用字段:MAX_VALUE、MIN_VALUE,分别表示能表示的最大int值和最小int值

    • 常用的方法:

      • public static Integer valueOf(int i),返回表示指定的int值的Integer实例

      • public static Integer valueOf(String s),返回一个保存指定值的Integer对象String

      • 用构造方法创建对象的方法过时了,不建议使用

  • int和String相互转换

    • int -> String:String str = String.valueOf(int a);

    • String -> int:Integer i = Integer.valueOf(String str); 获取int值, i.intValue(); 因为可以自动拆装箱,直接使用Integer对象就可以了

  • 自动拆装箱

    • 装箱:把基本类型换成对应的成包装类类型

    • 拆箱:把包装类类型装换为对应的基本类型

    • 自动装箱:基本类型赋值给包装类型引用,例如:Integer i = 100;

    • 自动拆箱:i + 200;

  • 用包装类使用前最好判断是否为null,推荐只要是对象,使用前都要判断是否为null

Date类

  • 构造函数:

    • Date(),无参构造,初始化以最接近的毫秒为单位

    • Date(long date),传入毫秒,初始化为从1700年1月1日加上传入的毫秒数的日期

  • 常用方法:

    • public long getTime():获取的是日期对象从1970年1月1日00:00:00到现在的毫秒值,和System.currentTimeMills()类似

    • public void setTime(long time):设置时间,给的是毫秒值

  • SimpleDateFormat类

    • 该类是一个具体类,用于格式化和解析日期,Date类的日期输出并不直观,SimpleDateFormat类可以方便输出我们便于查看的日期格式

    • 该类的作用:Date -> String(格式化),String -> Date(解析)

    • 日期和日期格式由字符串模式指定,在日期和时间模式字符串中,从’A’到’Z’以及’a’到’z’,单引号内容被直接复制过去,不会被解释为模式字符

    • 常用的模式字母及对应关系如下:

      字母 对应日期
      y
      M
      d
      H
      m
      s
    • 构造方法:

      • 无参构造,构造一个SimpleDateFormat,使用默认模式和日期格式

      • 输入模式串的构造,根据所给模式构造和默认的日期格式构造

    • 格式化和解析方法:

      • 格式化(Date -> String):public final String format(Date date)

      • 解析(String -> Date) :public Date parse(String source)

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        // 格式化
        String s = new SimpleDateFormat().format(new Date());
        System.out.println(s);

        s = new SimpleDateFormat("y年M月d日 'At' H:m:s").format(new Date());
        System.out.println(s);

        // 解析
        String s1 = new String("2021-1-1 18:22:31");
        Date date = new SimpleDateFormat("y-M-d h:m:s").parse(s1);
        System.out.println(date);

Calendar类

  • 为某一时刻和一组日历字段之间的转换提供一些方法,并为操作日历字段提供了一些方法

  • 抽象类,可以通过getInstance()方法获取其子类实例

  • 包含很多静态方法

  • 常用方法:

    • public int get (int field)

      常用字段:

      • Calendar.YEAR

      • Calendar.MONTH:月从0开始算

      • Calendar.DATE

常用的字段组合:

  • For the date fields:

    YEAR + MONTH + DAY_OF_MONTH
    YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
    YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
    YEAR + DAY_OF_YEAR
    YEAR + DAY_OF_WEEK + WEEK_OF_YEAR

    For the time of day fields:

    HOUR_OF_DAY
    AM_PM + HOUR

  • add(int Field, int amount):对任意字段进行加减

  • set(int Field, int amount):直接设置某个字段的值

    set(int year, int month, int day):设置年月日

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Calendar c = Calendar.getInstance();
    c.add(Calendar.YEAR, -3); // 三年前的今天
    c.set(Calendar.MONTH, 1); // 二月份,从0算起
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH)+1;
    int date = c.get(Calendar.DATE);
    System.out.println(year+"年"+month+"月"+date+"日");
    c.set(2021, 2, 1); // 2021年3月1日
    c.add(Calendar.DATE, -1); // 二月最后一天
    System.out.println(c.get(Calendar.YEAR)+"年二月份有"+c.get(Calendar.DATE)+"天");