Object类
Object类
Object类的概述:
java.lang.Object类是java语言中的根类,及所有的父类,在对象的实例化的时候,最终找到的父类是Object类.
如果一个类没有☞名父类,那么默认的就是Object类.
1 public class MyClass extends Object{ 2 //代码块 3 }
根据JDK源代码及Object类的API文档,Object类有11个方法.
- public String toString():返回该对象的字符串表示。
- public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
toString方法:
方法摘要:
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,
经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
覆盖重写:
代码演示:
1 public class Person {
2 private String name;
3 private int age;
4
5 @Override
6 public String toString() {
7 return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
8 }
9
10 // 省略构造器与Getter Setter
11 }
equals方法:
方法摘要:
默认地址比较:
如果没有覆盖重写equals方法,那么Object类默认进行==运算符的对象地址值比较,
只要不是同一个对象,结果必然为false。
对象内容比较:
如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,
则可以覆盖重写equals方法。
对象内容比较演示代码:
1 import java.util.Objects;
2
3 public class Person {
4 private String name;
5 private int age;
6
7 @Override
8 public boolean equals(Object o) {
9 // 如果对象地址一样,则认为相同
10 if (this == o)
11 return true;
12 // 如果参数为空,或者类型信息不一样,则认为不同
13 if (o == null || getClass() != o.getClass())
14 return false;
15 // 转换为当前类型
16 Person person = (Person) o;
17 // 要求基本类型相等,并且将引用类型交给java.util.Objects类的equals静态方法取用结果
18 return age == person.age && Objects.equals(name, person.name);
19 }
20 }
Objects类:
概述:
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,
这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),
用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,
而Objects类中的equals方法就优化了这个问题。方法如下:
- public static boolean equals(Object a, Object b):判断两个对象是否相等
代码演示:
1 public static boolean equals(Object a, Object b) { 2 return (a == b) || (a != null && a.equals(b)); 3 }
Date类:
概述:
- public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
- public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间
(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如:
代码演示:
1 package com.heima.Date;
2
3 import java.util.Date;
4
5 //Date
6 public class Dmo01 {
7 public static void main(String[] args) {
8 //创建日期的对象
9 System.out.println(new Date());
10 //创建日期对象,把当前的毫秒值转换成对象。
11 System.out.println(new Date(0L));
12 }
13 }
14 /*
15 Mon Apr 01 16:46:03 CST 2019
16 Thu Jan 01 08:00:00 CST 1970
17 */
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
DateFormat类:
格式化:按照指定的格式,从Date对象转换为String对象
解析:按照指定的格式,从String对象转换为Date对象。
构造方法:
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。
这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
- public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造
SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式。
格式规则:
代码演示:
DateFormat类的常用方法有:
-
-
public Date parse(String source)
:将字符串解析为Date对象。
创建SimpleDateFormat对象的代码如:
1 package com.heima.Date; 2 //format方法 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 public class Demo02 { 8 public static void main(String[] args) { 9 //创建日期对象 10 Date date = new Date(); 11 //在创建日期格式化对象,在获取格式化对象时间可以指定风格 12 DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 13 String str=simpleDateFormat.format(date); 14 System.out.println(str); 15 } 16 }
parse方法使用:
1 public class Demo02 {
2 public static void main(String[] args) throws ParseException {
3 //在创建日期格式化对象,在获取格式化对象时间可以指定风格
4 DateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
5 //public Date parse(String source)
:将字符串解析为Date对象。
6 String str="2019-04-01 16:56:52";
7 Date date=simpleDateFormat.parse(str);//抛出异常
8 System.out.println(date);//Mon Apr 01 16:56:52 CST 2019
9 }
10 }
练习:
题目:书写一个人出生了多少天.
思路分析:
1.获取当前日期和毫秒
2.获取自己出生的日期和毫秒
3.两个时间相减
4.获取相减后的时间
代码演示:
1 package com.heima.Date; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 import java.util.Scanner; 6 7 public class Demo03 { 8 public static void main(String[] args) throws Exception{ 9 //设置日期格式 10 System.out.println("请输入出生日期 格式 YYYY-mm-dd:"); 11 //获取出生日期 12 Scanner scanner = new Scanner(System.in); 13 String s = scanner.nextLine(); 14 //创建SimpleDateFormat对象,写日期模式 15 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-mm-dd"); 16 //将字符串转换成日期对象调用parse方法 17 Date b=simpleDateFormat.parse(s); 18 //获取今天的日期对象 19 Date c = new Date(); 20 //将日期转换成毫秒 21 long time = b.getTime(); 22 long time1 = c.getTime(); 23 long a= time1-time; 24 if(a<=0){ 25 System.out.println("你还没有出生啊."); 26 }else { 27 System.out.println(a/1000/60/60/24); 28 } 29 30 } 31 }
Calendar类:
概念:
JAVA.util.Calendar是日历类,在Date后出现,替换掉许多Date的方法,该类将所有可能用到的时间信息封装成,
成员方法,方便获取.
获取方式:
Calendar静态方法
Calendar为抽象方式.Calendar类在创建对象时候并非直接创建,而是通过静态方法创建返回子类如下.
- public static Calendar getInstance():使用默认时区和语言环境获得一个日历
代码演示:
1 import java.util.Calendar;
2
3 public class Dome01 {
4 public static void main(String[] args) {
//创建Calendar静态方法
5 Calendar cal = Calendar.getInstance();
6 }
7 }
常用方法:
根据Calendar类的API文档,常用方法有:
- public int get(int field):返回给定日历字段的值。
- public void set(int field, int value):将给定的日历字段设置为给定值。
- public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
- public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
Calendar类中提供很多成员常量,代表给定的日历字段:
Calendar类提供的成员常量:
get/set方法
get方法用来获取指定字段的值,set方法用来设置指定的值:
1 package com.heima.Date; 2 import java.util.Calendar; 3 public class Demo04 { 4 public static void main(String[] args) { 5 //创建Calendar对象 6 Calendar instance = Calendar.getInstance(); 7 //设置所需要获取的年 8 instance.set(Calendar.YEAR,2020); 9 //获取年 10 int year=instance.get(Calendar.YEAR); 11 //设置月 12 int monday= instance.get(Calendar.MONDAY)+1; 13 //设置日 14 int dayOfMoth=instance.get(Calendar.DAY_OF_MONTH); 15 System.out.print( + year+"年" + monday + "月" + dayOfMoth + "日"); 16 } 17 }
getTime方法:
getTime方法获取的并不是毫秒值.而是拿到Date对象.
System类:
java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
- public static long currentTimeMillis():返回以毫秒为单位的当前时间。
- public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。
StringBuilder类:
拼接类:
构造方法:
- public StringBuilder():构造一个空的StringBuilder容器。
- public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。
包装类:
装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
-
装箱:从基本类型转换为对应的包装类对象。
-
拆箱:从包装类对象转换为对应的基本类型。
用Integer与 int为例:(看懂代码即可)
基本数值---->包装对象