08-Object类,常用API

Object类

java.lang.Object是java所有子类的父类,所有子类都能使用它中描述的方法

toString方法

  • public String toString():返回该对象的字符串表示。
    其实内容就是内容就是对象的类型+@+内存地址值。

Object的toString方法中返回值为地址值,需要重写toString方法。
Alt+insert:选择tostring方法,直接帮助重写

看一个类是否重写了toString方法,直接打印这个类对应对象的名字即可:
如果没有重写,那么打印的是对象的地址值(默认)
如果重写了,那么就按照重写的方式打印

equals方法

public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

 方法体里面返回(this == obj),基本数据类型比较的是值,而引用数据类型比较的是地址。所以equals方法默认比较的是两个对象的地址值。如果new了两个对象(地址值是不相同的),p1、p2,调用p1.equals(p2)里面就是在比较p1地址值 == p2地址值 。
 比较地址值没有意义,所以我们一般需要重写,比较两个对象的属性值。因为参数是Object类型,我们传入的是Object子类,即使用了多态用法。但是多态写法有个缺点,不能使用子类的特有成员函数和成员变量,所以需要使用向下转型(强转)把Object类型转换成需要比较的类型。转换前使用instanceof来判断传入参数类型与要比较类型是否相同,防止转换异常(传入dog类型,要比较的是Person类,直接返回false即可)
Alt+insert:选择equals() and hashCode()自动代码生成。最好template选择java 7+
Jave7+,IDEA自动重写equals代码中,使用到了java.util.Objects
在这里插入图片描述
Objects类的equal方法:对两个对象进行比较防止空指针异常

1
2
3
public static boolean equals(Object a, Object b) {  
return (a == b) || (a != null && a.equals(b));
}

使用方法:Objects.equals(s1, s2);

常用API

日期时间类

Date类

java.util.Date类 表示日期和时间的类,精确到毫秒。
1秒 = 1000毫秒
E.g 2019-01-03 09:55:22:222

我们可以把日期转换为毫秒进行计算,再转回日期
· 时间原点:1970年1月1日8时0分0秒
· 计算当前日期时间到原点之间共经历多少毫秒{Long类型的值}

tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。

构造方法
Date类的空参构造方法:
Date();获取的是当前系统的Date日期
E.g Sun Aug 08 15:35:37 CST 2018 (CST是中国标准时间)
Date类的带参构造方法:
Date(long date); 传递毫秒值,把毫秒值转换为Date日期

成员方法
public long getTime() 把日期对象转换成毫秒。返回自1970年1月1日00:00:00 GMT)以来表示的毫秒数
String toLocalString(); 根据本地格式切换日期对象

DateFormat类

java.text.DateFormat 是日期/时间格式化子类(父类为Format)的一个【抽象类】,可以使用它的子类为java.text.SimpleDateFormat
作用:格式化(日期–>文本),解析(文本–>日期)

simpleDateFormat的构造方法

public SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数:传递指定的格式。

常用的格式规则为:

标识字母(区分大小写) 含义
y
M
d
H
m
s
常用:
yyyy-MM-dd HH:mm:ss
yyyy年MM月dd日 HH时mm分ss秒

成员方法

  • public String format(Date date):按照指定格式,将Date对象格式化为字符串。
    使用步骤:
  1. 创建SimpleDateFormat对象,构造方法中传入指定格式
  2. 调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
  • public Date parse(String source):将字符串解析为Date对象。
    使用步骤:
  1. 创建SimpleDateFormat对象,构造方法中传入指定格式
  2. 调用SimpleDateFormat对象中的方法parse,把符号构造方法中模式的字符串,解析为Date日期
    注意:

-parse方法声明了一个ParseException解析异常。如果字符串和构造方法中指定格式不符,就会抛出异常。
-调用了一个抛出异常的方法,就必须处理这个异常,要么用throws继续声明抛出这个异常,要么用try…catch自己处理这个异常。(alt+回车)

Calendar类

java.util.Calendar:一个【抽象的】日历类,里面提供了许多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR)
抽象类无法直接创建对象使用,里面有一个静态方法public static Calendar getInstance():使用默认时区和语言环境获得一个日历。该方法返回Calendar类的子类对象。
E.g Calendar c = Calendar.getInstance(); // 多态写法

