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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。