Object类
java.lang.Object
类 Object 是类层次结构的根(父)类。
所有对象(包括数组)都实现这个类的方法。
toString()方法
- 作用: 打印对象信息
- 重写前:直接打印对象名=调用该方法分的toString类:
System.out.println(r);==System.out.println(r. toString());
如果没有重写toString()方法,返回的就是地址值。
- Alt+Insert键选择toString()方法重写
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
- 重写后:返回对象中的属性值
equals(Object obj)方法
- 作用:比较两个对象是否相同,但是加了一些健壮性的建设
- 重写前:基本数据类型和String类型比较的是值,引用数据类型比较的是地址值
/*boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
equals方法源码:
public boolean equals(Object obj) {
return (this == obj);
}
参数:
Object obj:可以传递任意的对象
== 比较运算符,返回的是一个布尔值 true false
基本数据类型:比较的是值
引用数据类型:比价的是两个对象的地址值
this是谁?那个对象调用的方法,方法中的this就是那个对象;p1调用的equals方法所以this就是p1
obj是谁?传递过来的参数p2
this==obj -->p1==p2
*/
import java.util.Objects;
public class Equals {
public static void main(String[] args) {
String a1="hello";
String a2="hello";
String a3=null;
Person p1=new Person("zy",15);
Person p2=new Person("ly",20);
boolean b = p1.equals(p2);
System.out.println(b);//false,比较的是地址值
boolean c = a1.equals(a2);//String 重写了equals方法,比较的是值
System.out.println(c);//true
// boolean d = a3.equals(a2);//
//System.out.println(d);//错误 NullPointerException 不能调用方法,会抛出空指针异常。
boolean e = Objects.equals(a3,a2);//
System.out.println(e);//false
// 原因:
// public static boolean equals(Object a, Object b) {
// return (a == b) || (a != null && a.equals(b));
// }
}
}
- Alt+Insert键选择equals()andhashCode()方法重写(选java7那个比较好)
@Override
public boolean equals(Object o) {
if (this == o) return true;
//getClass() != o.getClass() 使用反射技术,判断o是否是Person类型 等效于 obj instanceof Person
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
public static void main(String[] args) {
}
- 重写后:比较两个对象属性值是否相同
Date类
java.util.Date是一个表示日期和时间的类,可以精确到毫秒(1000毫秒=1秒)。
时间原点(0毫秒):1970 年 1 月 1 日 00:00:00(英国格林威治)
注意:
- 中国属于东八区,会把时间增加8个小时(1970 年 1 月 1 日 08:00:00)
利用Date类可以计算一时间到另一时间过了多少天
import java.util.Date;
public class Demo02Date {
public static void main(String[] args) {
demo01();
demo02();
demo03();
}
/*
long getTime() 把日期转换为毫秒值(相当于System.currentTimeMillis()方法)
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
*/
private static void demo03() {
Date date = new Date();
long time = date.getTime();
System.out.println(time);//1617524371529
}
/*
Date类的带参数构造方法
Date(long date) :传递毫秒值,把毫秒值转换为Date日期
*/
private static void demo02() {
Date date = new Date(0L);//0l表示时间原点
System.out.println(date);// Thu Jan 01 08:00:00 CST 1970
date = new Date(3742767540068L);
System.out.println(date);// Sun Aug 08 09:39:00 CST 2088
}
/*
Date类的空参数构造方法
Date() 获取当前系统的日期和时间
*/
private static void demo01() {
Date date = new Date();
System.out.println(date);//Sun Apr 04 16:19:31 CST 2021
}
}
DateFormat类
它是Format类的子类,是一个格式化日期、时间的抽象类
功能:
- 格式化 : 日期–>文本 String Format(Data date);
- 解析: 文本–>日期 Date parse (String sourse);
因为DateFormat类是抽象类,因此,我们使用它的子类:java.text.SimpleDateFormat,它的构造方法-------SimpleDateFormat(String pattern)
pattern:字符串,代表日期、时间的自定义格式。
pattern常用格式(区分大小写):
年 y
月M
日d
时H
分m
秒s
举例:
yyyy-MM-dd HH:mm:ss
yyyy年MM月dd日 HH时mm分ss秒
(字母不能改,链接符号可以改!)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFomat {
public static void main(String[] args) throws ParseException {
demo01();
demo02();
}
private static void demo02() throws ParseException {
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat s2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
//2.调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为Date日期
//Date parse(String source) 把符合模式的字符串,解析为Date日期
Date d1 = s2.parse("2007年01月08日 15时00分59秒");
System.out.println(d1);//Mon Jan 08 15:00:59 CST 2007
}
private static void demo01() {
//1.创建SimpleDateFormat对象,构造方法中传递指定的模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//2.调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
//String format(Date date) 按照指定的模式,把Date日期,格式化为符合模式的字符串
Date d1 = new Date();
String text = sdf.format(d1);
System.out.println(d1);//Sun Apr 04 16:02:49 CST 2021
System.out.println(text);//2021-04-04 04:02:49
}
}
利用Format类、Date类计算一个人出生了多少天
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class DateTest {
public static void main(String[] args) throws ParseException {
//1.使用Scanner类中的方法next,获得出生日期
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的出生日期,格式为:yyyy-MM-dd" );
String birthday= sc.next();
//使用DateFormat类中的方法parse,把字符串类型的出生日期解析为Date格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date birth = sdf.parse(birthday);
//把Date格式的日期转换为毫秒值
long birthTime = birth.getTime();
//获取当前日期的毫秒值,转换为毫秒值
long todayTime=new Date().getTime();
//当前-出生,得到毫秒值差
long time=todayTime-birthTime;
//把毫秒值转换为天
System.out.println(time/1000/60/60/24);
}
}