Object类
Object类是所有类的父类,所有对象(包括数组)都具有该类中的11个方法
注意:
如果一个类我们没有指定其父类,那么默认继承Object
public class Dog /extends Object/ {
}
**1.2 toString方法**
toString方法:
作用: 返回该对象的字符串表示
默认字符串表示的形式:
包名.类名@地址值
比如:com.itheima.demo01_Object01.Dog@4554617c
在实际开发中,我们通常会重写toString方法,将本类返回的地址值改成返回该对象中的内容
public class Dog /extends Object/ {
int age;
String name;
public Dog() {
}
public Dog(int age, String name) {
this.age = age;
this.name = name;
}
//重写toString
// @Override
// public String toString() {
// //不要返回地址值,返回对象的内容
// return this.age + “…” + this.name;
// }
//绝大多数的开发工具(IDEA,Eclipse,…),都会有自动生成toString方法的功能
//快捷键:alt+insert
@Override重写toString
public String toString() {
return “Dog{” +
“age=” + age +
“, name=’” + name + ‘’’ +
‘}’;
}
}
注意事项:
我们重写了toString之后,当调用对象的toString方法时,返回的不再是地址值,而是具体的属性值
System.out.println(变量名.toString())
等价于
System.out.println(变量名);
**1.3 equals方法**
equals方法:
作用:判断其他某个对象是否与此对象“相等”。
默认比较的是什么???
默认比较的是两个对象的地址值!!!
在实际开发中,我们也会重写equals方法,将本来的比较地址值改成比较内容
public class Cat {
int age;
String name;
public Cat() {
}
public Cat(int age, String name) {
this.age = age;
this.name = name;
}
//重写equals
//使用IDea工具即可,alt+inseret
@Override
public boolean equals(Object o) {
//合法性判断
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cat cat = (Cat) o;
//判断是 必须是 当前对象的age和比较对象的age相同,且当前对象的name和比较对象的name相同,才返回true
return age == cat.age &&
Objects.equals(name, cat.name);
}
}
注意equals方法默认的比较地址值
1.4 扩展(equals和==的区别)【面试题】
对于基本类型:
== 比较基本类型的数值
equals 没有该方法
对于引用类型:
== 比较引用类型的地址值
equals 默认比较地址值,如果子类重写了,按照重写比较规则比较(一般会比较内容)
Objects类,我们称之为工具类(其内部所有的方法都是静态的)
在Objects中有一个方法:
public static boolean equals(Object a, Object b);
用于判断两个对象,是否"相等",并且避免了空指针异常,该方法源码如下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
Date类:
2.1 Date类的介绍
包:java.util.Date(不是java.sql.Date)
作用: 代表某一个时间点,可以精确到毫秒
2.2 Date类的构造方法
public Date(); 创建一个Date对象,代表当前的系统时间
public Date(long millis); 创建一个Date对象,代表距离国际基准时间millis毫秒后的那个时间
国际基准时间:
(英国): 1970.01.01 00:00:00
(中国): 1970.01.01 08:00:00
包:java.util.Date(不是java.sql.Date)
作用: 代表某一个时间点,可以精确到毫秒
public Date(); 当前时间
public Date(long millis);距离基准时间millis毫秒后的那个时间
2.3 Date类的常用方法
public long getTime(); 获取当前Date对象距离基准时间的毫秒值
public void setTime(long time); 修改当前Date对象距离标准时间的毫秒值
public class TestDateDemo {
public static void main(String[] args) {
//3.常用成员方法
Date now = new Date(); //当前的系统时间
long time = now.getTime();
System.out.println(time);//1583462903946
now.setTime(1000L);
System.out.println(now);
}
}
DateFormat类:
DateFormat类的作用
作用: 让时间日期和具体的文本之间来回转换
public SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
格式化: public String format(Date d); Date对象 转成 时间字符串
解析: public Date parse(String time); 时间字符串 转回 Date对象
例如:
new Date() --> “2020年03月06日 18点30分26秒” 格式化
“2020年03月06日 18点30分26秒” --> Date对象 解析
DateFormat类的构造方法
我们不是DateFormat(抽象类),使用的其子类(SimpleDateFormat)
public SimpleDateFormat(String pattern);以指定的格式/模式创建SimpleDateFormat对象
这里的参数pattern表示我们想要的时间字符串的格式/模式
想要这种格式:
“xxxx年xx月xx日 xx:xx:xx”
对应的pattern这么写呢?
“yyyy年MM月dd日 HH:mm:ss”
我们只需要记住:
y – 年
M – 月
d – 日
H – 时
m – 分
s – 秒
DateFormat类的成员方法
public String format(Date date); 格式化方法
public Date parse(String time); 解析方法
public class TestDemo {
public static void main(String[] args) throws ParseException {
//1.创建一个SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);
//2.格式化 format
Date now = new Date();
String nowStr = sdf.format(now);
System.out.println(nowStr);
//3.解析 parse
System.out.println("============");
Date date = sdf.parse(“2030年04月07日 12:26:20”); //异常,使用快捷键 alt+回车,再回车
System.out.println(date);
}
}
Calendar类:
作用:也是表示某个时间点
Calendar的获取对象的方式:
创建其子类GregorianCalendar类的对象(目前不使用)
使用Calendar的静态方法【推荐方式】:
获取:Calendar cc = Calendar.getInstance();//就会创建一个子类对象,返回
注意:在Calendar类中,月份(0-11)代表我们的(1-12)
Calendar类中常见的方法
public int get(int field);//获取日历对象中某个成员变量的值,其中参数代表该成员变量的编号!!
public void add(int field,int value);//增加日历对象中某个成员的值
public void set(int field,int value);//修改日历对象中某个成员的值
例如:
public class TestCalendar {
public static void main(String[] args) {
//1.获取一个Calendar对象
Calendar cc = Calendar.getInstance();
System.out.println(cc);
//2.获取Calendar对象中某个成员的值
print(cc);
//3.修改Calendar对象中某个成员的值
cc.set(Calendar.YEAR,3000);
cc.set(Calendar.MONTH,3);
cc.set(Calendar.DAY_OF_MONTH,3);
print(cc);
//4.增加Calendar对象中某个成员的值
cc.add(Calendar.YEAR,3000);
cc.add(Calendar.MONTH,3);
cc.add(Calendar.DAY_OF_MONTH,3);
print(cc);
}
public static void print(Calendar cc){
int year = cc.get(Calendar.YEAR);
System.out.println(year);
int month = cc.get(Calendar.MONTH);
System.out.println(month);
int day = cc.get(Calendar.DAY_OF_MONTH);
System.out.println(day);
System.out.println("==========");
}
}
注意事项:
a.Calendar类中,month从0到11,我们是从1-12
b.时间日期,也是有大小之分, 时间越靠后我们认为其越大
System类:
System类的方法也是静态,并且不能创建对象(System的构造方法私有化了)
System.exit(0); 退出JVM按照惯例,参数写0即可!!
例如:
public class TestSystem {
public static void main(String[] args) {
//1.试图创建一个System对象
// System s = new System(); //报错! 因为System的构造私有化了
//2.exit
for (int i = 0; i < 10; i++) {
System.out.println(“我爱Java”+i);
//退出JVM,整个Java程序都会结束
System.exit(0);
// break; //结束当前的循环,如果循环后面还有代码可以继续执行
}
System.out.println(".....");
}
}
System.currentTimeMillis(); 获取当前时间的毫秒值