【4-2】《Java中的实用工具类》——Object、Math、Arrays、BigDecimal、Date、DateFormat、Calendar、System、泛型、String

常用类库

  • 学习方法
    必须熟悉,长期记忆。大量测试一个类,记录并掌握其功能。
    例如:X工具类,有X方法,方法有什么功能,需要传递X参数,能得到X结果。

一、常用类库

(基于JDK 11)

1、java.util.Objects

所有Java类的基类(顶级父类),所有类层次结构的根。JDK7版本添加,包含了很多静态方法。

  • equals:语法格式:Object.equals(a, b);

  • checkFromIndexSize:检查下标是否越界

  • hashCode:计算对象的哈希值

  • isNull:语法格式:Object.isNull(a);

其他的方法在API中查看,都需要整理

2、java.lang.Math

执行数字运算,API中也有大量方法。

  • Math.abs(-10);:-10的绝对值,结果为10

  • Math.min(100, 200):两数之间较小值,结果为100

  • Math.max(100, 200):两数之间较大值,结果为200

  • 约等

    • Math.round(24.5)四舍五入,结果为25;Math.round(24.5),结果为-24
    • Math.floor(3.5)返回小于等于参数的最大整数,结果为3.0;Math.floor(-3.5),结果为-4.0
    • Math.ceil(3.5)返回大于等于参数的最大整数,结果为4.0;Math.ceil(-3.5),结果为-3.0

3、java.util.Arrays

可以对数组进行操作,运用较多,重点整理API中的方法。

API中的方法整理:Java中ArrayList类的方法(源码)

  • binarySearch:查找数组中某元素的下标
  • compare:比较两个数组
  • toString:打印数组,可以取代for循环遍历数组
  • sort:对数组进行排序
  • copyOf:将数组动态扩容
    • arr = Array.copyOf(arr, 15);将arr扩容为长度15的数组

4、java.math.BigDecimal

double d1 = 0.1;
double d2 = 0.2;
  • 结果:并不是0.3。

  • 在这里插入图片描述

  • 问题:在Java中如果使用double进行算术运算,运算结果会缺失精度。

java.math.BigDecimal的作用:算术运算专用,解决小数运算问题

使用方式:传递一个String参数

BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.1");
构造方法说明
public BigDecimal(String val) {}常用构造方法
常用方法作用
add加法运算
subtract减法运算
multiply乘法运算
divide除法运算
  • API中BigDecimal有更多其他方法,建议仔细查看,并整理

5、java.util.Date

表示特定时刻,精度为毫秒。

PS:一天的毫秒数:24*60*60*1000

查看API,发现大部分方法已经过时,真正有用的是用它表示时刻的方法。

  • getTime()方法,返回一个long类型的值。

    • 获取的是格林威治时间:1970年1月1日东八区早上8点整~现在的毫秒数
    • setTime()也可以用
    • 有可能用到:对时间的比较
      • after(Date when):测试此日期是否在指定日期之后。
      • before(Date when):测试此日期是否在指定日期之前。
  • 构造方法:没过时的两个

    构造方法概述
    Date()不传参数,表示当前时间(此时此刻
    Date(long date)传入一个毫秒数,表示从格林威治日到现在的时间,可以表示过去或未来的时间

new Date使用。

6、java.text.DateFormat

格式化日期。

字母表示
y
M
d
H
m
s
  • format()方法

    例:2020年12月12日 12:12 12

    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm ss");
    
    String text = format.format(new Date());
    System.out.println(text);
    

    运行结果:

  • parse()方法

    将一段字符串转成Date

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
    //parse:将yyyy-MM-dd HH:mm ss日期字符串,转为date对象
    String text = format.format(new Date());
    System.out.println(text);
    System.out.println(format.parse("2021-12-12 12:12 12"));
    

    运行结果:
    在这里插入图片描述

  • 此处注意:太容易混淆了,format是返回的StringBuffer类型数据进行格式化日期。parse是传入字符串,返回的是一个Date对象

7、java.util.Calendar

抽象类,存在getInstance方法,不通过new,直接获取即可。

其中提供了大量常量值,常用的有get和set。

  • Calendar.YEAR:获取年份
  • Calendar.DAY_OF_YEAR:获取一年中的第几天
Calendar c = Calendar.getInstance();
//取出日历中的数据
int year = c.get(Calendar.YEAR);
int day = c.get(Calendar.DAY_OF_YEAR);

System.out.println(year);
System.out.println(day);

运行结果:
在这里插入图片描述

//将年设置为2021年
c.set(Calendar.YEAR,2021);
int year = c.get(Calendar.YEAR);
int day = c.get(Calendar.DAY_OF_YEAR);

System.out.println(year);
System.out.println(day);

运行结果:

在这里插入图片描述

  • c.get(Calendar.WEEK_OF_YEAR); :获取现在是一年中的第几周

  • c.add(Calendar.YEAR,1);:给当前年份加1

    • 需要注意的一点:
      • 在日历中月份是从0-11的,0表示1月份,11表示12月份
      • 星期国外将星期七当作一周的第一天,星期六是一周的最后一天。
  • getActualMaxmun:获取某个字段的最大值

8、java.lang.System

  • System.out

  • System.in

  • System.gc

二、泛型

1、概述

泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定 义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

使用泛型可以:

  1. 提高代码复用率
  2. 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)

2、使用

  1. 泛型类
public class ClassName<T> {
    private T data;
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
}
  1. 泛型接口
public interface IntercaceName<T> {
    T getData();
}

​ 实现接口时是否实现泛型:

  • 指定类型
public class Interface1 implements IntercaceName<String> {
    private String text;
    @Override
    public String getData() {
        return text;
    }
} 
  • 不指定类型
public class Interface1<T> implements IntercaceName<T> {
    private T data;
    @Override
    public T getData() {
        return data;
    }
}
  1. 泛型方法
private static <T> T 方法名(T a, T b) {}

注意:

  • 在编译之后程序会采取去泛型化的措施。也就是说Java中的泛型只在编译阶段有效,泛型信息不会进入到运行时阶段。
  1. 泛型限定和通配符

在使用泛型时,可以指定泛型的限定区域

  • 例如:必须是某某类的子类或 某某接口的实现类,

    格式:<T extends 类或接口1 & 接口2>

类型**通配符是使用?**代替方法具体的类型实参。

  • 泛型上届限定使用:<? extends Parent> 指定了泛型类型的上届
  • 泛型下届限定使用:<? super Child> 指定了泛型类型的下届
  • 可以简单理解为Object,但是使用时有很大区别:<?> 指定了没有限制的泛型类型

三、String(非常重要

Java程序中所有字符串文字都是String类的实例。存储在字符串常量池中。

字符串是不变的,它们的值在创建后无法更改。两个字符串如果内容完全一样,那么它们共享同一块内存地址。通过new的地址不一样。

  • substring:截取字符串,包含开始不包含结尾
  • trim:去掉前后空格
  • 具体内容查看AP

注意:如果需要拼接字符串,不要使用String,使用另外两个类:StringBuffer和StringBuilder,可变字符序列。

通过无参的方式构造StringBuffer或StringBuilder,再用append添加数据。

  • StringBuffer:两个人排队吃饭,效率低。
  • StringBuilder:两个人同时吃饭,效率高。

总结

学习这些类库为我们提供了非常方便的工具,提高了编码效率,就是记忆起来比较花费时间,多多使用,多多熟悉。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值