常用API就是要学习一些常用的类和类中的方法
特点:方法多,概念少,就和背单词一样。
1.Object类
java.lang.Object是java语言中的根类, 祖宗类。所有的类都直接或间接的继承自Object。
在对象实例化的时候,最终找到的父类就是Object。
1.1 equals()方法
-
判断相等:
public class Demo { public static void main(String[] args) { int a = 10; int b = 10; Student s1 = new Student("柳岩",37); Student s2 = new Student("柳岩",37); /* ==号: 判断基本数据类型时判断的是值是否相等 判断引用数据类型是判断的是地址值是否相等 */ System.out.println(a == b); //true System.out.println(s1 == s2); //false /* Object类中有一个equals()方法,作用是判断两个对象是否相同 */ //按住键盘的ctrl+鼠标左键可以查看底层源代码 System.out.println(s1.equals(s2)); //false } }
-
查看Object中equals的源码:
- 查看源码发现,Object类里面的equals方法其实也是和==是一样的,也是判断两个对象的地址值是否相同,那么这个方法就没有意义。
public boolean equals(Object obj) { return (this == obj); }
-
idea重写equals()方法:
-
因为父类的equals()方法没有实际意义,所以在子类中需要自己重写equals方法,只不过也不需要我们自己写,idea是可以帮我们生成的。
-
重写的equals()方法是判断成员变量
- 相同类型且成员变量的值相同就会返回true
//重写方法 //alt + insert //生成的是两个方法,但是后面那个hashCode()我们现在不用所以可以删掉 @Override public boolean equals(Object o) { //比如说再测试类中 s1.equals(s2) this就是s1 o就是s2 //如果两个对象的地址值是相同的,那么说明姓名年龄肯定相同,直接返回true if (this == o) { return true; } //getClass()的意思是获取对象的实际类型 //判断o是空 或者 两个对象不是同种类型,就直接返回false if (o == null || this.getClass() != o.getClass()) { return false; } //向下转型 //Object是父类 Student是子类 //使用o不能调用子类的特有方法和属性,所以需要向下转型 Student student = (Student) o; //判断两个对象的年龄是否相同 并且 两个对象的姓名是否相同 return age== student.age && //Objects是什么鬼?一会单独讲解 Objects.equals(name, student.name); }
-
1.2 toString()方法
-
输出语句和toString()的关系:
在输出对象的时候,会自动调用对象的toString()方法
-
查看源码:
public String toString() { //获取类全名 + @ + 哈希值的十六进制(地址值) return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
-
使用idea完成方法重写:
-
Object类中的toString()方法打印的效果没有什么意义
-
我们可以在子类中重写toString()方法,用来打印类型和成员变量值
@Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; }
-
1.3 Objects类
-
Objects的equals()方法:
-
作用:
判断两个对象是否相同。
-
优点:
可以避免空指针异常。
-
代码演示:
public class Demo_Objects { public static void main(String[] args) { //这个equals()是一个静态方法,所以可以使用类名直接调用 //参数可以传入两个对象,可以判断两个对象是否相同 //这个方法的优点是:可以避免空指针异常 String s1 = null; String s2 = "柳演"; System.out.println(Objects.equals(s1,s2));//false System.out.println(s1.equals(s2)); //报错! } } 虽然这个方法比较好,但是这个功能挺鸡肋的,我们自己在写代码时候也不需要用。
-
1.4 native关键字
native可以用来修饰方法,被native修饰的方法叫做本地方法。
这些方法由于调用非java的代码,所以在java中无法显示。
也就是说,native的方法是无法查看源码的。
我们自己写代码是一定不会用这个东西的,学他是告诉你在底层是如果看到了这个关键字,表示没有源码。
public native int hashCode();
2.日期类Date
-
概述:
java.util.Date表示日期类。可以精确的表示某一个时刻,用毫秒为单位。
-
构造方法:
方法 | 说明 |
---|---|
public Date() | 将当前的系统时间,转换成Date对象 |
public Date(long date) | 将指定参数的毫秒值date,转换成Date对象 |
标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)
-
示例代码:
public class DemoDate的构造方法 { public static void main(String[] args) { //public Date() //将当前的系统时间,转换成Date对象 Date d = new Date(); System.out.println(d); //Tue May 05 10:36:30 CST 2020 //public Date(long date) //将指定参数的毫秒值date,转换成Date对象 //1秒钟 Date d2 = new Date(1000); System.out.println(d2); //Thu Jan 01 08:00:01 CST 1970 } }
-
常用方法:
方法 | 说明 |
---|---|
getTime() | 获取时间对象的毫秒值 |
setTime(long time) | 设置时间对象的毫秒值 |
before(Date date) | 判断当前对象是否在参数时间之前 |
after(Date date) | 判断当前对象是否在参数时间之后 |
- 示例代码:
public class DemeDate常用方法 {
public static void main(String[] args) {
//getTime()
//获取时间对象的毫秒值
Date d = new Date(1000*60);
System.out.println(d);
System.out.println(d.getTime());
//对象时间距离1970年1月1日8点0分0秒的时间差值 60000
Date d2 = new Date();
System.out.println(d2.getTime());
//当前时间距离1970年1月1日8点0分0秒的时间差值 1588646585598
//setTime(long time)
//设置时间对象的毫秒值
Date d3 = new Date();
System.out.println(d3); //Tue May 05 10:44:20 CST 2020
d3.setTime(1000*60*60);
System.out.println(d3); //Thu Jan 01 09:00:00 CST 1970
//before(Date date)
//判断当前对象是否在参数时间之前
System.out.println(d3.before(d2));
//d3表示的是1970年 d2表示的是2020年 true
//after(Date date)
//判断当前对象是否在参数时间之后
System.out.println(d3.after(d));
//d3是1970年Jan 01 09:00:00 d是1970年1月1日8点1分0秒 true
}
}
3.日期格式化类DateFormat
-
概述:
DateFormat是一个抽象类。这个类的功能是对日期格式进行改变,还可以对String字符串类型和Date日期类型做互相转换。
-
DateFormat常用方法:
方法 | 说明 |
---|---|
String format(Date date) | 格式化:按照指定的格式,把Date对象转换为String对象 |
Date parse(String s) | 解析:按照指定的格式,把String对象转换为Date对象 |
- 子类SimpleDateFormat的构造方法:
方法 | 说明 |
---|---|
public SimpleDateFormat(String pattern) | 创建时间格式化对象,传入时间模式 |
-
示例代码:
格式化:
public class Demo格式化 { public static void main(String[] args) { //public SimpleDateFormat(String pattern) //创建时间格式化对象,传入时间模式 //模式就是你要的日期格式 //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); //String format(Date date) //格式化:按照指定的格式,把Date对象转换为String对象 Date d = new Date(); String s = sdf.format(d); System.out.println(s); } }
解析:
public class Demo解析 { public static void main(String[] args) throws ParseException { String s = "1999年09月09日"; //创建对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); //解析 //这个方法会出现红色波浪线,把光标放上去按alt+enter再enter Date date = sdf.parse(s); System.out.println(date); //ParseException字符串和写的模式不一样,就会报错 } }
练习一:字符串日期的格式转化
/*
键盘输入一个日期:2008年08月08日
需求:变成"2008/08/08"的格式
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Demo练习一 {
public static void main(String[] args) throws ParseException {
/*
键盘输入一个日期:2008年08月08日
需求:变成"2008/08/08"的格式
*/
//1.键盘输入字符串表示时间
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个日期:格式(2008年08月08日)");
String s = sc.nextLine();
//2.先把字符串转成日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date date = sdf.parse(s);
//3.再把日期转成另一个字符串
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
String s2 = sdf2.format(date);
System.out.println(s2);
}
}
练习二:求你来到这个世界多少天?
/*
键盘输入一个字符串类型的时间,打印来到世界多少天。
比如:
请输入你的出生时间:
1999-01-01
你来到这个世界已经8888天了
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Demo练习二 {
public static void main(String[] args) throws ParseException {
/*
键盘输入一个字符串类型的时间,打印来到世界多少天。
比如:
请输入你的出生时间:
1999-01-01
你来到这个世界已经8888天了
*/
//1.键盘输入一个时间代表生日String
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的出生年月日:(1999年01月01日)");
String s = sc.nextLine();
//2.获取现在时间Date
Date d = new Date();
//3.把生日的String-->Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Date d2 = sdf.parse(s);
//4.获取Date的毫秒值
long nowTime = d.getTime();
long birthdayTime = d2.getTime();
//5.做计算
System.out.println("你已经活了" +((nowTime-birthdayTime)/1000/60/60/24) + "天");
}
}
4.日历类Calendar
-
概述:
Calendar把和时间相关的值都变成了字段,可以更加方便的对各种值进行单独的操作。
比如:前面只有毫秒的概念,所以如果要表示一个小时需要:1000乘60乘60
在日历类中想要表示一个小时,可以直接 小时 1
-
创建对象:
-
直接创建子类GregorianCalendar
GregorianCalendar gc = new GregorianCalendar();
在抽象类中,提供了一个今天方法也能返回子类对象
Calendar c = Calendar.getInstance();
-
-
常用方法:
方法 | 说明 |
---|---|
int get(int field) | 获取某个字段的值 |
void set(int field,int value) | 设置某个字段的值 |
void add(int field,int amount) | 偏移某个字段的值(加减) |
setTime(Date date) | 把Date对象转成Calendar对象 |
-
可以使用Calender中定义的常量来表示:
Calendar.YEAR : 年 Calendar.MONTH :月 Calendar.DAY_OF_MONTH:日期 Calendar.HOUR:小时 Calendar.MINUTE:分钟 Calendar.SECOND:秒 Calendar.DAY_OF_WEEK:星期
-
示例代码:
-
get方法演示
public class Demo日历的方法 { public static void main(String[] args) { //获取对象 //也是代表当前系统时间 Calendar c = Calendar.getInstance(); //int get(int field) //获取某个字段的值 //获取年 int year = c.get(Calendar.YEAR); System.out.println(year); //获取月!!!在日历对象内部,保存月份用的是0-11,也就是说如果是1月保存的是0,如果是12月保存的是11 int month = c.get(Calendar.MONTH); System.out.println(month); //获取日期 int day = c.get(Calendar.DAY_OF_MONTH); System.out.println(day); //获取小时 int hour = c.get(Calendar.HOUR_OF_DAY); System.out.println(hour); //获取分钟 int minute = c.get(Calendar.MINUTE); System.out.println(minute); //获取秒 int second = c.get(Calendar.SECOND); System.out.println(second); //获取星期!!!日历类里面保存星期是以星期日作为一周的第1天,星期一就是第2天 int week = c.get(Calendar.DAY_OF_WEEK); System.out.println(week); //接下来说一个小问题 //public final static int YEAR = 1; //在这里1不是生活中年份的意思,java之不过是用1来代表"年"这个字 } }
-
对于月份和星期的特殊处理
public class Demo月份和星期的处理 { public static void main(String[] args) { //获取对象 Calendar c = Calendar.getInstance(); //获取月份 //只要在输出的时候+1就可以了 int month = c.get(Calendar.MONTH); System.out.println(month+1 +"月"); //定义数组 String[] arr = {" ","星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; //获取星期 int i = c.get(Calendar.DAY_OF_WEEK); // 1-7 //返回的结果是3,从数组中获取索引为3的元素就是星期二 System.out.println(arr[i]); } }
-
set()和add()方法演示
public class Demo02日历的方法 { public static void main(String[] args) { //获取对象 Calendar c = Calendar.getInstance(); System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日"); //void set(int field,int value) //设置某个字段的值 //把年设置成2000年 c.set(Calendar.YEAR,2000); //把月设置成10月 c.set(Calendar.MONTH,9); System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日"); //void add(int field,int amount) //偏移某个字段的值(加减) //在当前值的基础上做加减操作 //让年加10 c.add(Calendar.YEAR,10); //让日减6 c.add(Calendar.DAY_OF_MONTH,-6); System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日"); } }
-
setTime(Date date)方法演示
public class Demo03日历的方法 { public static void main(String[] args) { //setTime(Date date) //把Date对象转成Calendar对象 Date d = new Date(1000); System.out.println(d); //把Date的时间赋值给Calendar Calendar c = Calendar.getInstance(); c.setTime(d); System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1)+"月" + c.get(Calendar.DAY_OF_MONTH) + "日"); //这个方法不是讲义中要讲的,只是我发现经常有人用。 //其实在类中海油很多很多方法我没有讲,我们也讲不完。。。 //在以后你可能见到我们没有讲的方法,自己查方法的作用 } } 效果: 1970年1月1日
-
5.Math类
-
概述:
Math表示数学,和数学相关的一些计算的方法在这个类中。
Math是一个工具类。
【工具类】的意思就是说,这个类的所有成员都是静态的,不需要创建对象可以使用类名直接访问。
-
常用方法:
方法 | 说明 |
---|---|
static int abs(int a) | 获取绝对值 |
static double ceil(double a) | 向上取整 |
static double floor(double a) | 向下取整 |
static double pow(double a, double b) | 获取a的b次方 |
static long round(double a) | 四舍五入 |
- 示例代码:
public class Demo_Math {
public static void main(String[] args) {
//static int abs(int a)
//获取绝对值
System.out.println(Math.abs(3)); //3
System.out.println(Math.abs(-4)); //4
//static double ceil(double a)
//向上取整
System.out.println(Math.ceil(3.14)); //4.0
//static double floor(double a)
//向下取整
System.out.println(Math.floor(9.99)); //9.0
//static double pow(double a, double b)
//获取a的b次方
System.out.println(Math.pow(2,3)); //8.0
//static long round(double a)
//四舍五入
System.out.println(Math.round(4.45)); //4
System.out.println(Math.round(4.5)); // 5
}
}
6.System类
-
概述:
System也是一个工具类。
和系统相关的一些方法放在System类里。
-
常用方法:
方法 | 说明 |
---|---|
static void exit(int status) | 退出虚拟机,0表示正常退出 |
static long currentTimeMillis() | 获取当前时间的毫秒值 |
static void arrayCopy() | 数组中元素的复制 |
-
示例代码:
public class Demo_System { public static void main(String[] args) { //static void exit(int status) //退出虚拟机,0表示正常退出 System.out.println(1); System.out.println(2); //System.exit(0); System.out.println(3); //static long currentTimeMillis() //获取当前时间的毫秒值 long time = System.currentTimeMillis(); System.out.println(time); Date d = new Date(); long time2 = d.getTime(); System.out.println(time2); //static void arraycopy() //数组中元素的复制 int[] arr = {11,22,33,44,55,66}; int[] brr = new int[6]; /* Object src 原数组 int srcPos 原数组开始索引 Object dest 目标数组 int destPos 目标数组开始索引 int length 复制的个数 */ System.arraycopy(arr,1,brr,0,3); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); for (int i = 0; i < brr.length; i++) { System.out.print(brr[i] + " "); } System.out.println(); int[] crr = {11,22,33,44,55}; System.arraycopy(crr,2,crr,0,3); for (int i = 0; i < crr.length; i++) { System.out.print(crr[i] + " "); } } }
总结(对于实际开发中需要理解和记忆的部分我做了记号)
Object
equals()【重要,需要理解】
因为Object类中的equals()判断的是两个对象的地址值,没有意义,所以要重写
重写之后判断两个对象的类型和成员变量
toString()【重要,需要理解】
因为Object类的toString()方法返回地址值的字符串,没有意义,所以要重写
重写之后返回的是成员变量值组成的字符串
Objects
equals()
在判断两个对象相同时,避免了空指针异常,但是我们也懒得用[作用有点鸡肋]
native
如果在底层看到了native表示这个方法无法查看源码
Date
构造方法:
new Date():【记】
new Date(long time):
常用方法:
setTime(long time):【记】
getTime():【记】
before(Date date):
after(Date date):
SimpleDateFormat
只有在需要把【字符串】转成【日期】或者【日期】转成【字符串】的时候使用
创建对象:
SimpleDateFormat sdf = new SimpleDateFormat("匹配模式yyyy MM dd");
常用方法:
format(Date date):【记】
parse(String s):【记】
Calendar
创建对象:
Calendar.newInstance();
常用方法:
get(int field):【记】
set(int field,int value):【记】
add(int field,int value):【记】
setTime(Date date):
Math:
abs(int i):
ceil(double a):
floor(double a):
round(double a):【记】
pow(int a,int b):
System:
exit(int i) :【记】
currentTimeMilles():【记】
arraycopy(Object src,int soff,Object dest,int doff,int len):【记】