Arrays数组工具类

java.util.Arrays

提供了大量的静态方法,用来实现数组常见的操作。

Math数学工具类M

java.lang.Math

提供了大量的静态方法,用来实现数学常见的操作。

public static double abs(double num):获取绝对值
public static double ceil(double num):向上取整
public static double floor(double num):向下取整
public static long round(double num):四舍五入
Math.PI代表近似的圆周率常量(double)

Object类

所有类的父类

toString():

直接打印对象的名字,其实就是调用对象的toString方法 p = p.toString();

Person p = new Person("zhang", 18);

        String s = p.toString();
        System.out.println(s); //com.company.Demo01.Person@b4c966a

        System.out.println(p); //com.company.Demo01.Person@b4c966a

看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可
如果没有重写toString方法,那么默认打印的就是对象的地址值
如果重写了toString方法,就按照重写的方式打印。

在Person类中:

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

equals():

boolean equals(Object obj)指示其他对象是否与此对象“相等”


boolean b = p1.equals(p2);

Object类中源码:
参数:
    Object Object 可以传递任意的对象
方法体:
    ==:比较运算符,返回布尔值
    基本数据类型比较值,引用数据类型比较地址值
    this:哪个对象调用的方法,this就是那个对象;p1调用的equals方法,所以this就是p1.
    obj:是传递过来的参数p2
    this == obj --> p1 == p2
    
    public boolean equals(Object obj) {
        return (this == obj);
    }
重写equals方法:

比较两个对象的属性值(name,age)
但是隐藏一个多态
equals(Object obj),参数是Object类型的,而传递过来的是Person类的对象
Object obj = p2 = new Person("123", 18);
多态弊端
无法使用子类特有的内容(属性,方法)
解决方法:
使用向下转型(强转) ,把Object类型转换为Person

    @Override
    public boolean equals(Object obj) {
        //强转为Person类
        Person p = (Person)obj;
        //比较两个对象的属性,一个是调用方法的this,一个就是转换后的p
        boolean b = this.name.equals(p.name) && this.age == p.age;

        return b;

    }

存在一个问题
这地方两个类都是Person类,但是实际情况可能是Person与Random类或者null等相比较,这样上述代码就不可以实现。
优化方案:
1.如果传递过来的是一个null
直接return一个false

    if(obj == null) {
        return false;
    } 

2.两个不同的类:
先利用instanceof进行判断,不是同一个类再返回false

    if(obj instanceof Person) {
        //相同进行比较...
    }else {
        return false;   //不同直接返回false
    }
    
    优化:
 //getClass是获取调用函数的对象的类型,obj.getClass是获取参数对象类型
    if(getClass() != obj.getClass()) {
        return false;
    } else {
        //相同进行比较
    }

所以综合上面的情况,最后得出重写代码:

    @Override
    public boolean equals(Object o) {
    //传递参数obj是this本身,直接返回true
        if (this == o) return true;
    //传递为空,或者对象的类型不同。 
        if (o == null || getClass() != o.getClass()) return false;
    //下面的Person是本类名称。进行比较。
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }
hashCode():

Objects类

因为由静态方法组成,是容忍空指针或者空指针安全的
其中的方法可以通过类名. 来使用

equals()方法:

    String s1 = null;
    String s2 = "dsd";
    
    boolean b = s1.equals(s2);  //空指针异常
    //是Objects.equals
    boolean bOk = Objects.equals(s1, s2);  //成功

源码:

    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

日期时间类

Date类

java.util.Date 表示特定的瞬间,精确到毫秒
毫秒值作用:
对时间和日期进行计算,把日期转换为毫秒

Date();

获取当前日期

Date(long date);带参数

传递毫秒值,把毫秒转换为Date日期

getTime();

把日期转换为毫秒,相当于System.currentTimeMills()

DateFormat类

java.text.DateForma 是日期/时间格式化(Format类)子类为抽象类
完成日期和文本之间的转换,在Date对象和String对象进行来回转换
需要使用子类:SimpleDateFormat
SimpleDateFormat构造方法:

SimpleDateFormat(String pattern)
参数:
String pattern:传递指定模式
模式:区分大小写

String format(Date date)

