文章内容输出来源:拉勾教育大数据开发高薪训练营
一、Object类
1. 基本概念:
java.lang.Object
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类。
2. 常用方法:
方法 | 功能介绍 |
Object() | 无参构造对象 |
boolean equals(Object obj) |
用于判断调用对象是否与参数对象相等。
该方法默认比较两个对象的地址是否相等,与
==
运算符的结果一致
若希望比较两个对象的内容,则需要重写该方法。
若该方法被重写后,则应该重写
hashCode
方法来保证结果的一致
性。
|
int hashCode()
|
用于获取调用对象的哈希码值
(
内存地址的编号
)
。
若两个对象调用
equals
方法相等,则各自调用该方法的结果必须相
同;
若两个调用对象
equals
方法不相等,则各自调用该方法的结果应该
不相同。
为了使得该方法与
equals
方法保持一致,需要重写该方法。
|
String toString()
|
用于获取调用对象的字符串形式;
该方法默认返回的字符串为:包名
.类名@哈希码值的十六进制;
为了返回更有意义的数据,需要重写该方法;
使用
print
或
println
打印引用或字符串拼接引用都会自动调用该方法;
|
Class<?> getClass()
|
用于返回调用对象执行时的
Class
实例,反射机制使用
|
3. Objects类:
java.util.Objects类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或 null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。如下:
public static boolean equals(Object a, Object b):判断两个对象是否相等;
源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
二、包装类
1. 分类:
基本类型 | 对应的包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2. 装箱与拆箱:
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
• 装箱:基本类型 ---> 对应的包装类对 象;
• 拆箱:包装类对象 ---> 对应的基本类型;
基本数值 ----> 包装对象
Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象 ----> 基本数值
int num = i.intValue();
3. 自动装箱与拆箱:
从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成;
Integer i = 4; //自动装箱。相当于Integer i = Integer.valueOf(4);
i = i + 5; //等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;//加法运算完成后,再次装箱,把基本数值转成对象;
4. 包装类的使用:
方法 |
作用
|
static XXX valueOf(xxx 参数) | 根据参数得到XXX对象 |
xxxValue() | 获取包装类对象中基本数据类型变量数值 |
parseXXX(String s) | 字符串转换为对应的基本类型 (如:int num = Integer.parseInt("100"); |
String toString |
返回描述调用对象数值的字符串形式
|
boolean equals(Object obj)
|
比较调用对象与参数指定的对象是否相等
|
包装类 | 方法 | 作用 |
---|---|---|
Integer |
static String toString(int i)
|
获取参数指定整数的十进制字符串形式
|
static String toBinaryString(int i)
|
获取参数指定整数的二进制字符串形式
| |
static String toHexString(int i)
|
获取参数指定整数的十六进制字符串形式
| |
static String toOctalString(int i)
|
获取参数指定整数的八进制字符串形式
| |
Double |
boolean isNaN()
|
判断调用对象的数值是否为非数字
|
Character |
static boolean isUpperCase(char ch)
| 判断参数指定字符是否为大写字符 |
static boolean isLowerCase(char ch)
| 判断参数指定字符是否为小写字符 | |
static boolean isDigit(char ch)
| 判断参数指定字符是否为数字字符 | |
static char toUpperCase(char ch)
| 将参数指定的字符转换为大写字符 | |
static char toLowerCase(char ch)
| 将参数指定的字符转换为小写字符 |
三、常用数学类
1. Math类:
方法声明
| 功能介绍 |
static int max(int a, int b)
| 返回两个参数中的最大值 |
static int min(int a, int b)
| 返回两个参数中的最小值 |
static double pow(double a, double b)
| 返回第一个参数的幂 |
static int abs(int a)
| 返回参数指定数值的绝对值 |
static long round(double a)
| 返回参数四舍五入的结果 |
static double sqrt(double a)
| 返回参数的平方根 |
static double random()
| 返回0.0到1.0的随机数 |
2. BigDecimal类:
由于float类型和double类型在运算时可能会有误差,若希望实现精确运算则借助 java.math.BigDecimal类型加以描述。
BigDecimal(String val) 根据参数指定的字符串来构造对象;此外,还有加减乘除运算;
3. BigInteger类:
表示比long类型范围还大的数据;
BigInteger(String val) 根据参数指定的字符串来构造对象;此外,还有加减乘除运算;特别的,还有取余运算,取商和余数的运算:BigInteger remainder(BigInteger val) 用于实现取余运算;BigInteger[] divideAndRemainder(BigInteger val) 用于实现取商和余数的运算
四、日期时间类
1. Date类:
java.util.Date类 表示特定的瞬间(年月日时分秒),精确到毫秒;
▷ 构造方法:
• public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒);
• public Date(long date): 表示自从标准基准时间,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
注意:由于我们属于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
具体事例如下:
import java.util.Date; public class Demo01Date { public static void main(String[] args) { // 创建日期对象,把当前的时间 System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018 // 创建日期对象,把当前的毫秒值转成日期对象 System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970 } }
当我们使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。
▷ 常用方法:
• public long getTime():获取调用对象距离1970年1月1日0时0分0秒的毫秒数;
• public void setTime(long time):设置调用对象为距离基准时间time毫秒的时间点
2. SimpleDateFormat类:
java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换;
方法声明 | 功能介绍 |
---|---|
SimpleDateFormat()
|
使用无参方式构造对象
|
SimpleDateFormat(String pattern)
|
根据参数指定的模式来构造对象,模式主要有
: y-
年
M-
月
d-
日
H-
时
m-
分
s-
秒
|
final String format(Date date)
|
用于将日期类型转换为文本类型
|
Date parse(String source)
|
用于将文本类型转换为日期类型
|
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
把Date对象转换成String,将String转换为Date对象
*/
public class Demo03DateFormatMethod {
public static void main(String[] args) {
Date date = new Date();
// 创建日期格式化对象,在获取格式化对象时可以指定风格,可以使用多态
// DateFormat 是SimpleDateFormat 的抽象父类
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
String str = df.format(date); // 把Date对象转换成String
Date date = df.parse(str); // 将String转换为Date对象
System.out.println(str); // 2020年8月23日
}
}
3. Calendar类:
java.util.Calendar是日历类,主要用于描述特定的瞬间,取代Date类中的过时方法实现全球化。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
方法声明 | 功能介绍 |
---|---|
static Calendar getInstance()
|
用于获取
Calendar
类型的引用
|
void set(int year, int month, int date, int hourOfDay, int minute, int second)
|
用于设置年月日时分秒信息
|
Date getTime()
|
用于将
Calendar
类型转换为Date类型
|
void set(int fifield, int value)
|
设置指定字段的数值
|
void add(int fifield, int amount)
|
向指定字段增加数值
|
Calendar类中提供很多成员常量,代表给定的日历字段:
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
具体使用:
import java.util.Calendar;
public class CalendarUtil {
public static void main(String[] args) {
// 创建Calendar对象
Calendar cal = Calendar.getInstance();
// 获取年
int year = cal.get(Calendar.YEAR);
// 获取月
int month = cal.get(Calendar.MONTH) + 1;
// 获取日
int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
// 设置年
cal.set(Calendar.YEAR, 2020);
// 使用add方法
cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
cal.add(Calendar.YEAR, -3); // 减3年
// 拿到对应的Date对象。
Date date = cal.getTime();
}
}
4. System类:
java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作;
常用方法:
• public static long currentTimeMillis():获取当前系统时间与1970年01月01日00:00点之间的毫秒差值;
• public static void arraycopy(Object src, int srcPos, Object dest, int descPos, int length):将数组中指定的数据拷贝到另一个数组中。 数组的拷贝动作是系统级的,性能很高 。具体参数含义:
参数序号 参数名称 参数类型 参数含义 1 src Object 源数组 2 srcPos int 源数组索引起始位置 3 dest Object 目标数组 4 destPos int 目标数组索引起始位置 5 length int 复制元素个数
5. java8中的日期相关类:
上述说到Calendar类取代了Date类中的很多方法,但是Calendar类并不比Date类好多少,它们面临的问题是:
a. Date类中的年份是从1900开始的,而月份都从0开始。
b. 格式化只对Date类有用,对Calendar类则不能使用。
c. 非线程安全等。
Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理。
5.1 LocalDate类:
java.time.LocalDate类主要用于描述年-月-日格式的日期信息,该类不表示时间和时区信息;
方法:static LocalDate now():在默认时区中从系统时钟获取当前日期
5.2 LocalTime类:
java.time.LocalTime 类主要用于描述时间信息,可以描述时分秒以及纳秒。
方法:static LocalTime now():从默认时区的系统时间中获取当前时间
static LocalTime now(ZoneId zone):获取指定时区的当前时间
5.3 LocalDateTime类:
java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间,如2007-12-03T10:15:30
方法:static LocalDateTime now():从默认时区的系统时间中获取当前日期时间;
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second):根据参数指定的年月日时分秒信息来设置日期时间;
int getYear():获取年份字段的数值(获取小时,分钟,描述同理);
int getMonthValue():获取1到12之间的月份字段;
int getDayOfMonth():获取日期字段;
LocalDateTime withXxx(int xxx):设置为参数指定的年,月,日,时,分,秒;
LocalDateTime plusXxxs(long xxx):加上参数指定的年,月,日,时,分,秒;
LocalDateTime minusXxxs(long xxx):减去参数指定的年,月,日,时,分,秒;
5.4 Instance类:
java.time.Instant类主要用于描述瞬间的时间点信息。
方法:static Instant now() :从系统时钟上获取当前时间 ;
OffsetDateTime atOffset(ZoneOffset offset):将此瞬间与偏移量组合以创建偏移日期时间 ;
static Instant ofEpochMilli(long epochMilli):根据参数指定的毫秒数来构造对象,参数为距离1970年1月1日0时0分 0秒的毫秒数 ;
long toEpochMilli() :获取距离1970年1月1日0时0分0秒的毫秒数 ;
5.5 DateTimeFormatter类:
java.time.format.DateTimeFormatter类主要用于格式化和解析日期。
方法:static DateTimeFormatter ofPattern(String pattern):根据参数指定的模式来获取对象;
String format(TemporalAccessor temporal) :将参数指定日期时间转换为字符串 ;
TemporalAccessor parse(CharSequence text):将参数指定字符串转换为日期时间;