一、Java API之Object类
Object类属于java.lang之下,是所有类的父类,所有对象(包括数组)都实现这个类的方法
#方法
- toString():
package object;
//Person类默认继承Object类,可以使用Object的toString()方法
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
Demo01toString.java
package object;
public class Demo01toString {
public static void main(String[] args) {
Person p = new Person("张三", 18);
String s = p.toString();//返回字符串,
System.out.println(s);//返回object.Person@2d98a335,是地址。
System.out.println(p);//返回object.Person@2d98a335,打印对象名和对象的toString方法都是返回地址。
//直接打印地址值没有意义,在Person类重写toString()方法。
}
}
在Person类重写toString后,就可以打印出自定义方法。
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
此时Demo01toString.java输出结果为
Person{name='张三', age=18}
Person{name='张三', age=18}
此外,Random都没有重写toString方法,Scanner、ArrayList重写了toString方法。
- equals()源码如下:
public boolean equals(Object obj){
return (this==obj);
}
比较两个对象p1,p2
public class Demo01toString {
public static void main(String[] args) {
Person p1 = new Person("张三", 18);
Person p2 = new Person("李四", 20);
Person p3 = new Person("李四", 20);
boolean b=p2.equals(p3);
System.out.println(b);//没有重写时为false,两个对象地址不同。
System.out.println(p2==p3);//false,两个对象不同。
}
}
在Person类重写equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;//使用反射技术,判断o是否为Person类型
Person person = (Person) o;//强转Object为Person类
return age == person.age &&
Objects.equals(name, person.name);
}
重写equals方法后,返回true
boolean b=p2.equals(p3);
System.out.println(b);//true,比较的是两个对象的姓名、年龄属性。
二、Java API之Objects类
1. equals方法源码
功能:比较两个对象是否相同,加入了健壮性判断,避免空指针异常。
public static boolean equals(Object a,Object b){
return (a==b)||(a!=null&&a.equals(b));
}
import java.utils.Objects;
public class Main {
public static void main(String[] args) {
String s1=null;
String s2="abc";
result=Objects.equals(s1,s2) ;
System.out.println(s1.equals(s2));//空指针异常
System.out.println(result);//返回false
}
}
三、Java API之Date类
类Date表示特定瞬间,精确到毫秒,1s=1000ms。
eg:2020-06-01 20:12:23:456
作用:可以把日期转化为毫秒进行计算,计算完毕,再把毫秒转化为日期
时间原点:1970年1月1日00:00:00(格林威治标准时间)
注意:在中国东八区,为1970年1月1日08:00:00
1天=246060*1000=86400000毫秒
package Date;
import java.util.Date;
public class demoDate
{
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());//获取当前系统一共到1970年1月1日00:00:00经历了多少毫秒,结果为1591193649632
demo01();
demo02();
}
/*
Date空参数构造方法,Date()获取当前系统的日期和时间
*/
private static void demo01(){
Date date = new Date();
long time=date.getTime();
System.out.println(time);//结果为1591193649632
System.out.println(date);//Wed Jun 03 22:04:48 GMT+08:00 2020
}
/*
Date带参数构造方法,Date(long date),参数为毫秒值。
*/
private static void demo02(){
Date date1 = new Date(0L);
Date date2 = new Date(System.currentTimeMillis());
System.out.println(date1);//Thu Jan 01 08:00:00 GMT+08:00 1970
System.out.println(date2);//Wed Jun 03 22:04:48 GMT+08:00 2020
}
/*
Date类成员方法,long getTime(),参数为毫秒值。返回自1970年1月1日00:00:00 GMT以来Date对象表示的毫秒数。
把日期转换为毫秒。相当于System.currentTimeMillis()
*/
}
四、Java API之DateFormat类
DateFormat类是Format的子类,是抽象类,无法直接创建对象,可以使用SimpleDateFormat子类。
y:年 M:月 d:日 H:小时 m:分 s :秒
“yyyy-MM-dd HH:mm:ss”
“yyyy年MM月dd日 HH时mm分ss秒”
package Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*成员方法:
String foramt(Date date):把Date日期转化为符合模式的字符串
Date parse(String source):把符合模式的字符串转化为Date日期
*/
public class DemoDateFormat {
public static void main(String[] args) {
demo01();
demo02();
}
private static void demo01() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=new Date();
//parse方法声明了ParseException解析异常,如果字符串和和构造方法的模式不一样,程序抛出异常
Date text= null;
try {
text = sdf.parse("2020-06-03 22:39:14");
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(date);//Wed Jun 03 22:39:14 GMT+08:00 2020
System.out.println(text);//Wed Jun 03 22:39:14 GMT+08:00 2020
}
private static void demo02() {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=new Date();
String text=sdf.format(date);
System.out.println(date);//Wed Jun 03 22:39:14 GMT+08:00 2020
System.out.println(text);//2020-06-03 22:39:14
}
}
例子:使用日期API,计算一个人已经出生了多少天
package Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class exercise {
public static void main(String[] args) throws ParseException {
System.out.println("输入出生日期,格式为yyyy-MM-dd");
Scanner in=new Scanner(System.in);
String s=in.next();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date birthdate=sdf.parse(s);
long birthtime=birthdate.getTime();
long todaytime=new Date().getTime();
long time=todaytime-birthtime;
System.out.println(time/1000/60/60/24);
}
}
五、Java API之Calendar类
Calender 类是一个抽象类,里面提供了很多操作日历的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)。无法直接创建对象,里面有一个静态方法getInstance(),返回一个Calender 类对象。
//创建Calender 类对象
package Calendar;
import java.util.Calendar;
public class demoCalendar
{
public static void main(String[] args) {
Calendar c=Calendar.getInstance();//多态
System.out.println(c);
}
}
//成员方法