按照指定的模式,将Date日期,格式化为符合模式的字符串

        SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        String str = s1.format(date);

        System.out.println(date); //Thu Jul 16 17:27:33 CST 2020
        System.out.println(str);  //2020-07-16 17:28:11

Date parse(String source)

把符合模式的字符串,解析为Date日期
如果字符串和构造方法的模式不一样,就是有异常
解决方法:
throws继续声明抛出这个异常
或者 try...catch自己处理这个异常

private static void demo02() throws ParseException {
        SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        s2.parse("2088-08-08 17-01-10");
    }

练习题:

        System.out.println("请输入你的出生日期:格式为:yyyy.MM.dd");
        Scanner sc = new Scanner(System.in);
        String birthString = sc.next();

        SimpleDateFormat birth = new SimpleDateFormat("yyyy.MM.dd");
        //把字符串的出生日期解析为Date格式
        Date birthDayDate = birth.parse(birthString);
        //把Date格式的出生日期转化为毫秒值
        long birthDayDateTime = birthDayDate.getTime();
        //获取当前日期,转换为毫秒值
        Date toDay = new Date();
        long toDayTime = toDay.getTime();
        //long toDayTime = new Date().getTime();

        //作差得出毫秒差
        long l = toDayTime - birthDayDateTime;

        //得出天数
        long Day = l / (1000 * 60 * 60 * 24);
        System.out.println(Day);

Calendar类

是一个抽象类,无法直接创建对象使用

getInstance();
获取年月日等信息

        Calendar cal = Calendar.getInstance();
        System.out.println(cal);

int filed:日历类的字段,可以使用Calendar类的静态成员变量获取


YEAR = 1

MONTH = 2

WEEK_OF_MONTH = 4

DATE = 5

DAY_OF_MONTH = 5

DAY_OF_MONTH = 5

HOUR = 10

MINUTE = 12

SECOND = 13

int value:传递的字段设置具体的值
int amount:增加或减少的值
get(int filed);

int Day = c.get(Calendar.DAY_OF_MONTH);
or:
int year = c.get(Calendar.YEAR);

set(int filed, int value);
设置对应的日期的值
同时设置年月日

c.set(8888, 10, 20);

add(int filed, int amount);
把指定的字段,增加或者减少指定的值

getTime();
把日历转换为日期

Date time = c.getTime();

System类

java.lang.System,有大量的静态方法,可以获取与系统相关的信息或系统极操作。

public static long currentTimeMills();

返回以毫秒为单位的当前时间,可以用来检测程序执行时间

        long start = System.currentTimeMillis();
        
        //....需要测试的程序
        
        long end = System.currentTimeMillis();

        long time = end - start;

public static void arraycopy(....);

将数组中指定的数据拷贝到另一个数组当中
src 源数组
srcPos 源数组中起始位置
dest 目标数组
destPos 目标数组起始位置
length 要复制的数组元素数量

StringBuilder类

java.lang.StringBuilder

字符串不可变,但是字符串缓冲区(可以提高字符串的操作效率)可变
字符串底层是一个被final修饰的数组,StringBuilder没有被final修饰,可以改变长度。

构造方法:

StringBuilder();
构造一个空的StringBuilder容器

StringBuilder bu1 = new StringBuilder();

StringBuilder(String str);
构造一个StringBuilder容器,并把字符串添加进去

StringBuilder bu2 = new StringBuilder("12");
成员方法:

append(...);
添加任意类型的字符串形式,并返回当前对象自身

toString();
将缓冲区内容转为字符串
StringBuilder与String可以相互转换
String --> StringBuilder:使用StringBuilder的构造方法
StringBuilder --> String:使用StringBuilder的toString方法


包装类

把基本类型的数据包装起来,在类中定义一些方法,用来操作基本类型的数据。
装箱与拆箱
装箱:基本类型的数据包装到包装类
构造方法
静态方法
拆箱:从包装类中取出基本类型的数据
自动装箱和拆箱:

    Integer in1 = 1;  //装箱
    
    in = in1 + 2;  //in + 2就相当于in1.intVaule() + 2 = 3;
                   //in = in1 + 2 就相当于in = new Integer(3)

waikiki
4 声望2 粉丝