1 Object类
Object类是所有类的父类,每个类都直接或间接的继承自该类
1.1 Object.toString()
作用:打印输出类信息
重写前:打印输出包名类名@地址值
重写后:打印输出属性值
1.2 Object.equals()
作用:比较两个对象
重写前:比较对象的地址值
重写后:比较对象的属性值
package ObjectDate;
import java.util.Objects;
public class ObjectTest {
static class MyObject{
String name;
int id;
public MyObject(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public String toString() {
return "MyObject{" +
"name='" + name + '\'' +
", id=" + id +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyObject myObject = (MyObject) o;
return id == myObject.id &&
Objects.equals(name, myObject.name);
}
}
public static void main(String[] args) {
//String类
String a = "abc";
String b = "abc";
boolean result = a.equals(b);
System.out.println(result);//true
System.out.println(a);//abc
//因为String的源码中已经对equals和toString进行了重写
//自定义类
MyObject m1 = new MyObject("张三",1);
MyObject m3 = new MyObject("张三",1);
boolean result2 = m1.equals(m3);
System.out.println(result2);
//重写前 false;重写后true
System.out.println(m1.toString());
//重写前:ObjectDate.ObjectTest$MyObject@4554617c;
// 重写后:MyObject{name='张三', id=1}
}
}
2 Objects类
jdk1.7后出现,提供静态方法操作对象,可以通过类直接调用方法。
public static void main(String[] args) {
String a = "123";
String c = null;
boolean result = c.equals(a);//空指针异常
boolean result = Objects.equals(a,c);//false
//为了提高代码的健壮性 Objects提供了equals方法
//Objects.equals的源码
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
}
3 Date类
Date()空参数构造方法,Date(long L)长整型构造方法,getTime成员方法相当于System.currentTimeMillis()
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
//空参数构造方法
Date d = new Date();
System.out.println(d);//Wed Apr 01 09:32:04 CST 2020
//Date类的成员方法
long time = d.getTime();
System.out.println(time);//毫秒值1585704724114
System.out.println(System.currentTimeMillis());//同上
//带Long参数的构造方法
Date d2 = new Date(0L);
System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970
}
}
4 DateFormat类&SimpleDateFormat类
所属java.text包,DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为毫秒数。
4.1 格式转换String format(Date date)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*public SimpleDateFormat(String pattern)用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
参数: pattern - 描述日期和时间格式的模式
抛出: NullPointerException - 如果给定的模式为 null
IllegalArgumentException - 如果给定的模式无效
模式:
y 年 M 月 d 日 H 时 m 分 s 秒
"yyyy-MM-dd HH:mm:ss"
"yyyy年MM月dd日HH时mm分ss秒"
*/
public class DateTest {
public static void main(String[] args) throws ParseException {
//构造特定格式
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String text = s.format(d);
System.out.println(d);//Wed Apr 01 09:48:17 CST 2100
System.out.println(text);//2100-04-01 09:48:17
4.2 格式解析Date parse(String source)
//接上方
//解析特定格式
//parse抛出解析异常 字符串和构造方法中的模式不一样就会抛出
//throw抛出 或者try catch处理
Date d2 = s.parse("2100-04-01 09:48:17");
System.out.println(d2);//Wed Apr 01 09:48:17 CST 2100
}
}
4.3 应用示例
计算一个人出生了多少天:
步骤分析:
1. 获取输入的出生日期
2. 使用DateFormat的parse方法解析为Date格式
3. 调用getTime方法获得毫秒值
4. 获取当前日期的毫秒值
5. 计算两个日期的差值
6. 将毫秒值转化为天数并输出
输入日期格式:yyyy-MM-dd
public class DateTest {
public static void main(String[] args) throws ParseException {
//1.
Scanner sc = new Scanner(System.in);
System.out.println("按格式输入(yyyy-MM-dd):");
String birthday = sc.next();
//2.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(birthday);
//3.
long dateMs = date.getTime();
//4.
long nowMs = new Date().getTime();//匿名对象
//5.
long delta = nowMs - dateMs;
//6.
int day = (int) (delta/(1000*86400));
System.out.println(day);
}
}
5 Calendar类
Calendar类时抽象类,提供操作日历字段的方法,无法直接创建对象使用
通过调用静态方法getInstance获取Calendar子类对象,获取默认时区和语言环境的日历
5.1 常用方法
- int get(int filed):获取给定日历字段的值
- void set(int filed):将给定的日历字段设置为给定值
- abstract void add(int flied, int amount):根据日历规则,对给定的日历字段增加或减去指定时间量
- Date getTime():返回一个表示Calendar时间值的Date对象
/*
1. int get(int filed):获取给定日历字段的值
2. void set(int filed):将给定的日历字段设置为给定值
3. abstract void add(int flied, int amount):根据日历规则,对给定的日历字段增加或减去指定时间量
4. Date getTime():返回一个表示Calendar时间值的Date对象
filed 是日历类的字段 可以使用Calendar的静态成员变量获取
YEAR MONTH DATE DAY_OF_MONTH HOUR MINUTE SECOND
*/
public class DateTest {
public static void main(String[] args){
//getInstance
Calendar c = Calendar.getInstance();
//get set add
int month = c.get(Calendar.MONTH);
System.out.println(month+1);//西方是0~11 东方+1
int date = c.get(Calendar.DATE); //每月多少号
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(date);//1
System.out.println(day);//1
c.set(Calendar.YEAR,2100);
c.set(8888,8,8);
System.out.println(c.get(Calendar.YEAR)+"-"+c.get(Calendar.MONTH));//8888-8
c.add(Calendar.YEAR,10);
System.out.println(c.get(Calendar.YEAR));
//日历转换为日期
Date time = c.getTime();
System.out.println(time);
}
}