今日内容
Object类
日期相关类
Date类
DataFormat类
Calendar类
System类
StringBuilder类
8种基本数据类型对应的包装类
API怎么学习
不要去死记,只要学过的类和方法会查会用即可
如何查看API文档
(1)可以先查包,然后去包里查类
(2)点击索引,输入框中输入类名 推荐的方式
如何使用API文档
(1)看包
如果是java.lang包下的类,直接使用不用导包
如果不是java.lang包下的类,使用之前就需要导包
(2)看类的描述
描述了类的作用,特点,注意事项甚至简单的使用方式
(3)看构造方法
创建对象需要用到构造方法
在文档中,有些类展示了构造方法,有些没有
(4)看成员方法
方法名:看到方法名要能知道这个方法是什么作用
看参数列表(形参):调用方法的时候必须根据形参来传递对应类型的实参
如果形参是基本数据类型,则传递的是对应类型的值
如果形参是引用数据类型(数组、类、接口),则传递的是数组、该类对象或者子类对象、该接口的实现类对象
返回值类型:如果返回值类型为void,则使用的时候只能单独调用
如果返回值类型不是void,则使用的时候可以使用三种方式(单独、输出、赋值)调用
Object类
在java.lang包下,所以使用的时候不用导包
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
解释:Object类是所有类的直接或者间接父类,如果一个类没有直接继承其他类,则一定默认继承了Object类
常见方法
toString方法
public String toString():将对象转为字符串
每个类都能继承Object类中的方法,所以toString方法也会被继承,Object类中的toString方法有指定的格式:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
// com.itheima.demo01.Object.Person@75412c2f
Object类中的toString方法输出的格式的内容没有太大意义,所以我们平常一般会重写toString方法,重写的原则
是:打印对象中的内容(类中的成员变量的值)
如何重写
快捷键生成
alt+insert 找到toString
直接打印一个对象的名字,其实默认调用的是对象的toString方法
这个和println方法有关,底层判断如何传递的对象不是null,则默认调用toString方法
equals方法
public boolean equals(Object obj):判断两个对象是否相等
Object类中的equals方法比较的是内存地址值:
public boolean equals(Object obj) {
return (this == obj);
}
// this代表调用equals方法的那个对象,obj是调用方法传递的实参对象
==的使用
比较基本数据类型,比较的是值是否相等
比较引用数据类型,比较的是地址值是否相等
equals只能比较引用数据类型,==既可以比较基本数据类型也可以比较引用数据类型
equals方法底层使用的是==号,如果只是要比较内存地址是否相等可以直接使用==,没有必要使用equals方法再去底层调用==,
所以equals方法一般也会被重写,改变比较的规则,不比较地址了,而比较内容.
重写的原则是:比较对象的内容(类中成员变量的值)是否相等
如何所有的内容都相同,说明是相等,如果有一个不同,则说明不相等
如何重写
使用快捷键 alt+insert 找到equals&hashCode
日期相关类
Date类
在java.util包下,使用的时候必须导包,注意不是使用java.sql包下的Date类了,这是它的子类
表示是特定的瞬间(时间精确到毫秒),毫秒值是相当于1970年1月1日 0时0分0秒0秒
Date类可以表示过去、现在和将来的任何一个特定瞬间,主要就看传递的毫秒值落到哪个时候就是哪个时候
构造方法
Date():空参构造,代表的是现在这个特定瞬间
Date(long date):有参构造,传递的毫秒值落到哪个时候就是哪个时候
成员方法
public long getTime():获取Date对象代表的瞬间的毫秒值(是一个相对值,相对于1970年1月1日 0时0分0秒0秒)
public void setTime(long time):设置毫秒值,和有参构造方法都能达到给Date对象设置毫秒值的效果
如何获取当前系统时间的毫秒值?
(1)System.currentTimeMillis()
(2)new Date().getTime()
DataFormat类
格式化和解析日期字符串
是一个抽象类,没法创建对象使用,使用其子类SimpleDateFormat
抽象类中可以有抽象方法,可以有非抽象方法,如果一个类去继承抽象类,就必须实现其中所有的抽象方法,否则该类也必须变成抽象类
SimpleDateFormat
构造方法
SimpleDateFormat(String pattern)
pattern指的就是模式
常见方法
格式化:日期对象(Date) ->文本(String)
有了这个方法之后,日期对象想要以什么样的格式显示都是可以的,只要指定模式
y 年
M 月
d 日
H 时
m 分
s 秒
yyyy-MM-dd -> 2018-08-08
yyyy/MM/dd -> 2018/08/08
yyyy年MM月dd日 -> 2018年08月08日
public final String format(Date date)
解析:文本(String) ->日期对象(Date)
"2018年08月10日" "2018年08月08日"
注意:给定的文本(日期字符串)必须匹配指定的模式,这样才能正确的解析,否则报解析异常ParseException
public Date parse(String source)
步骤:
(1)创建SimpleDateFormat对象,使用有一个参数的构造方法,传递模式
(2)调用format或者parse方法进行格式化或者解析
课堂练习:
键盘录入一个人的出生日期(格式:xxxx/xx/xx),计算这个人到底出生了多少天?
import java.text.ParseException;
import java.util.Date;
import java.util.Scanner;
import java.text.SimpleDateFormat;
public class DateTest {
public static void main(String[] args) throws ParseException {
function();
}
public static void function() throws ParseException {
System.out.println("请输入生日(格式yyyy-MM-dd)");
String birthdayString=new Scanner(System.in).next();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
//将输入的字符串转换成进行解析
Date birthday=sdf.parse(birthdayString);
Date todayDate=new Date();//当前时间
//获取到出生日期的毫秒值
long birthdaySecond=birthday.getTime();
//获取当前时间毫秒值
long todaySecond=todayDate.getTime();
//获取时间差
long secone=todaySecond-birthdaySecond;
if (secone<0){
System.out.println("还没出生呢!");
}else {
System.out.println("你已经出生了:"+secone/1000/60/60/24+" 天");
}
}
}
Calendar类
日历类,能够操作单独的年、月、日、时、分、秒、星期等信息
它是一个抽象类,不能通过构造方法创建对象,但是要调用其中的方法必须要有对象,
这时可以创建子类对象或者寻找本类的静态方法返回子类对象
public static Calendar getInstance()
// 获取对象
Calendar c = Calendar.getInstance();
常用方法
获取
int get(int field)
设置
void set(int field, int value) :一次给一个年或者月或者日进行设置值
void set(int year, int month, int date) :一次可以同时给年月日进行设置值
添加和减少
void add(int field, int amount) :给指定的日期字段进行值的添加和减少
Date互转
Date getTime() :将Calendar对象转为Date对象
setTime(Date date) :将Date对象转为Calendar对象
课堂案例:
键盘录入一个日期字符串(格式:xxxx年xx月xx日),求出这个日期代表星期几
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.text.SimpleDateFormat;
public class TestCalendar {
public static void main(String[] args) throws ParseException {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个日期(格式:xxxx年xx月xx日)");
String dateStr=sc.next();
Date date=new SimpleDateFormat("yyyy年MM月dd日").parse(dateStr);
Calendar c = Calendar.getInstance();
c.setTime(date);
int week=c.get(Calendar.DAY_OF_WEEK);
String[] str={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
System.out.println(str[week]);
}
}
System类
static long currentTimeMillis()
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
StringBuilder类
在java.lang包下,使用的时候不用导包
代表的是一个可变字符串,String是不可以变的字符串,它是常量
StringBuilder相当于是一个容器,里面可以添加(append)任意的数据,最终得到的都是字符串
append:添加方法
String和StringBuilder
String ->StringBuilder :通过构造方法
StringBuilder sb = new StringBuilder("hello");
StringBuilder ->String:toString方法
String str = sb.toString();