Java基础系列(10)- Java常用类
1|0字符串相关的类
1|1String
String:字符串,使用一对""
引起来表示
- String声明为final的,不可被继承
- String实现了
- Serializable接口:表示字符串是支持序列化的
- Comparable接口:表示String可以比较大小
- String内部定义了final char[] value用于存储字符串数据
- String:代表不可变的字符序列,简称:不可变性
- 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
- 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
- 当调用String的replace() 方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
- 通过字面量的方式(区别与new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
- 字符串常量池中不会存储相同内容的字符串的
String不同实例化方法的对比
String str1 = "hello";
和 String str2 = new String("hello");
的区别?
字符串常量存储在字符串常量池,目的是共享
字符串非常量对象存储在堆中
面试题
String的不同拼接操作
结论:
- 常量与常量的拼接结果在常量池中。且常量池中不会存在相同内容的常量。
- 只要其中有一个是变量,结果就在堆中
- 如果拼接的结果调用intern()方法,返回值就在常量池中
String的常用方法
int length()
:返回字符串的长度,return value.length
char charAt(int index)
:返回某索引处的字符return value[index]
boolean isEmpty()
:判断是否是空字符串:return value.length == 0
String toLowerCase()
:使用默认语言环境,将String 中的所有字符转换为小写String toUpperCase()
:使用默认语言环境,将String 中的所有字符转换为大写String trim()
:返回字符串的副本,忽略前导空白和尾部空白boolean equals(Object obj)
:比较字符串的内容是否相同boolean equalsIgnoreCase(String anotherString)
:与equals方法类似,忽略大小写String concat(String str)
:将指定字符串连接到此字符串的结尾。等价于用+
int compareTo(String anotherString)
:比较两个字符串的大小String substring(int beginIndex)
:返回一个新的字符串,它是此字符串的从beginIndex
开始截取到最后的一个子字符串String substring(int beginIndex, int endIndex)
:返回一个新字符串,它是此字符串从beginIndex
开始截取到endIndex(不包含)
的一个子字符串
boolean endsWith(String suffix)
:测试此字符串是否以指定的后缀结束boolean startsWith(String prefix)
:测试此字符串是否以指定的前缀开始boolean startsWith(String prefix, int toffset)
:测试此字符串从指定索引开始的 子字符串是否以指定前缀开始boolean contains(CharSequence s)
:当且仅当此字符串包含指定的 char 值序列 时,返回 trueint indexOf(String str)
:返回指定子字符串在此字符串中第一次出现处的索引int indexOf(String str, int fromIndex)
:返回指定子字符串在此字符串中第一次出 现处的索引,从指定的索引开始int lastIndexOf(String str)
:返回指定子字符串在此字符串中最右边出现处的索引int lastIndexOf(String str, int fromIndex)
:返回指定子字符串在此字符串中最后 一次出现处的索引,从指定的索引开始反向搜索
注:indexOf和lastIndexOf方法如果未找到都是返回-1
String replace(char oldChar, char newChar)
:返回一个新的字符串,它是 通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。String replace(CharSequence target, CharSequence replacement)
:使 用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。String replaceAll(String regex, String replacement)
: 使 用 给 定 的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。String replaceFirst(String regex, String replacement)
: 使 用 给 定 的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。boolean matches(String regex)
:告知此字符串是否匹配给定的正则表达式。String[] split(String regex)
:根据给定正则表达式的匹配拆分此字符串。String[] split(String regex, int limit)
:根据匹配给定的正则表达式来拆分此 字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。
String 的相互转换
String与基本数据类型转
String --> 基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)
基本数据类型、包装类 --> String:调用String 重载的valueOf(xxx)
String 与 char[] 之间的转换
String 与 byte[] 之间的转换
编码:String --> byte[]:调用String的getBytes()
解码:byte[] --> String:调用String的构造器
1|2StringBuffer、StringBuilder
比较
String、StringBuffer、StringBuilder三者的异同?
String:不可变得字符序列;底层使用char[] 存储
StringBuffer:可变得字符序列;线程是安全的,效率低;底层使用char[]存储
StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
- StringBuffer():初始容量为16的字符串缓冲区
- StringBuffer(int size):构造指定容量的字符串缓冲区
- StringBuffer(String str):将内容初始化为指定字符串内容
源码:
StringBuffer常用方法
- StringBuffer
append(xxx)
:提供了很多的append()方法,用于进行字符串拼接 - StringBuffer
delete(int start,int end)
:删除指定位置的内容 - StringBuffer
replace(int start, int end, String str)
:把[start,end)位置替换为str - StringBuffer
insert(int offset, xxx)
:在指定位置插入xxx - StringBuffer
reverse()
:把当前字符序列逆转 - public int
indexOf(String str)
- public String
substring(int start,int end)
- public int
length()
- public char
charAt(int n )
- public void
setCharAt(int n ,char ch)
:指定位置字符改成新的
对比String、StringBuffer、StringBuilder三者的效率
从高到低:StringBuilder > StringBuffer > String
2|0时间日期
2|1JDK8之前的日期时间API
java.lang.System类
java.util.Date类
构造器
Date()
:使用无参构造器创建的对象可以获取本地当前时间。Date(long date)
:创建指定毫秒数的Date对象
方法
getTime()
:返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象 表示的毫秒数。toString()
:把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是时间标准。
java.sql.Date类
对应着数据库中的日期类型的变量
java.text.SimpleDateFormat类
SimpleDateFormat 对日期 Date 类的格式化和解析
- SimpleDateFormat() :默认的模式和语言环境创建对象
- public SimpleDateFormat(String pattern):该构造方法可以用参数pattern 指定的格式创建一个对象,该对象调用:
格式化: 日期 -> 字符串
- public String
format(Date date)
:方法格式化时间对象date
解析:字符串 -> 日期
- public Date
parse(String source)
:从给定字符串的开始解析文本,以生成 一个日期。
java.util.Calendar(日历)类
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
实例化
- 使用
Calendar.getInstance()
方法 (用的比较多) - 调用它的子类
GregorianCalendar
的构造器。
方法
-
public void set(int field,int value)
-
public void add(int field,int amount)
-
public final Date getTime()
-
public final void setTime(Date date
注意:
- 获取月份时:一月是0,二月是1,以此类推,12月是11
- 获取星期时:周日是1,周二是2 , 。。。。周六是7
2|2JDK8的日期时间API
Local系列
LocalDate
、LocalTime
、LocalDateTime
类是其中较重要的几个类,它们的实例 是不可变的对象
,分别表示使用 ISO-8601日历系统的日期、时间、日期和时间。 它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区 相关的信息。
方法 | 描述 |
---|---|
now() / * now(ZoneId zone) | 静态方法,根据当前时间创建对象/指定时区的对象 |
of() | 静态方法,根据指定日期/时间创建对象 |
getDayOfMonth()/getDayOfYear() | 获得月份天数(1-31) /获得年份天数(1-366) |
getDayOfWeek() | 获得星期几(返回一个 DayOfWeek 枚举值) |
getMonth() | 获得月份, 返回一个 Month 枚举值 |
getMonthValue() / getYear() | 获得月份(1-12) /获得年份 |
getHour()/getMinute()/getSecond() | 获得当前对象对应的小时、分钟、秒 |
withDayOfMonth()/withDayOfYear()/ withMonth()/withYear() | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() | 向当前对象添加几天、几周、几个月、几年、几小时 |
minusMonths() / minusWeeks()/ minusDays()/minusYears()/minusHours() | 从当前对象减去几月、几周、几天、几年、几小时 |
瞬时:Instant
方法 | 描述 |
---|---|
now() | 静态方法,返回默认UTC时区的Instant类的对象 |
toEpochMilli(long epochMilli) | 静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒 数之后的Instant类的对象 |
atOffset(ZoneOffset offset) | 结合即时的偏移来创建一个 OffsetDateTime |
toEpochMilli() | 返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳 |
java.time.format.DateTimeFormatter 类
格式化或解析日期、时间
3|0TimeUnit
TimeUnit
是 java.util.concurrent
包下面的一个类,表示给定单元粒度的时间段
主要作用
- 时间颗粒度转换
- 延时
常用的颗粒度
时间颗粒度转换
例子
延时
- 一般的写法
- TimeUnit 写法
4|0StringUtils常用方法整理
public static boolean contains(String str,char searchChar)
说明
: str
是原始字符串, searchChar
是想要搜索的字符,此方法是检查字符串 str
中是否包含字符 searchChar
,如果 str
为 null
或 ""
,则返回 false
示例:
public static boolean contains(String str,String searchStr)
说明
: str
是原始字符串, searchStr
是待搜索的字符串,此方法是检查字符串 str
中是否包含字符串 searchStr
,如果 str
为 null
,则返回 false
。
示例:
打印结果如下:
public static boolean containsIgnoreCase(String str,String searchStr)
说明
:在字符串 str
中搜索字符串 searchStr
,忽略大小写。如果 str
为 Null
,则返回 false
。
示例:
public static boolean isBlank(String str)
说明
:检查一个字符串 str
是否是空白 (whitespace)
,empty("") 或者
null` ;
示例
:
public static boolean isEmpty(String str)
说明
:检查一个字符串 str
是否是 empty("")
或 null
。
示例:
public static boolean isNotBlank(String str)
说明
:判断一个字符串 str
非 empty("")
, 非 null
,非 whitespace
。
示例:
public static String trimToNull(String str)
说明
:移除字符串中字符的 char < 32(ASCII<32)
的字符,如果该字符串是 null
或 empty("")
,则返回null
。
示例:
public static String trimToEmpty(String str)
说明
:移除字符串中字符的 char<32(ASCII<32)
的字符,如果该字符串是 null
或 empty("")
,则返回empty("")
。
示例:
public static String replace(String text,String searchString,String replacement)
说明
:用一个字符串替换另一个字符串中出现的指定字符串。
示例:
参数:
text
:需要被替换的字符串所在的字符串,可能为null
;searchString
:需要被替换的字符串,可能为null
;replacement
:用来替换的字符串,可能为null
;
public static String join(Object[] array,String separator)
说明
:用指定分隔符连接数组各个元素。
示例:
这里以数组为例,集合等类型的详细方法参考文章最下面提供的官方文档。
public static boolean endsWith(String str, String suffix)
说明
:用来判断一个字符串是不是以某字符串结尾
示例:
public static boolean equals(String str1,String str2)
说明
:比较两个字符串,如果相同返回true
,如果两个字符串都为null
,返回true
。此方法与String
类的equals
方法相比,可以判断两个null
值。
示例:
StringUtils.substringAfter()
说明
:截取某字符串指定字符串之后的内容。
示例:
5|0Arrays 工具类的使用
java.util.Arrays
类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。
方法 | 作用 |
---|---|
boolean equals(int[] a,int[] b) | 判断两个数组是否相等 |
String toString(int[] a) | 输出数组信息。 |
void fill(int[] a,int val) | 将指定值填充到数组之中。 |
void sort(int[] a) | 对数组进行排序。 |
int binarySearch(int[] a,int key) | 对排序后的数组进行二分法检索指定的值。 |
6|0比较器
在java中的对象,正常情况下,只能进行比较:== 或 !=。不能使用 > 或 < 的。但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
Java实现对象排序的方式有两种:
-
自然排序:java.lang.Comparable
-
定制排序:java.util.Comparator
6|1Compatable接口的使用举例:自然排序
- 像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象的方法
- 像String、包装类重写compateTo() 方法以后,进行了从小到大的排列
- 重写compareTo(obj)的规则:
- 如果当前对象this大 于形参对象obj,则返回正整数,
- 如果当前对象this小于形参对象obj,则返回 负整数,
- 如果当前对象this等于形参对象obj,则返回零。
- 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序
- Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称 为类的自然排序。
- 实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即 通过 compareTo(Object obj) 方法的返回值来比较大小。
如果当前对象this大 于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回 负整数,如果当前对象this等于形参对象obj,则返回零。
- 实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或 Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有 序集合中的元素,无需指定比较器。
- 对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。
6|2自定义类实现Comparable自然排序
6|3定制排序:Comparator
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码, 或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那 么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排 序的比较。
重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
-
如果方法返 回正整数,则表示o1大于o2;
-
如果返回0,表示相等;
-
返回负整数,表示 o1小于o2。
在已经有Comparable的情况下
Comparable 接口与Compatator 的使用的对比:
Comparable 接口的方式一旦确定,保证Comparable 接口实现类的对象在任何位置都可以比较大小
Comparator接口属于临时性的比较
7|0System 类
-
System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。
-
由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。
-
成员变量
- System类内部包含in、out和err三个成员变量,分别代表标准输入流 (键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
-
成员方法
native long currentTimeMillis()
: 该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时 间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。void exit(int status)
: 该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表 异常退出。使用该方法可以在图形界面编程中实现程序的退出功能
等。void gc()
: 该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则 取决于系统中垃圾回收算法的实现以及系统执行时的情况。String getProperty(String key)
: 该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见 的属性名以及属性的作用如下表所示
属性名 | 属性说明 |
---|---|
java.version | java运行时环境版本 |
java.home | java安装目录 |
os.name | 操作系统的名称 |
os.version | 操作系统的版本 |
user.name | 用户的账户名称 |
user.hone | 用户的主目录 |
user.dir | 用户的当前工作目录 |
8|0Math类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回 值类型一般为double型。
-
abs 绝对值
-
acos,asin,atan,cos,sin,tan 三角函数
-
sqrt 平方根
-
pow(double a,doble b) a的b次幂
-
log 自然对数 exp e为底指数
-
max(double a,double b)
-
min(double a,double b)
-
random() 返回0.0到1.0的随机数
-
long round(double a) double型数据a转换为long型(四舍五入)
-
toDegrees(double angrad) 弧度—>角度
-
toRadians(double angdeg) 角度—>弧度
9|0BigInteger类
- Integer类作为int的包装类,能存储的最大整型值为2^31-1,Long类也是有限的, 最大为2 63-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。
- java.math包的
BigInteger可以表示不可变的任意精度的整数
。BigInteger 提供 所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位操作以及一些其他操作。
9|1常用方法
- public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
- BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
- BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
- BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数 相除只保留整数部分。
- BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
- BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。
- BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。
10|0BigDecimal类
- 一般的Float类和Double类可以用来做科学计算或工程计算,但在
商业计算中, 要求数字精度比较高,故用到java.math.BigDecimal类。
- BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
构造器
- public BigDecimal(double val)
- public BigDecimal(String val)
常用方法
- public BigDecimal add(BigDecimal augend)
- public BigDecimal subtract(BigDecimal subtrahend)
- public BigDecimal multiply(BigDecimal multiplicand)
- public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/15759786.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战