Java常用API
1.String类
概述: String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
-
String类常用的构造方法
方法名 说明 public String() 创建一个空白字符串对象,不含有任何内容 public String(char[] chs)
public String(char[] value, int offset, int count)根据字符数组的内容,来创建字符串对象 public String(byte[] bys)
public String(byte[] bytes, int offset, int length)根据字节数组的内容,来创建字符串对象 String s = “abc”; 在字符串池中维护 直接赋值的方式创建字符串对象,内容就是abc -
创建字符串对象两种方式的区别
-
通过构造方法创建
-
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然字符串内容相同,但是地址值不同
char[] chs = {'a','b','c'}; String s1 = new String(chs);// s1字符串的内容: abc String s2 = new String(chs);// s2字符串的内容: abc // 上面的代码中,JVM首先会先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的
-
-
直接赋值方式创建
-
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
String s3 = "abc"; String s4 = "abc"; // 上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行代码,则让s4直接参考字符串池中String对象,也就是说他们本质上是同一个对象
-
-
-
String类的特点
- String类的字符串不可变,它们的值在创建后不能被更改,每一次拼接String类的字符串对象,都会创建一个新的字符串对象
- 虽然 String 的值是不可变的,但是它们可以被共享
- 字符串效果上相当于字符数组( char[] )
- String底层是靠字符数组实现的,jdk9底层是字节数组。
-
字符串的比较
- ==号的比较
- 比较基本数据类型:比较的是具体的值
- 比较引用数据类型:比较的是对象地址值
- 是equals方法
- 比较两个字符串内容是否相同、区分大小写
- 比较字符串内容是否相等,区分大小写,需要使用String类的equals方法,千万不要用 == 比较
- 如果比较字符串内容是否相等,不区分大小写,需要使用String类的**equalsIgnoreCase()**方法
- ==号的比较
2.String类常用方法
常用的方法:
concat(); //把两个字符串拼接起来,获取一个新的字符串
★length(); //获取字符串的长度(其实就是获取字符串中 字符的个数)
★equals(); //比较两个字符串的内容是否相同。 //区分大小写
equalsIgnoreCase(); //比较两个字符串的内容是否相同。 //忽略大小写
★charAt(); //根据给定的索引,获取对应位置的字符
★indexOf(); //获取指定的字符 在字符串中 第一次出现的位置(索引),找不到返回-1
//int index = a1.indexOf('h'); 从头找,'h'第一次出现的位置
//int index = a1.indexOf('h',3); 从索引为3的元素开始往后找,'h'第一次出现的位置
lastIndexOf(); //获取指定的字符 在字符串中 最后一次出现的位置(索引),找不到返回-1
//int index = a1.lastIndexOf('h'); 从尾部找,'h'最后一次出现的位置
//int index = a1.lastIndexOf('h',3); 从索引为3的元素开始往前找,'h'最后一次出现的位置
★substring(); //截取字符串,返回新的字符串
//String newStr = a1.substring(2); //从给定索引,直接截取到字符串末尾
//String newStr = a1.substring(2,5); //包左不包右(前闭后开), 能取索引2的元素,不能取索引5的元素
★isEmpty(); //判断字符串是否为空(长度为0返回true,不为0返回false)
★contains(); //判断字符串中是否包含 给定的字符串。
endsWith(); //判断字符串是否以 给定的字符串 结尾。
startsWith(); //判断字符串是否以 给定的字符串 开头。
★replace(); //用新内容替代旧内容,返回新的字符串
toLowerCase(); //把字母都转成其对应的小写形式。
toUpperCase(); //把字母都转成其对应的大写形式。
toCharArray() // 把字符串转换为数组
getBytes() // 把字符串转换为字节数组
★trim(); //移除首尾空格。
★split(); //根据给定的内容,切割字符串,返回字符串数组
理解的口诀:
判断功能: 首尾中空加判断
获取功能: 截长取位取元素
转换功能: 大小拼串转数组
//toCharArray(), getBytes();
其他功能: 除空切换字典拍
//copareTo();
3.StringBuilder类
概述: StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的
StringBuilder类和String类的区别:
-
String类:内容是不可变的
-
StringBuilder类:内容是可变的,StringBuilder 拼接是直接在本身的字符串末尾进行拼接的
StringBuilder类的构造方法:
方法名 | 说明 |
---|---|
public StringBuilder() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBuilder(String str) | 根据字符串的内容,来创建可变字符串对象 |
StringBuilder类类常用方法:
public StringBuilder append(任意类型) 拼接数据,并返回对象本身
public StringBuilder insert(int offset, 任意类型) 在指定位置插入数据,并返回对象本身
public StringBuilder reverse() 反转字符串,并返回对象本身
StringBuilder和String相互转换:
-
String转换为StringBuilder:
public StringBuilder(String s)
:通过StringBuilder的构造方法就可以实现把 String 转换为 StringBuilder -
StringBuilder转换为String:
public String toString()
:通过StringBuilder类中的 toString() 就可以实现把 StringBuilder 转换为 String
4.Object类
-
java.lang.Object
类是Java语言中的根类,即所有类的父类。如果一个类没有特别指定父类, 那么默认则继承自Object类。
常用方法:
public String toString()
:返回该对象的字符串表示。- toString方法返回的字符串内容格式为: 类的全路径+@+十六进制数的地址值
- 直接打印对象名,其实就是打印对象调用toString方法返回的字符串内容
public boolean equals(Object obj)
:指示其他某个对象是否与此对象“相等”。容易抛出空指针异常- Object类的equals()方法默认比较的是2个对象的地址值是否相等(==比较)
- 由于java中所有类都是继承Object类,所以如果类中没有重写equals方法,默认就是地址值比较
- 如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以重写equals方法
5.Objects类
在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashCode、返回对象的字符串表示形式、比较两个对象。
Objects类: 避免空指针异常(容忍空指针)
public static boolean equals(Object a, Object b):判断两个对象是否相等。
源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
6.native方法
在Object类的源码中定义了 native 修饰的方法, native 修饰的方法称为本地方法。这种方法是没有方法体的,我们查看不了它的实现,所以大家不需要关心该方法如何实现的
-
当我们需要访问C或C++的代码时,或者访问操作系统的底层类库时,可以使用本地方法实现。
也就意味着Java可以和其它的编程语言进行交互。
-
本地方法的作用: 就是当Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。
6.Date类
java.util.Date
类 表示一个日期和时间,内部精确到毫秒。
Date类中的构造方法:
public Date()
:从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date)
:将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
Date类中的常用方法:
public long getTime() 获取当前日期对象距离标准基准时间的毫秒值。
public void setTime(long time) 设置当前日期对象距离标准基准时间的毫秒值.也就意味着改变了当前日期对象
public boolean after(Date when) 测试此日期是否在指定日期之后。
public boolean before(Date when) 测试此日期是否在指定日期之前。
7.DateFormat类
java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
- 格式化:按照指定的格式,把Date对象转换为String对象。
- 解析:按照指定的格式,把String对象转换为Date对象。
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
-
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。常用的格式规则为:
标识字母(区分大小写) 含义 y 年 M 月 d 日 H 时 m 分 s 秒 备注:更详细的格式规则,可以参考SimpleDateFormat类的API文档。
常用方法:
public String format(Date date):将Date对象格式化为字符串。
public Date parse(String source):将字符串解析为Date对象。
8.Calendar类
-
java.util.Calendar类表示一个“日历类”,可以进行日期运算。它是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类。
-
有两种方式可以获取GregorianCalendar对象:
-
直接创建GregorianCalendar对象;
-
通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象
public static Calendar getInstance() 获取当前日期的日历对象
-
Calendar类的常用方法:
public int get(int field) 获取某个字段的值。
参数field:表示获取哪个字段的值,可以使用Calender中定义的常量来表示
Calendar.YEAR : 年
Calendar.MONTH :月
Calendar.DAY_OF_MONTH:月中的日期
Calendar.HOUR:小时
Calendar.MINUTE:分钟
Calendar.SECOND:秒
Calendar.DAY_OF_WEEK:星期
public void set(int field,int value)设置某个字段的值
public void add(int field,int amount)为某个字段增加/减少指定的值
public void setTime(Date date) 使用给定的 Date 设置此 Calendar 的时间。
boolean before(Object when) 判断当前日历对象的时间是否在指定日历对象时间之前
boolean after(Object when) 判断当前日历对象的时间是否在指定日历对象时间之后
9.Math类
- java.lang.Math(类): Math类包含执行基本数字运算的方法。
- 它不能创建对象,它的构造方法被“私有”了。因为他内部都是“静态方法”,通过“类名”直接调用即可。
Math类的常用方法:
public static int abs(int a) 获取参数a的绝对值:
public static double ceil(double a) 向上取整 例如:3.14 向上取整4.0
public static double floor(double a) 向下取整 例如:3.14 向下取整3.0
public static double pow(double a, double b) 获取a的b次幂
public static long round(double a) 四舍五入取整 例如:3.14 取整3 3.56 取整4
public static int max(int a, int b) 返回两个 int 值中较大的一个。
public static int min(int a, int b) 返回两个 int 值中较小的一个。
10.System类
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。
System类的常用方法:
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMillis() 返回当前时间(以毫秒为单位)
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 拷贝数组中的元素到另一个数组
参数1src: 源数组
参数2srcPos:源数组要拷贝的元素的起始索引(从哪个索引位置开始拷贝)
参数3dest: 目标数组
参数4destPos:目标数组接收拷贝元素的起始索引(从哪个索引位置开始接收)
参数5length:需要拷贝多少个元素(拷贝多少个)
11.BigInteger类
java.math.BigInteger 类,不可变的任意精度的整数。如果运算中,数据的范围超过了long类型后,可以使用BigInteger类实现,该类的计算整数是不限制长度的。
BigInteger类的构造方法:
- BigInteger(String value) 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。超过long类型的范围,已经不能称为数字了,因此构造方法中采用字符串的形式来表示超大整数,将超大整数封装成BigInteger对象。
BigInteger类成员方法:
BigInteger类提供了对很大的整数进行加add、减subtract、乘multiply、除divide的方法,注意:都是与另一个BigInteger对象进行运算。
方法声明 | 描述 |
---|---|
add(BigInteger value) | 返回其值为 (this + val) 的 BigInteger,超大整数加法运算 |
subtract(BigInteger value) | 返回其值为 (this - val) 的 BigInteger,超大整数减法运算 |
multiply(BigInteger value) | 返回其值为 (this * val) 的 BigInteger,超大整数乘法运算 |
divide(BigInteger value) | 返回其值为 (this / val) 的 BigInteger,超大整数除法运算,除不尽取整数部分 |
12.BigDecimal类
使用基本类型做浮点数运算精度问题;
-
对于浮点运算,不要使用基本类型,而使用"BigDecimal类"类型
-
java.math.BigDecimal(类):提供了更加精准的数据计算方式。
BigDecimal类构造方法:
构造方法名 | 描述 |
---|---|
BigDecimal(double val) | 将double类型的数据封装为BigDecimal对象 |
BigDecimal(String val) | 将 BigDecimal 的字符串表示形式转换为 BigDecimal |
注意:推荐使用第二种方式,第一种存在精度问题;
BigDecimal类常用方法:
BigDecimal类中使用最多的还是提供的进行四则运算的方法,如下:
方法声明 | 描述 |
---|---|
public BigDecimal add(BigDecimal value) | 加法运算 |
public BigDecimal subtract(BigDecimal value) | 减法运算 |
public BigDecimal multiply(BigDecimal value) | 乘法运算 |
public BigDecimal divide(BigDecimal value) | 除法运算 |
注意:对于divide方法来说,如果除不尽的话,就会出现java.lang.ArithmeticException异常。此时可以使用divide方法的另一个重载方法;
BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode): divisor:除数对应的BigDecimal对象;scale:精确的位数;roundingMode取舍模式
13.Arrays类
java.util.Arrays类:该类包含用于操作数组的各种方法(如排序和搜索)
Arrays类常用方法:
方法声明 | 描述 |
---|---|
public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
14.包装类的概述
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
15.Integer类
包装一个对象中的原始类型 int 的值
Integer类构造方法及静态方法:
方法名 | 说明 |
---|---|
public Integer(int value) | 根据 int 值创建 Integer 对象(过时) |
public Integer(String s) | 根据 String 值创建 Integer 对象(过时) |
public static Integer valueOf(int i) | 返回表示指定的 int 值的 Integer 实例 |
public static Integer valueOf(String s) | 返回保存指定String值的 Integer 对象 |
16.装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
- 装箱:从基本类型转换为对应的包装类对象。
- 拆箱:从包装类对象转换为对应的基本类型。
自动装箱与自动拆箱:
由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK 1.5)开始,基本类型与包装类的装箱、拆箱动作可以自动完成。
17.基本类型与字符串之间的转换
基本类型转换为String:
- 转换方式
- 方式一:直接在数字后加一个空字符串
- 方式二:通过String类静态方法valueOf()
String转换成基本类型 :
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
public static byte parseByte(String s)
:将字符串参数转换为对应的byte基本类型。public static short parseShort(String s)
:将字符串参数转换为对应的short基本类型。public static int parseInt(String s)
:将字符串参数转换为对应的int基本类型。public static long parseLong(String s)
:将字符串参数转换为对应的long基本类型。public static float parseFloat(String s)
:将字符串参数转换为对应的float基本类型。public static double parseDouble(String s)
:将字符串参数转换为对应的double基本类型。public static boolean parseBoolean(String s)
:将字符串参数转换为对应的boolean基本类型。