Object
- Object是所有类的始祖类,所有没有使用extends关键字的类,都自动继承Object
- Java中只有基本数据类型不是对象。其他类都继承了Object,属于对象
1.equals方法
- 用于判断调用对象和参数对象是否相等,默认比较引用地址是否相等
- 如果希望比较两个对象的内容是否相等,则需要重写该方法
- 如果equals方法被重写了,则需要重写hashCode方法来保证结果一致性
- 重写equals方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Student)) return false;
return getId() == ((Student) o).getId();
}
2.hashCode方法
- 用于获取调用对象的哈希码值
- 如果调用对象的equals相等哈希码值也需要相等
- 重写hashCode方法:
@Override
public int hashCode() {
return Objects.hash(getId());
}
3.toString方法
- 用于获取对象的字符串形式
- 默认返回字符串为:包名.类名@哈希码值
- 使用print打印或字符串拼接会自动调用该方法
- 重写toString方法:
@Override
public String toString() {
return "Student{" + "id=" + id + ", name='" + name + '\'' + '}';
}
包装类
1.包装类的分类
包装类 |
对于基本类型 |
java.lang.Byte |
byte |
java.lang.Short |
short |
java.lang.Integer |
int |
java.lang.Long |
long |
java.lang.Flout |
float |
java.lang.Double |
double |
java.lang.Boolean |
boolean |
java.lang.Character |
char |
- Number类是个抽象类,是Double以上的父类来描述所有类共有的成员
- 从Java5开始增加了自动拆箱和自动装箱的功能。如装箱:
Integer i1 = 128;
如拆箱:int i2 = i1;
2.Integer
主要用于实现对int类型的包装并提供int类型到String类之间的转换等方法
常用常量:Integer.MAX_VALUE
、Integer.MIN_VALUE
、Integer.SIZE
、Integer.BYTES
、Integer.TYPE
在Integer类的内部提供了自动装箱池技术,将-128到127之间的整数已经装箱完毕,当程序中使用 该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率。
方法声明 |
功能介绍 |
int intValue() |
获取调用对象中的整数值并返回 |
static Integer valueOf(int i) |
根据参数指定整数值得到Integer对象 |
boolean equals(Object obj) |
比较调用对象与参数指定的对象是否相等 |
String toString() |
返回描述调用对象数值的字符串形式 |
static int parseInt(String s) |
将字符串类型转换为int类型并返回 |
static String toString(int i) |
获取参数指定整数的十进制字符串形式 |
static String toBinaryString(int i) |
获取参数指定整数的二进制字符串形式 |
static String toHexString(int i) |
获取参数指定整数的十六进制字符串形式 |
static String toOctalString(int i) |
获取参数指定整数的八进制字符串形式 |
3.Double
- 主要用于实现对double 类型的包装并提供double类型到String类之间的转换等方法
- 常用常量:
Double.SIZE
、Double.BYTES
、Double.TYPE
方法声明 |
功能介绍 |
double doubleValue() |
获取调用对象中的浮点数据并返回 |
static Double valueOf(double d) |
根据参数指定浮点数据得到Double类型对象 |
boolean equals(Object obj) |
比较调用对象与参数指定的对象是否相等 |
String toString() |
返回描述调用对象数值的字符串形式 |
static double parseDouble(String s) |
将字符串类型转换为double类型并返回 |
boolean isNaN() |
判断调用对象的数值是否为非数字 |
4.Boolean
- 主要用于实现对 boolean类型的包装并提供boolean类型到String类之间的转换等方法
- 常用常量:
Boolean.TRUE
、Boolean.FALSE
、Boolean.TYPE
方法声明 |
功能介绍 |
boolean booleanValue() |
获取调用对象中的布尔数值并返回 |
static Boolean valueOf(boolean b) |
根据参数指定布尔数值得到Boolean类型对象 |
boolean equals(Object obj) |
比较调用对象与参数指定的对象是否相等 |
String toString() |
返回描述调用对象数值的字符串形式 |
static boolean parseBoolean(String s) |
将字符串类型转换为boolean类型并返回 |
5.Character
- 主要用于实现对char类型的包装并提供字符类别的判断和转换等方法
- 常用常量:
Character.SIZE
、Character.BYTES
、Character.TYPE
方法声明 |
功能介绍 |
char charValue() |
获取调用对象中的字符数据并返回 |
static Character valueOf(char c) |
根据参数指定字符数据得到Character类型对象 |
boolean equals(Object obj) |
比较调用对象与参数指定的对象是否相等 |
String toString() |
返回描述调用对象数值的字符串形式 |
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) |
将参数指定的字符转换为小写字符 |
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的随机数 |
大数
- 如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的BigInteger,BigDecimal类。两个类可以处理包含任意长度数字序列的数值
1.使用
- BigInteger常量:
BigInteger.ZERO
、BigInteger.ONE
和BigInteger.TEN
,Java9之后还添加了BigInteger.TWO
BigInteger i1 = BigInteger.valueOf(1000);
BigInteger i2 = new BigInteger("1000");
2.常用方法
方法声明 |
功能介绍 |
BigInteger add(BigInteger other) |
和 |
BigInteger subtract(BigInteger other) |
差 |
BigInteger multiply(BigInteger other) |
积 |
BigInteger divide(BigInteger other) |
商 |
BigInteger mod(BigInteger other) |
余数 |
BigInteger sqrt() |
java9:当前BigInteger的平方根 |
int compareTo(BigInteger other) |
相等返回0,小于other返回负数,否则正数 |
static BigInteger valueOf(long x) |
返回值等于x的大整数 |
方法声明 |
功能介绍 |
BigDecimal add(BigDecimal other) |
和 |
BigDecimal subtract(BigDecimal other) |
差 |
BigDecimal multiply(BigDecimal other) |
积 |
BigDecimal divide(BigDecimal other) |
商 |
BigDecimal divide(BigDecimal other, RoundingMode mode) |
当商是个无限循环的小数,需要用到RoundingMode.HALF_UP来制定规则 |
int compareTo(BigDecimal other) |
相等返回0,小于other返回负数,否则正数 |
static BigDecimal valueOf(long x) |
返回值等于x的大整数 |
static BigDecimal valueOf(long x, int scale) |
返回值等于x/10^scale的一个大实数 |
String
- java.lang.String类用于描述字符串,所有的字符串字面值都可以使用该类的对象加以描述
- 该类由final关键字修饰,不能被继承。由于常量不可修改,因此可以被共享使用
- Java9开始String类的底层不再用char[]来存储数据,而是改成了byte[]加上编码编辑,节约空间
1.常量池
- 由于String类型描述的字符串内容是常量不可改变,因此Java虚拟机将首次出现的字符串放入常量池中,若后续代码中出现了相同字符串内容则直接使用池中已有的字符串对象而无需申请内存及创建对 象,从而提高了性能。
- 常量池在方法区(Java运行时数据区)中
new String("abcd")
生成了2个对象,new出来的在堆区,”abcd”则在常量池里- 常量有优化机制,变量则没有。如:
"ab"+"cd"``"abcd"
为true,而String s1 = "ab"
,s1+"cd"``"abcd"
为false,因为s1是变量所以没有优化
2.API
方法声明 |
功能介绍 |
String() |
使用无参方式构造对象得到空字符序列 |
String(byte[] bytes, int offset, int length) |
使用bytes数组中下标从offset位置开始的length个字节来构造对象 |
String(byte[] bytes) |
使用bytes数组中的所有内容构造对象 |
String(char[] value, int offset, int count) |
使用value数组中下标从offset位置开始的count个字符来构造对象 |
String(int[] codePoints, int offset, int count) |
用数组中从offset开始的count个码点构造一个字符串 |
String(char[] value) |
使用value数组中的所有内容构造对象 |
String(String original) |
根据参数指定的字符串内容来构造对象,新创建对象为参数对象的副本 |
方法声明 |
功能介绍 |
String toString() |
返回字符串本身 |
byte[] getBytes() |
将当前字符串内容转换为byte数组并返回 |
char[] toCharArray() |
用于将当前字符串内容转换为char数组并返回 |
char charAt(int index) |
返回给定位置的字符 |
int length() |
返回字符串字符的个数 |
boolean isEmpty() |
判断字符串是否为空 |
boolean isBlank() |
java11:如果字符串为空或者由空格组成返回true |
int compareTo(String other) |
用于比较调用对象和参数对象的大小关系 |
int compareToIgnoreCase(String str) |
不考虑大小写,也就是’a’和’A’是相等的关系 |
String concat(String str) |
用于实现字符串的拼接 |
boolean contains(CharSequence s) |
用于判断当前字符串是否包含参数指定的内容 |
String toLowerCase() |
返回字符串的小写形式 |
String toUpperCase() |
返回字符串的大写形式 |
String trim() |
返回去掉前导和后继空白的字符串 |
String strip() |
java11:返回新字符串,删除小于U+0020的字符(trim)或空格(strip) |
boolean startsWith(String prefix) |
以prefix开头返回true |
boolean startsWith(String prefix, int toffset) |
以指定位置判断是prefix开头返回true |
boolean endsWith(String suffix) |
以suffix结尾返回true |
int hashCode() |
获取调用对象的哈希码值 |
boolean equals(Object other) |
字符串与other相等返回true |
boolean equalsIgnoreCase(String other) |
字符串与other相等(忽略大小写)返回true |
int indexOf(int cp) |
用于返回当前字符串中参数cp指定的字符第一次出现的下标 |
int indexOf(int cp, int fromIndex) |
返回与字符串str或码点cp匹配的第一个子串开始的位置 |
int indexOf(String str) |
在字符串中检索str返回其第一次出现的位置,若找不到返回-1 |
int indexOf(String str, int formIndex) |
表示从字符串的fromIndex位置开始检索str第一次出现的位置 |
int lastIndexOf(int cp) |
用于返回参数cp指定的字符最后一次出现的下标 |
int lastIndexOf(int cp, int fromIndex) |
返回与字符串str或码点cp匹配的最后一个子串开始的位置 |
int lastIndexOf(String str) |
返回str指定字符串最后一次出现的下标 |
int lastIndexOf(String str, int fromIndex) |
用于从fromIndex位置开始反向搜索的第一次出现的下标 |
String substring(int beginIndex) |
返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串 |
String substring(int beginIndex, int endIndex) |
返回字符串中从下标beginIndex(包括)开始到 endIndex(不包括)结束的子字符串 |
int codePointAt(int index) |
返回给定位置的码点 |
int offsetByCodePoints(int startIndex, int cpCount) |
返回从start码点开始,cp个码点后的码点索引 |
IntStream codePoints() |
将字符串的码点作为一个返回流 |
int codePointCount(int startIndex, int endIndex) |
返回startIndex和endIndex-1之间的码点个数 |
String replace(CharSequence oldString, CharSequence newString) |
返回新字符串,字符串newString替换原始字符串中的所有oldString |
String join(CharSequence delimiter, CharSequence... elements) |
返回新字符串,给定的定界符连接所有元素 |
String repeat(int count) |
java11:返回字符串,将当前的字符串重复count次 |
更多方法访问 Java官方开发文档
4.正则表达式
方法声明 |
功能介绍 |
boolean matches(String regex) |
判断当前正在调用的字符串是否匹配参数指定的正则表达式规则 |
String[] split(String regex) |
参数regex为正则表达式,以regex所表示的字符串为分隔 符,将字符串拆分成字符串数组 |
String replace(char oldChar, char newChar) |
使用参数newChar替换此字符串中出现的所有参数oldChar |
String replaceFirst(String regex, String replacement) |
替换此字符串匹配给定的正则表达式的第一个子字符串 |
String replaceAll(String regex, String replacement) |
将字符串中匹配正则表达式regex的字符串替换成 replacement |
StringBuilder
StringBuilder
类和StringBuffer
类是用来描述字符序列可以改变的字符串StringBuffer
属于线程安全的类,StringBuilder
属于非线程安全的类SpringBuilder
的字符串长度超过了初始容量时,就会自动进行扩容,默认扩容算法是:原始容量 * 2 + 2SpringBuilder
采用byte
数组来存放字符- 使用效率
String < StringBuffer < StringBuilder
1.常用构造方法
方法声明 |
功能介绍 |
StringBuilder() |
使用无参方式构造对象,容量为16 |
StringBuilder(int capacity) |
根据参数指定的容量来构造对象,容量为参数指定大小 |
StringBuilder(String str) |
根据参数指定的字符串来构造对象,容量为:16+字符串长度 |
2.常用方法
StringBuilder builder = new StringBuilder();
// 追加字符串
builder.append("a");
builder.append("b");
String s = builder.toString();
方法声明 |
功能介绍 |
int capacity() |
用于返回调用对象的容量 |
int length() |
用于返回字符串的长度,也就是字符的个数 |
StringBuilder insert(int offset, String str) |
插入字符串并返回调用对象的引用,就是自己 |
StringBuilder append(String str) |
追加字符串 |
StringBuilder deleteCharAt(int index) |
将当前字符串中下标为index位置的单个字符删除 |
StringBuilder delete(int start,int end) |
删除字符串 |
StringBuilder replace(int start,int end,String str) |
替换字符串 |
StringBuilder reverse() |
字符串反转 |
StringBuilder
的很多方法的返回值均当前类本身this
,这样设计的目的在于可以连续调用。
Java8之前的日期相关类
1.System类
- Java.lang.System类中提供了一些有用的类字段和方法
- 获取当前时间戳:
static long currentTimeMillis()
2.Date类
- java.util.Date类主要用于描述特定的瞬间,也就是年月日时分秒,可以精确到毫秒
方法声明 |
功能介绍 |
Date() |
使用无参的方式构造对象,也就是当前系统时间 |
Date(long date) |
根据参数指定毫秒数构造对象, 参数为距离1970年1月1日0时0分0秒的毫秒数 |
long getTime() |
获取调用对象距离1970年1月1日0时0分0秒的毫秒数 |
void setTime(long time) |
设置调用对象为距离基准时间time毫秒的时间点 |
3.SimpleDateFormat
- java.text.SimpleDateFormat类主要用于实现日期和文本之间的转换
- 简单使用:
Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = sdf.format(d1);
Date parse = sdf.parse(format);
方法声明 |
功能介绍 |
SimpleDateFormat() |
使用无参方式构造对象 |
SimpleDateFormat(String pattern) |
根据参数指定的模式来构造对象,模式主要有: y-年 M-月 d-日H-时 m-分 s-秒 |
final String format(Date date) |
用于将日期类型转换为文本类型 |
Date parse(String source) |
用于将文本类型转换为日期类型 |
4.Calendar
- java.util.Calender类主要用于描述特定的瞬间,取代
Date
类中的过时方法实现全球化 - 该类是个抽象类,因此不能实例化对象,其具体子类针对不同国家的日历系统,其中应用最广泛的是
GregorianCalendar
- 简单使用:
Calendar in = Calendar.getInstance();
in.set(2008, 7, 8, 8, 8, 8);
Date d2 = in.getTime();
方法声明 |
功能介绍 |
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 field, int value) |
设置指定字段的数值 |
void add(int field, int amount) |
向指定字段增加数值 |
Java8中的日期相关类
- Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理
- java.time包:该包日期/时间API的基础包
- java.time.chrono包:该包提供对不同日历系统的访问
- java.time.format包:该包能够格式化和解析日期时间对象
- java.time.temporal包:该包包含底层框架和扩展特性
- java.time.zone包:该包支持不同时区以及相关规则的类
1.LocalDate类
- java.time.LocalDate类主要用于描述年-月-日格式的日期信息,该类不表示时间和时区信息
方法声明 |
功能介绍 |
static LocalDate now() |
在默认时区中从系统时钟获取当前日期 |
2.LocalTime类
- java.time.LocalTime 类主要用于描述时间信息,可以描述时分秒以及纳秒
方法声明 |
功能介绍 |
static LocalTime now() |
从默认时区的系统时间中获取当前时间 |
static LocalTime now(ZoneId zone) |
获取指定时区的当前时间 |
3.LocalDateTime类
- java.time.LocalDateTime类主要用于描述ISO-8601日历系统中没有时区的日期时间
方法声明 |
功能介绍 |
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() |
获取日期字段 |
int getHour() |
获取小时数 |
int getMinute() |
获取分钟数 |
int getSecond() |
获取秒数 |
LocalDateTime withYear(int year) |
设置为参数指定的年 |
LocalDateTime withMonth(int month) |
设置为参数指定的月 |
LocalDateTime withDayOfMonth(int dayOfMonth) |
设置为参数指定的日 |
LocalDateTime withHour(int hour) |
设置为参数指定的时 |
LocalDateTime withMinute(int minute) |
设置为参数指定的分 |
LocalDateTime withSecond(int second) |
设置为参数指定的秒 |
LocalDateTime plusYears(long years) |
加上参数指定的年 |
LocalDateTime plusMonths(long months) |
加上参数指定的月 |
LocalDateTime plusDays(long days) |
加上参数指定的日 |
LocalDateTime plusHours(long hours) |
加上参数指定的时 |
LocalDateTime plusMinutes(long minutes) |
加上参数指定的分 |
LocalDateTime plusSeconds(long seconds) |
加上参数指定的秒 |
LocalDateTime minusYears(long years) |
减去参数指定的年 |
LocalDateTime minusMonths(long months) |
减去参数指定的月 |
LocalDateTime minusDays(long days) |
减去参数指定的日 |
LocalDateTime minusHours(long hours) |
减去参数指定的时 |
LocalDateTime minusMinutes(long minutes) |
减去参数指定的分 |
LocalDateTime minusSeconds(long seconds) |
减去参数指定的秒 |
4.Instant类
- 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.DateTimeFormatter类
- java.time.format.DateTimeFormatter类主要用于格式化和解析日期
方法声明 |
功能介绍 |
static DateTimeFormatter ofPattern(String pattern) |
根据参数指定的模式来获取对象 |
String format(TemporalAccessor temporal) |
将参数指定日期时间转换为字符串 |
TemporalAccessor parse(CharSequence text) |
将参数指定字符串转换为日期时间 |
// 获取日期
LocalDate date1 = LocalDate.now();
// 获取时间
LocalTime date2 = LocalTime.now();
// 获取日期时间
LocalDateTime date3 = LocalDateTime.now();
// 获取指定日期
LocalDateTime date4 = LocalDateTime.of(2008, 8, 8, 8, 8, 8);
// 获取当前瞬间时间
Instant now = Instant.now();
// 当前时间偏移8h
OffsetDateTime offsetDateTime = now.atOffset(ZoneOffset.ofHours(8));
// 格式化日期
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dtf.format(date4);
TemporalAccessor parse = dtf.parse(format);
更新时间:{docsify-updated}