【API:util包 lang包】包装类、Math类、Object类、String类、StringBuffer类、正则表达式、Pattern类

本文概述了Java中的关键概念,包括包装类如何解决基本类型非面向对象问题,Math类提供的数学函数,Object类的继承与方法,以及String类的常量特性与StringBuffer/StringBuilder的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. java.lang.*

lang包提供Java语言开发所需要的最基本的类,这个包会自动导入,对于其中的类,可以直接使用而不需要import引入,如System类,String类,包装类,Math类,Object类,Thread类,Exception类。

1.1 包装类

java是面向对象的语言,但java中的基本数据类型却不是面向对象的,所以java中又为每一个基本数据类型设计了一个对应的类,称为包装类。

在JDK5.0以上,基本数据类型与包装类之间可以直接转换,称为自动拆装包。

byte ··> Byte

short ··> Short

int ··> Integer

long ··> Long

char ··> Character

boolean ··> Boolean

 float ··> Float

double ··> Double

好处:提供了很多用于处理当前数据类型的常用方法;java中很多类的方法参数要求是Object对象,而基本数据类型不是对象,因此提供了包装类。

 

1.2 Math类

Math类包含了许多静态方法和静态常量,不允许实例化。

 包括常量PI、绝对值、三角函数、最大整数最小整数、对数函数、指数函数、幂函数、平方根、四舍五入等。

1.3 Object类

Object类是所有类的父类,定义一个类不继承任何类,默认继承 Object。

这个类中一共11个方法,包含了所有类都需要定义的方法:

protected clone():克隆方法,创建一个与当前对象完全相同的对象

equals(Object):与另一个对象的内容进行比较,相同返回True,不同返回False。可以通过继承和重写equals方法,完成不同逻辑的比较。

                           自反性:s.equals(s)需为True

                           对称性:a.equals(b)和b.equals(a)结果应相同

                          传递性:如果a.equals(b),b.equals(c)为True,那么a.equals(c)也为True。反之也成立

                          一致性:equals中比较的信息不被修改时,多次调用结果应相同。

                         与null相比,返回False

hashcode(): 返回一个int整型值。一般都是同时重写hashcode()和equals()

                       一致性:对象信息不被修改时,多次调用结果应相同。

                      如果两个对象是相等的(调用equals方法返回True),那么它们调用hashcode()也必须返回相同的整数。但两个对象不相等,也可能返回相同的hashcode。

finalize():当一个对象标记成垃圾时,JVM可能会调用此方法

wait()

notify()

toString():返回当前对象的字符串表示。使用System.out.println()直接输出某个对象时,会自动调用此方法。

1.4 String类

字符串是常量,一旦创建就不能更改。

常用方法:返回值类型 方法名 方法含义

char charAt(int index):返回指定位置处的字符

int length():返回字符串的长度

boolean contains(CharSequence s):是否包含另一个子串

int indexOf(char ch):返回指定字符在字符串中第一次出现处的索引

int indexOf(char ch,int fromIndex):从指定下标开始查找

int indexOf(String str):返回指定子字符串在字符串中第一次出现处的索引

int indexOf(String str,int fromIndex):从指定下标开始查找

boolean isEmpty():判断字符串是否为空,当且仅当length()为0时。

int lastIndexOf(char ch):返回最后一次出现的索引,重载情况同上。

String replace(char oldChar,char newChar):使用newChar替换所有的oldChar

String replace(CharSequence target,CharSequence replacement):使用指定字面值替换所有的目标字面值

String replaceAll(String regex,String replacement) :可以使用正则表达式替换

String replaceFirst(String regex,String replacement) :只替换第一个子字符串

String[] split(String  regex):根据正则表达式拆分字符串

boolean startsWith(String prefix):是否以指定的前缀开始

boolean startsWith(String prefix,int offset):从指定位置处是否以指定的前缀开始

boolean endsWith(String suffix):是否以指定后缀结束

String toUpperCase():将字符串中所有字符都转为大写

String toLowerCase():将字符串中所有字符都转为小写

String trim():去掉字符串中左侧和右侧的空格,中间的空格不变

String substring(int beginIndex):返回一个子字符串,从beginIndex开始到原字符串结尾

