Object类
- 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类
- Object类的方法是一切子类都可以直接调用的,所以我们要学习Object类的方法
Object类的常用方法
方法名 | 说明 |
---|---|
① public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址 |
②public Boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
①Object的toString方法:
问题引出
- 开发中直接输出对象,默认输出对象的地址其实是毫无意义的。
- 开发中输出对象变量,更多的时候是希望看到对象的内容数据而不是对象的地址信息。
toString存在的意义
- 父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
Object的equals方法:
问题思考
- 直接比较两个对象的地址是否相同完全可以用“==”替代equals。
equals存在的意义
- 父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。
Objects类
- Objects类与Object还是继承关系,Objects类是从JDK 1.7开始之后才有的
官方在进行字符串比较时,没有对象自己的equals方法,而是选择了Objects的equals方法来比较两个对象。
Objects的equals方法比较的结果是一样的,但是更安全。
Objects的常见方法:
方法名 | 说明 |
---|---|
①public static boolean equals(Object a, Object b) | 比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较 |
②public static boolean isNull(Object obj) | 判断变量是否为null,为null返回true,反之为false |
源码
①
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
其中的a.equals(b) ,其实还是Object中的equals方法,源码如下
public boolean equals(Object obj) {
return (this == obj);
}
②
public static boolean isNull(Object obj) {
return obj == null;
}
StringBuilder类
StringBuilder概述
- StringBuilder是一个可变的字符串类,我们可以把它看成是一个对象容器
作用:提高字符串的操作效率,如拼接、修改等。
StringBuilder 构造器
名称 | 说明 |
---|---|
public StringBuilder() | 创建一个空白的可变的字符串对象,不包含任何内容 |
public StringBuilder(String str) | 创建一个指定字符串内容的可变字符串对象 |
StringBuilder常用方法
方法名称 | 说明 |
---|---|
public StringBuilder append(任意类型) | 添加数据并返回StringBuilder对象本身 |
public StringBuilder reverse() | 将对象的内容反转 |
public int length() | 返回对象内容长度 |
public String toString() | 通过toString()就可以实现把StringBuilder转换为String |
public StringBuilder delete(int start, int end) | 删除指定范围的字符,左闭右开 |
public StringBuilder deleteCharAt(int index) | 删除指定位置的字符 |
为什么拼接、反转字符串建议使用StringBuilder?
- String:内容是不可变的、拼接字符串性能差
- StringBuilder:内容是可变的、拼接字符串性能好、代码优雅。
使用场景
- 定义字符串使用String
- 拼接、修改等操作字符串使用StringBuilder
Math类
- 包含执行基本数字运算的方法,Math类没有提供公开的构造器。
- 如何使用类中的成员呢?看类的成员是否都是静态的,如果是,通过类名就可以直接调用
Math类的常用方法
方法名称 | 说明 |
---|---|
public static int abs(int a) | 获取参数绝对值 |
public static double ceil(double a) | 向上取整 |
public static double floor(double a) | 向下取整 |
public static int round(float a) | 四舍五入 |
public static int max(int a,int b) | 获取两个int值中的较大值 |
public static int min(int a,int b) | 获取两个int值中的较小值 |
public static double pow(double a,double b) | 返回a的b次幂的值 |
public static double random() | 返回值为double的随机值,范围[0.0,1.0) |
System类
System 类概述
- System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化。
System 类的常用方法
方法名称 | 说明 |
---|---|
①public static void exit(int status) | 终止当前运行的Java 虚拟机,非零表示异常终止 |
②public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
③public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝 |
方法介绍
①
该方法不要轻易使用,用的话就要等着收拾东西走人了
②
(补充知识)
时间毫秒值
- 计算机认为时间是有起点的,起始时间: 1970年1月1日 00:00:00。
- 时间毫秒值:指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的。1s= 1000ms。
原因:
- 1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。
随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。
1970年1月1日 算C语言的生日
③public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)
代码展示
int[] arr={10,20,30,40,50};
int[] arr1=new int[5];
System.arraycopy(arr,0,arr1,0,3);
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i]+"\t");
} //10 20 30 0 0
一定要注意拷贝个数<=目的地数组的剩余空间长度
BigDecimal类
作用: 用于精度运算,解决浮点型运算精度失真问题。
使用步骤。
- 创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)
方法名称 | 说明 |
---|---|
public static BigDecimal value0f(double val) | 包装浮点数成为BigDecimal对象 |
BigDecimal常用API
方法名称 | 说明 |
---|---|
public BigDecimal add(BigDecimal b) | 加法 |
public BigDecimal subtract(BigDecimal b) | 减法 |
public BigDecimal multiply(BigDecimal b) | 乘法 |
public BigDecimal divide(BigDecimal b) | 除法 |
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) | 除法 |
BigDecimal a=BigDecimal.valueOf(10.0);
BigDecimal b=BigDecimal.valueOf(3.0);
System.out.println(a.add(b)); //13.0
System.out.println(a.subtract(b)); //7.0
System.out.println(a.multiply(b)); //30.0
// 注意事项: BigDecimal是一定要精度运算的,除不尽会出现问题
//System.out.println(a.divide(b));
//我们便要对其进行除法操作
//参数一:除数 参数二:保小数位数 参数三:舍入模式
System.out.println(a.divide(b,1, RoundingMode.CEILING)); //3.4
进行以上操作时一定要是两个BigDecimal对象。
但是a和b都不是double类型,我们要获得double类型,就要用到以下方法
方法名称 | 说明 |
---|---|
public double doubleValue() | 把BigDecimal类型数据转成double类型的数据 |
使用代码如下
BigDecimal a=BigDecimal.valueOf(10.0);
double rs = a.doubleValue();
Date类
Date 类概述
- Date类的对象在Java中代表的是当前所在系统的此刻日期时间。
Date的构造器
构造器 | 说明 |
---|---|
public Date() | 创建一个Date对象,代表的是系统当前此刻日期时间。 |
public Date(long date) | 把时间毫秒值转换成Date日期对象。 |
Date的常用方法
方法名称 | 说明 |
---|---|
public long getTime() | 获取时间对象的毫秒值 |
public void setTime(long time) | 设置日期对象的时间为当前时间毫秒值对应的时间 |
Date 类记录时间的2种形式
形式1:日期对象
// 1、创建一个日期对象代表了: 当前系统的此刻日期时间对象
Date d=new Date();
System.out.println(d); //得到格式:Sat Dec 17 11:47:27 CST 2022
形式2:时间毫秒值
- 指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的
// 2、获取当前时间毫秒值
Date d=new Date();
long b=d.getTime();
System.out.println(b); //格式:1671248847284
SimpleDateFormat类
- 可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式。
- 也可以把字符串的时间形式解析成日期对象。
SimpleDateFormat的构造器
构造器 | 说明 |
---|---|
public SimpleDateFormat() | 构造一个SimpleDateFormat,使用默认格式 |
public SimpleDateFormat(String pattern) | 构造一个SimpleDateFormat,使用指定的格式 |
SimpleDateFormat的格式化方法
格式化方法 | 说明 |
---|---|
public final String format(Date date) | 将日期格式化成日期/时间字符串 |
public final String format(Object time) | 将时间毫秒值式化成日期/时间字符串 |
格式化的时间形式的常用的模式对应关系如下:
- y 年
- M 月
- d 日
- H 时
- m 分
- s 秒
- EEE 周几
- a 上午或下午
- …
默认格式
2020-11-11 13:27:06————————yyyy-MM-dd HH:mm:ss
我们可以定义的格式
2020年11月11日 13:27:06————————yyyy年MM月dd日 HH:mm:ss
代码展示
SimpleDateFormat slf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date d=new Date();
System.out.println(d); //Sat Dec 17 12:16:42 CST 2022
long l=System.currentTimeMillis();
System.out.println(l); //1671250602975
System.out.println(slf.format(l)); //2022年12月17日 12时12分42秒
System.out.println(slf.format(d)); //2022年12月17日 12时12分42秒
SimpleDateFormat解析字符串时间成为日期对象
解析方法 | 说明 |
---|---|
public Date parse(String source) | 从给定字符串的开始解析文本以生成日期 |
代码展示
SimpleDateFormat slf=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date d= slf.parse("2022年12月17日 12时12分42秒");
System.out.println(d);
注意: public Date parse(String source) 该方法中字符串参数的形式要与我们格式化的时间形式一致,否则会出现异常)
Calendar类
概述
- Calendar代表了系统此刻日期对应的日历对象。
- Calendar是一个抽象类,不能直接创建对象。
Calendar日历类创建日历对象的方法:
方法名 | 说明 |
---|---|
public static Calendar getInstance() | 获取当前日历对象 |
代码如下
Calendar c=Calendar.getInstance();
Calendar常用方法
方法名称 | 说明 |
---|---|
public void set(int field,int value) | 修改日历的某个字段信息 |
public int get(int field) | 取日期中的某个字段信息 |
public void add(int field,int amount) | 为某个字段增加/减少指定的值 |
public final Date getTime() | 拿到此刻日期对象 |
public long getTimeInMillis() | 拿到此刻时间毫秒值 |
注意: calendar是可变日期对象,-旦修改后其对象本身表示的时间将产生变化。
这些方法的详情使用请看 柠檬不甜会酸 博主的这篇博客
链接: Java学习笔记——Calendar类