Object类
java.lang.Object类是Java中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object类。
如果一类没有特别指定父类,那么默认继承自Object类。
Object类的toString方法
String toString()
【返回该对象的字符串表示】
【直接打印对象的名字,其实就是在调用对象的toString方法】
注意:
看一个类是否重写了toString方法,直接打印这个对象的名字即可。
如果【没有重写】toString方法,那么打印的就是这个对象的地址值。
如果【重写了】toString方法,那么就按照重写的方式执行。
【Scanner和ArrayList都重写了toString方法】
Object类的equals方法
【指示其他对象是否与此对象“相等”】
public boolean equals(Object obj){
return (this == obj);
}
【Object obj:可以传递任意的对象】
【 == :比较运算符,返回的是一个布尔值】
【基本数据类型:比较的是值】
【引用数据类型:比较的是两个对象的地址】
【this是调用equals的对象】
【obj是作为参数的对象】
Objects类
在JDK7中添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
Objects类的equals方法
【对两个对象进行比较,防止空指针异常】
public static boolean equals(Object a,Object b){
return (a == b) || (a != null && a.equals(b));
}
Date类
java.util.Date类,表示日期和时间的类,表示特定的瞬间,精确到毫秒。【一毫秒等于千分之一秒,1000毫秒=1秒】
毫秒值的作用:可以对时间和日期进行计算。把日期转换为毫秒进行计算,计算完毕,再把毫秒转换为日期。
【时间原点:1970年01月01日 00:00:00 (英国格林威治)】
【中国属于东八区,会把时间增加八小时。1970年01月01日 08:00:00 】
【时间原点到当前时间所经历的毫秒】
System.out.println(System.currentTimeMillis());
Date类的构造方法和成员方法
1. Date类的空参数构造方法
【获取当前系统的日期和时间】
Date()
2. Date类的带参构造方法
【传递毫秒值,把毫秒值转换为Date日期】
Date(long date)
import java.util.Date;
public class Demo01Date {
public static void main(String[] args) {
//无参
Date date1 = new Date();
System.out.println(date1);//Sun Dec 06 16:37:29 CST 2020
//有参
Date date2 = new Date(0L);
System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
}
}
成员方法
【返回自1970年1月1日 00:00:00 GMT以来此Date对象所表示的毫秒数】
【把日期转换为毫秒,相当于System.currentTimeMillis()】
long getTime()
Date date = new Date();
long time = date.getTime();
System.out.println(time);//1607248255655
DateFormat类
java.text.DateFormat类是日期/时间格式化子类的抽象类,通过这个类可以帮助我们完成日期和文本之间的转换,也就是可以在Date对象和String对象之间进行来回转换。
格式化:按照指定的格式,从Date对象转换为String对象。
解析:按照指定格式,从String对象转换为Date对象。
DateFormat是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类
java.text.SimpleDateFormat extends DateFormat
构造方法
【用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat】
SimpleDateFormat(String pattern)
【参数:String pattern 传递指定的模式】
【模式:区分大小写】
【写对应的模式会把模式替换为对应的日期和时间】
yyyy-MM-dd HH:mm:ss
【模式中的字母不能更改,但是连接模式的符号可以改变】
成员方法
1.【格式化】
String format(Date date)
使用步骤:
1.创建SimpleDateFormat对象,构造方法中传递指定的模式
2.调用SimpleDateFormat对象中的format方法,按照构造方法中指定的模式,把Date日期转化为符合模式的字符串(文本)
2.【解析】
Date parse(String source)
使用步骤:
1.创建SimpleDateFormat对象,构造方法中传递指定的模式
2.调用SimpleDateFormat对象中的parse方法,把符合构造方法中模式的字符串,解析为Date日期
【注意】
public Date parse(String source) throws parseException
parse方法声明了一个异常叫做parseException
如果字符串的模式和构造方法的模式不一样,那么程序就会抛出此异常
调用一个抛出异常的方法,就必须处理这个异常,要么throw继续抛出这个异常,要么try catch自己处理
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormat {
public static void main(String[] args) throws ParseException {
//使用format方法
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = new Date();
String d1 = sdf1.format(date1);
System.out.println(d1);//2020-12-06 19:00:34
//使用parse方法
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date2 = sdf2.parse("2020-12-06 18:27:26");
System.out.println(date2);//Sun Dec 06 18:27:26 CST 2020
}
}
标识字母(区分大小写) | 含义 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
Calendar类
java.util.Calendar 日历类
Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)
Calendar类无法直接创建对象使用,里面有一个静态方法叫getInstance(),该方法返回了Calendar对象的子类对象。
static Calendar getInstance()
【使用默认时区和语言获得一个日历】
import java.util.Calendar;
public class Demo04Calendar {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();//多态,父类接收子类对象
System.out.println(c);
}
}
Calendar类的常用成员方法
1.public int get(int field)
【返回给定日历字段的值】
2.public void set(int field,int value)
【将给定的日历字段设置为给定值】
【参数:int value ,给指定字段设置的值】
3.public abstract void add(int field,int amount)
【根据日历的规则,为给定的日历字段添加或减去指定的时间量】
【参数:int amount ,增加/减少指定的值,正数时增加,负数时减少】
4.public Date getTime()
【返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象】
【把日历对象转换为日期对象】
成员方法的参数
int field:日历类的字段,可以使用Calendar类的静态成员变量获取
public static final int YEAR = 1;//年
public static final int MONTH = 1;//月
public static final int DATE = 1;//月中的某一天
public static final int DAY_OF_MONTH = 1;//月中的某一天
public static final int HOUR = 1;//时
public static final int MINUTE = 1;//分
public static final int SECOND = 1;//秒
import java.util.Calendar;
import java.util.Date;
public class Demo05CalendarMethod {
public static void main(String[] args) {
getMethod();//2020
setMethod();//2000
addMethod();//2021
getTimeMethod();//Sun Dec 06 20:56:40 CST 2020
}
//public int get(int field)返回给定日历字段的值
public static void getMethod() {
//使用getInstance创建一个Calendar类对象
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
System.out.println(year);
}
//public int set(int field,int value)将给定的日历字段设置为给定值
public static void setMethod() {
//使用getInstance创建一个Calendar类对象
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2000);
c.set(2000, 0, 5);//同时设置年月日,set方法的重载
int year = c.get(Calendar.YEAR);
System.out.println(year);
// int month = c.get(Calendar.MONTH);
// System.out.println(month);
// int date = c.get(Calendar.DAY_OF_MONTH);
// System.out.println(date);
}
//public abstract void add(int field,int amount)根据日历的规则为给定日历字段添加或减去指定时间量
public static void addMethod() {
//使用getInstance创建一个Calendar类对象
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, 1);//把年增加一年
int year = c.get(Calendar.YEAR);
System.out.println(year);
}
//public Date getTime()将日历对象转换为日期对象
public static void getTimeMethod() {
//使用getInstance创建一个Calendar类对象
Calendar c = Calendar.getInstance();
Date date = c.getTime();
System.out.println(date);
}
}
System类
java.lang.System类提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。
System类的常用方法
1.public static long currentTimeMillis()
【返回以毫秒为单位的当前时间】
【可以用于测试程序效率】
2.public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
【将数组中指定的数据拷贝到另一个数组中】
参数:
src - 源数组
srcPos - 源数组中的起始位置
dest - 目标数组
destPos - 目标数组中的起始位置
length - 要复制的数组元素的数量
import java.util.Arrays;
public class Demo06System {
public static void main(String[] args) {
demo1();//耗时155毫秒
demo2();
/*
* 复制前:[6, 7, 8, 9, 10]
* 复制后:[1, 2, 3, 9, 10]
*/
}
/*
* 将src数组前三个元素,复制到dest数组前三个位置上
* 复制前:src:[1,2,3,4,5] dest:[6,7,8,9,10]
* 复制后:src:[1,2,3,4,5] dest:[1,2,3,9,10]
*/
private static void demo2() {
//定义源数组
int[] src = {1,2,3,4,5};
//定义目标数组
int[] dest = {6,7,8,9,10};
System.out.println("复制前:" + Arrays.toString(dest));
System.arraycopy(src, 0, dest, 0, 3);
System.out.println("复制后:" + Arrays.toString(dest));
}
//验证for循环打印数字1-9999需要耗费的时间
private static void demo1() {
//在执行前获取一次时间
long startTime = System.currentTimeMillis();
for(int i = 1; i <= 9999; i++) {
System.out.println(i);
}
//在循环结束后获取一次时间
long endTime = System.currentTimeMillis();
System.out.println("耗时" + (endTime - startTime) + "毫秒");
}
}
字符串是常量,它的值在创建之后不能改变
字符串底层是一个被final修饰的数组,不可改变是一个常量。
进行字符串的相加,内存中就会有多个字符串,占用空间多,效率低下。
StringBuilder类
java.lang.StringBuilder类,字符串缓冲区,可以提高字符串操作的效率(看成一个长度可以变化的字符串)
底层是一个数组,但是未被final修饰,可以改变长度。
StringBuilder在内存中始终是一个数组,占用空间少,效率高。
如果超出了StringBuilder的容量,会自动扩容。
StringBuilder的构造方法
1.StringBuilder()
【构造一个不带任何字符的字符串生成器,起初容量为16个字符】
2.StringBuilder(String str)
【构造一个字符串生成器,并初始化为指定字符串】
public class Demo01StringBuilder {
public static void main(String[] args) {
//空参构造函数
StringBuilder s1 = new StringBuilder();
System.out.println("s1:"+s1);//s1:
//带参构造函数
StringBuilder s2 = new StringBuilder("aaa");
System.out.println("s2:"+s2);//s2:aaa
}
}
StringBuilder的常用成员方法
public StringBuilder append(...)
【添加任意类型数据的字符串形式,并返回当前对象本身(this)】
public class Demo02StringBuilder {
public static void main(String[] args) {
StringBuilder s = new StringBuilder();
s.append(1).append(3).append("周");
System.out.println(s);//13周
}
}
public String toString()
【将当前StringBuilder对象转化为String对象】
StringBuilder和String相互转换
String转换为StringBuilder可以使用StringBuilder的构造方法StringBuilder(String str)
StringBuilder转换为String可以使用StringBuilder中的toString方法
public class Demo03StringBuilder {
public static void main(String[] args) {
String s1 = "hello";
System.out.println("s1:"+s1);//s1:hello
//String -> StringBuilder
StringBuilder stb = new StringBuilder(s1);
stb.append(" world");
System.out.println("stb:"+stb);//stb:hello world
//StringBuilder -> String
String s2 = stb.toString();
System.out.println("s2:"+s2);//s2:hello world
}
}