一、Object类
1. 概述
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类,那么默认则继承自Object类。
public String toString()
:返回该对象的字符串表示。public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。在IntelliJ IDEA中,可以点击Code
菜单中的Generate...
,也可以使用快捷键alt+insert
,点击toString()
选项。选择需要包含的成员变量并确定。
2. equals方法
01.Object类的equals方法源码
public boolean equals(Object obj) {
return (this == obj);
}
解析:
this,obj是谁? 方法中p1调用,那么this就是p1,也就是说this==obj --> p1 ==p2。
基本数据类型:比较的是值。
引用数据类型:比较的是两个对象的地址值。
02.String类重写equals方法源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
使用向下转型,把anObject转换为String类型。
3.Object类
String s1 = null;
String s2 = "abc";
s1.equals(s2)
上面代码产生空指针异常,针对空指针异常产生了objects类。
Objects类的equals方法:对两个对象进行比较,防止空指针异常。
public static Boolean equals (Object a,Object b){
return (a==b) || (a!=null &&a.equals(b));
}
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。
二、Date类
java.util.Date:表示日期和时间的类
Date获取当前系统的日期和时间
long getTime()把日期转换为毫秒值(相当于System.currentTimeMillis()方法)
返回自1970年1月1日 00:00:00 GMT以来此Date对象表示的毫秒数。
DateFormat类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
java.text.DateFormat:是日期/时间格式化子类的抽象类
作用;
格式化(日期-->文本)、解析(文本-->日期)
成员方法
String format(Date date) 格式化
Date parse(String source) 解析
*/
public class FormatTest {
public static void main(String[] args) throws ParseException {
//demo1();
demo2();
}
private static void demo2() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date = sdf.parse("2019年08月08日 15时51分54秒");
System.out.println(date);
}
private static void demo1() {
//使用DateFormat类中的方法format,把日期转换为文本
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date = new Date();
String d = sdf.format(date);
System.out.println(date);
System.out.println(d);
}
}
三、Calendar类
/*
java.util.Calendar类:日历类
Calendar类是一个抽象类,里面提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)
Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象。
static Calendar getInstance()使用默认时区和语言环境获得一个日历
*/
/*
public int get(in field):返回给定日历字段的值。
参数:传递的日历字段(YEAR,MONTH..)
返回值:日历字段代表的具体值
*/
import java.util.Calendar;
public class test1 {
public static void main(String[] args) {
//demo1();
demo2();
}
private static void demo2() {
Calendar c = Calendar.getInstance();//多态
c.add(Calendar.YEAR, 2);
c.add(Calendar.MONTH, -3);
int year = c.get(Calendar.YEAR);
System.out.println(year);
//System.out.println();
int month = c.get(Calendar.MONTH);
System.out.println(month);//西方的月是0到11。东方:1-12
}
private static void demo1() {
Calendar c = Calendar.getInstance();//多态
int year = c.get(Calendar.YEAR);
System.out.println(year);
//System.out.println();
int month = c.get(Calendar.MONTH);
System.out.println(month);//西方的月是0到11。东方:1-12
}
}
四、System类
java不支持全局函数和变量,Java将一些与系统相关的重要函数和变量放到了System类中。System类提供了外部定义的属性和环境变量的访问,加载文件和库的方法,还有快速复制数组的一部分的实用方法。
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间。public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
:将数组中指定的数据拷贝到另一个数组中。String类的常用属性如下。
01.arraycopy()方法
import java.util.Arrays;
public class test1 {
public static void main(String[] args) {
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));
}
}
02. currentTimeMillis方法
实际上,currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值。
import java.util.Date;
public class SystemDemo {
public static void main(String[] args) {
//获取当前时间毫秒值
System.out.println(System.currentTimeMillis()); // 1516090531144
}
}
五、StringBuilder类
JDK8中String类底层是char数组,而JDK9底层是byte数组。String它是一个不可变字符串,可通过+拼接字符串。
StringBuilder常用的方法2个:
练习
import java.util.Arrays;
public class test1 {
public static void main(String[] args) {
int a [] = {1,2,3,4};
double b [] = {2.1,3,2,4,3};
for(int i =0;i