常用成员方法:

  • 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对象。把日历对象转换为日期对象
    成员方法的参数:
    • int field:日历类的字段,可以使用calendar类的静态成员获取
    • int value:增加/减少的值
      Calendar类中提供很多成员常量,代表给定的日历字段:
      (public static final int 字段值)
      字段值 含义
      YEAR
      MONTH 月(从0开始,可以+1使用)西方月份0~11月
      DAY_OF_MONTH 月中的天(几号)
      HOUR 时(12小时制)
      HOUR_OF_DAY 时(24小时制)
      MINUTE
      SECOND
      DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)

E.g int year = c.get(Calendar.YEAR);
c .set(Calendar.YEAR, 2020);
c.add(YEAR, -3); // 2017
Date date = c.getTime(); // Sun Aug 08 15:35:37 CST 2017

System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:

  • public static long currentTimeMillis():返回以毫秒为单位的当前时间。
    可以用来测试一个程序耗费时间

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。
    参数:
    src:源数组
    srcPos:源数组起始位置
    destPos:目标数组
    length:要复制的数组元素数量

StringBuilder类

字符串是常量,它们的值在创建之后不能更改。
字符串底部是被final修饰的数组,所以不能改变
private final byte[] value;

StringBuilder类(字符串缓存区)支持可变字符串[]
底层是个没有被final修饰的数组,可变长度。初始容量为16,如果超过16,会自动扩容,翻倍。
byte[] value = new byte[16];
E.g.
在这里插入图片描述

java.lang.StringBuilder类:字符串缓存区,提高字符串的效率。
*
构造方法**:

  • public StringBuilder():构造一个空的StringBuilder容器。
  • public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。

常用方法

  • public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身(返回的是this,即调用方法的对象),所以使用无需有返回值
    E.g
    bu1.append(8.8);

链式编程:方法返回值是一个对象,可以根据对象继续调用方法。
E.g
bu1.append(8.8).append(“abc”).append(true);

  • public String toString():将当前StringBuilder对象转换为String对象。
    String–>StringBuilder:有参构造方法;StringBuilder–>String:toString方法。
  • public StringBuilder reverse():逆转,返回此对象的一个引用

包装类

基本数据类型没有对应的方法进行操作,我们用一个类把基本数据类型包装起来。

基本类型 对应的包装类(位于java.lang包中)

基本类型 对应的包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

装箱与拆箱

装箱:把基本类型数据包装到包装类中

  1. 构造方法:
    Integer(int value) :构造一个新分配的 Integer 对象,它表示指定的 int 值。
    Integer(String s) : 构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值
    传递的字符串必须是基本类型的字符串
    不能把一个“a”变成一个整数,会报错数字格式化异常
  2. 静态方法
    static Integer valueOf(int i) : 返回一个表示指定的 int 值的 Integer 实例。
    static Integer valueOf(String s) : 返回保存指定的 String 的值的 Integer 对象。

拆箱:在包装类中取出基本类型数据
使用成员方法
int intValue() :以 int 类型返回该 Integer 的值。

自动装箱与自动拆箱

JDK1.5之后,基本类型数据和包装类间可以自动转换。
Integer in = 1;// 自动装箱
//包装类无法直接参与运算,可以自动转换为基本类型的数据,再参与计算。
in = in +2;

ArrayList集合无法直接存储整数,可以存储Integer包装类
list.add(1); // 自动装箱
Int a = list.get(0); // 自动拆箱

基本数据类型和字符串之间的转换
基本类型–>字符串

  1. 基本类型数据的值+””(最简单)
  2. 使用包装类中的静态方法toString
    static String toString(int i) :返回一个表示指定整数的 String 对象。
  3. 使用String类中的静态方法
    static String valueOf(int i) :返回 int 参数的字符串表示形式。

字符串–>基本类型

  1. 使用包装类的静态方法parseXX(“字符串”)
    Integer类:static int parseInt(String s) // s必须是整数,不能是“a”这种
    Double类:static double parseInt(String s)