String substring(int beginIndex,int endIndex):返回一个子字符串,从beginIndex开始到endIndex结束(包含beginIndex,但不包含endIndex)

boolean equals(Object obj):将字符串与指定对象比较,判断两个字符串内容是否完全相同。

boolean equalsIgnoreCase(String str):将字符串与另一个字符串比较,且不考虑大小写。

boolean matches(String regex):判断字符串是否符合正则表达式的格式

字符串缓冲池(String Pool):因为String类是使用频率最高的,同时String又是一个常量,因此为了提升性能对String类做了特殊的处理。当使用双引号直接定义一个字面值的字符串时,java会在字符串缓冲池中查找,如找到相同字面值,则直接指向(使用这个引用)这个值。找不到时,会在池中创建一个常量值并指向。

String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println(str1==str2);
System.out.println(str3==str4);

因此,上面第一个的输出为true,第二个的输出为false

字符串与基本数据类型的转换:可以通过包装类的方法,如Integer.parseInt(String)、Double.parseDouble(String)等,将字符串转化为对应的数据类型。

1.5 StringBuffer类、StringBuilder类

 StringBuffer,字符串缓冲区,它是可变的,且线程安全。

 方法使用同String类似,区别是StringBuffer会直接返回处理后的字符串,不需要使用额外的变量去接收。

String str1 = "hello";
String str2 = str1 + "OK";
StringBuffer str3 = new StringBuffer("hello");
str3.append("OK");
System.out.println(str1);
System.out.println(str3);
/*
可以看出str1做了字符串连接操作后,str1本身并没有改变。
*/

append():追加

insert():插入

replace():替换

delete():删除

substring():取子串

reverse():反转

capacity():容量

length():长度

StringBuilder类似于StringBuffer,但是线程不安全

1.6 正则表达式

用于字符串的格式匹配。

主要作用:格式验证(邮箱、网址、身份证号、手机号等),判断是否合法

                  字符串查找

                  字符串替换

正则表达式的语法:

^:以什么开头(一般查找时使用)。^abc:以abc开头

$:以什么结尾。abc$:以abc结尾

[]:[]中的任意一个字符。[0-9]:0-9任一个数字,[0123]:0-3中任一个数字,[abc],[a-zA-Z]

.:任意一个字符

*:前一项字符匹配0至多次

+:前一项字符匹配1至多次

?:前一项字符匹配0或1次

{n}:固定匹配n次

{n,m}:匹配n-m次

{n,}:匹配至少n次

():设置一个捕获项,不加()会把前面的单个字符当成捕获项。(其实就是改变优先级)

|:或

\:转义字符,对正则表达式中有特殊含义的字符进行转义(比如在匹配网址xxxxx.com时就需要对.进行转义,需要转义两次,因为\也有特殊含义。这要分两步看,首先字符串中的\\被编译器解释为\,然后作为正则表达式,\.又被正则表达式引擎解释为.,如果在字符串里只写\.的话,第一步就被直接解释为.,之后作为正则表达式被解释时就变成匹配任意字符了)

\d:数字,[0-9]

\D:非数字,[^0-9]

\s:空白字符

\S:非空白字符

\w:单词字符,[a-zA-Z_0-9]

\W:非单词字符

1.7 Pattern类

对正则表达式对象的封装,代表编译后的正则表达式

1.8 Matcher类

是对一个正则表达式和需要进行匹配的字符串的封装。

提供了一些用于匹配的方法:boolean matches():整体匹配

                                              boolean lookingAt():从头开始匹配

                                              boolean find():查找

Pattern p = Pattern.compile("[0-9]{6}");
Matcher m = p.matcher("gdfjgqrhh1gh3g2h4342132jgbnjbfgh341234hg");
boolean b =m.matches();
System.out.println(b);

2. java.util.*

util包提供事件模型、集合框架、日期时间工具和各种有用的类

2.1 Random类

随机数生成器,生成各种类型的伪随机数

next():

nextBoolean():

nextBytes():

nextDouble():

nextFloat():

nextInt():生成任意一个int类型的数

nextInt(int n):生成0-n(不包括n)的随机整数

nextLong():

2.2 Date类

关于日期处理可以看另一篇:日期处理常用类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值