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 | public static boolean equals(Object a, Object 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对象格式化为字符串。
使用步骤:
- 创建SimpleDateFormat对象,构造方法中传入指定格式
- 调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
public Date parse(String source)
:将字符串解析为Date对象。
使用步骤:
- 创建SimpleDateFormat对象,构造方法中传入指定格式
- 调用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 |
装箱与拆箱
装箱:把基本类型数据包装到包装类中
- 构造方法:
Integer(int value) :构造一个新分配的 Integer 对象,它表示指定的 int 值。
Integer(String s) : 构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值
传递的字符串必须是基本类型的字符串
不能把一个“a”变成一个整数,会报错数字格式化异常 - 静态方法
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); // 自动拆箱
基本数据类型和字符串之间的转换
基本类型–>字符串
- 基本类型数据的值+””(最简单)
- 使用包装类中的静态方法toString
static String toString(int i) :返回一个表示指定整数的 String 对象。 - 使用String类中的静态方法
static String valueOf(int i) :返回 int 参数的字符串表示形式。
字符串–>基本类型
- 使用包装类的静态方法parseXX(“字符串”)
Integer类:static int parseInt(String s) // s必须是整数,不能是“a”这种
Double类:static double parseInt(String s)