java常用API

2020-04-28  本文已影响0人  上炼致知

java API概述:就是java替我们写好的一些类,封装了一些功能,我们仅仅只需知道如何使用即可;

Object

Object类概述

Object类是Java语言中的根类,即所有类的父类。它里面描述的所有方法子类都可以使用,所有类在创建对象的时候,最终找的父类就是Object;

equals方法

equals方法(Object类的equals方法,有很多类都会重写该方法),用于比较两个对象是否相同,它其实就是使用两个对象的内存地址比较

  
//源码
public boolean equals(Object obj) {
        return (this == obj);
}

toString方法

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值(在开发中也会经常重写它);

return getClass().getName() + "@" + Integer.toHexString(hashCode());


String

字符串是常量,它们的值在创建之后不能更改;即一旦这个字符串确定了,那么就会在内存区域中生成这个字符串,字符串本身不能改变,但str变量中记录的地址值是可以改变的;

String常见构造方法

public String();//空构造

public String(byte[] bytes);//把字节数组转成字符串(机器操作系统的默认字符集)
public String(byte[] bytes, int index, int length);//把字节数组的一部分转成字符串(机器操作系统默认的字符集)

public String(String original);//把字符串常量转成字符串

public String(char[] value);//把字符数组转成字符串
public String(char[] value, int index, int length);//把字符数组的一部分转成字符串

String常用方法

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

String substring(int beginIndex, int endIndex);//获取字符串的一部分
String substring(int beginInde);//获取字符串的一部分

boolean startsWith(String prefix);//判断一个字符串是不是以指定的前缀开始
boolean endswith(String suffix);//判断一个字符串是不是以指定的后缀结尾

boolean contains(String s);//判断一个字符串中是否包含另一个字符串
int indexOf(String str);//返回指定字符串在此字符串中第一次出现的索引

byte[] getBytes();//将字符串转成字节数组
char[] toCharArray();//将字符串转成字符数组

boolean equals(Object anObject);// 方法传递字符串,判断字符串中的字符是否完全相同,如果完全相同返回true,否则false
boolean equalsIgnoreCase(String anotherString);//传递字符串,判断字符串中的字符是否相同,忽略大小写

boolean isEmpty();//判断该字符串的内容是否为空的字符串""

char charAt(int index);//判断该字符串中指定位置上的字符

String subString(int start);//从指定位置开始到末尾结束,截取该字符串,返回新字符串
String subString(int start, int end);//从指定位置开始,到指定位置结束,截取该字符串,返回新字符串

int indexOf(int ch);//获取给定的字符,在该字符串中第一次出现的位置
int indexOf(int ch, int fromIndex);//从指定位置开始,获取给定的字符在该字符串中第一次出现的位置
int indexOf(String str);//获取给定的字符串,在该字符串中第一次出现的位置
int indexOf(String str, int fromIndex);//从指定位置开始,获取给定的字符串,在该字符串中第一次出现的位置

String replace(char old, char new);//在该字符串中,将给定的旧字符,用新字符替换
String replace(String old, String new);//在该字符串中,将给定的旧字符串,用新字符串替换

String trim();//去除字符串两端空格,中间的不会去除,返回一个新字符串

String toLowerCase();//把该字符串转换成小写字符串
String toUpperCase();//把该字符串转换成大写字符串

StringBuffer类

A thread-safe, mutable sequence of characters. A string buffer is like a String, but can be modified.

StringBuffer和String的区别:String是一个不可变的字符序列,StringBuffer是一个可变的字符序列;

StringBuffer的方法使用

StringBuffer sb = new StringBuffer();
sb.append("haha");//在原有字符串缓冲区内容基础上,添加新数据
sb.insert("2, "it");//在原有字符串缓冲区内容基础上,在指定位置插入新数据
sb.deleteCharAt(2);////在原有字符串缓冲区内容基础上,删除指定位置上的字符
sb.delete("1, 4");//在原有字符串缓冲区内容基础上,删除指定范围内的多个字符
sb.replace(1, 4, "cast");//在原有字符串缓冲区内容基础上,将指定范围内的多个字符 用给定的字符串替换
sb.reverse();//将字符串缓冲区的内容 反转  "abc"----"cba"
//以上返回值都是当前对象自己,所以说StringBuffer它可以改变字符序列的长度和内容          

subString(1);//从指定位置开始到末尾结束,截取该字符串缓冲区,返回新字符串(String)
subString(1, 4);//从指定位置开始,到指定位置结束,截取该字符串缓冲区,返回新字符串(String)          
sb.toString();//返回此序列中数据的字符串表示形式         

对象的方法链式调用

开发中就遇到调用一个方法后,返回一个对象的情况,然后使用返回的对象继续吊用方法,这种时候,我们就可以把代码写在一起,如:

StringBuffer sb = new StringBuffer();
String str = sb.append(true).append("hehe").toString();

StringBuilder

A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization.

StringBuilder也是一个可变字符串,此类提供一个与StringBuffer兼容的API,但不保证同步;它被设计为StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍);如果可能优先使用该类,因为在大多数实现中,它比StringBuffer快


正则表达式

正则表达式概念

正则表达式(Regular Expression,regex),是一个字符串,使用单个字符串来描述,用来定义匹配规则,匹配一系列符合某个句法规则的字符串;开发中正则表达式通常被用来检索、替换那些符合某个规则的文本。

正则表达式的匹配规则

正则表达式明确区分大小写;

字符 含义 例如
x 代表的是字符x 匹配规则为"a",需要匹配的字符串内容就是"a"
\\ 代表的是反斜线 匹配规则为"\\",需要匹配的字符串就是"\";
\t 制表符 匹配规则为"\t",对应的效果就是产生一个制表符的空间
\n 换行符 匹配规则为"\n",对应的效果就是换行,光标在原有位置的下一行
\r 回车符 匹配规则为"\r",对应的效果就是回车后的效果,光标到下一行行首
字符类 含义 例如
[abc] 代表的是字符a、b或c 匹配规则为"[abc]",需要匹配的内容就是字符a、或者b、或者c中的一个
[^abc] 代表的是除了a、b或c以外的任何字符 匹配规则为"[^abc]",需要匹配的内容为不是字符a、b、c中的任何一个字符
[a-zA-Z] 代表的是a到z或A到Z(含) 匹配规则为"[a-zA-Z]",需要匹配是一个大写或小写字母
[0-9] 代表的是数字0到9(含) 匹配规则为"[0-9]",需要匹配的是一个数字
[a-zA-Z_0-9] 代表字母或数字或下划线 匹配的是一个字母或数字或下划线
预定义字符类 含义 例如
. 代表的是任何字符 匹配规则为".",匹配的是一个任意字符
\d 代表的是数字0到9(含) 匹配规则为"\d",需要匹配的是一个数字
\w 代表字母或下划线或数字 匹配规则为"\w",需要匹配的是一个字母或下划线或数字
边界匹配器 含义 例如
^ 代表的是行的开头 匹配规则为"^[abc][0-9]$",匹配的内容从[abc]这个位置开始,相当于左双引号
$ 代表的是行尾 匹配规则为"^[abc][0-9]$",匹配的内容以[0-9]这个结束,相当于右双引号
\b 代表的是单词边界 匹配规则为"\b[abc]\b",代表字母a或b或c两边需要的是非单词字符
数量词 含义 例如
x? 代表的是x出现0次或1次 匹配规则为"a?",匹配的内容是一个字符a,或者一个a都没有
x* 代表的是x出现0次或多次 匹配规则为"a*",匹配的内容是多个a,或者一个a也没有
x+ 代表的是x出现一次或多次 匹配规则为"a+",匹配的内容是多个a,或者一个a
x{n} 代表的是x恰好出现n次 匹配规则为"a{5}",匹配的内容是5个字符a
x{n,} 代表的是x出现至少n次 匹配规则为"a{5,}",匹配的内容是最少有5个字符a
x{n,m} 代表的是x出现至少n次,但是不超过m次 匹配规则为"x{5, 8}",匹配的内容是有5个a到8个a之间

字符串中涉及正则表达式的常用方法

正则表达式易错练习

//匹配正整数
\\d+

//匹配正小数
\\d+\\.\\d+
  
//匹配负整数
-\\d+  
  
//匹配负小数
\\-d+\\.\\d+
  
//匹配保留两位小数的正数
\\d+\\.\\d{2}  

//匹配保留1-3位小数的正数
\\d+\\.\\d{1,3}

/**
 *检查邮箱地址是否合法
 *@前 数字字母_个数不少于1个
 *@后 数字字母 个数不少于1个
 *.后 字母 
 */
String email = "abc123@sina.com";
String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-z]+)+";
boolean flag = email.matches(regex);

//获取ip地址192.168.0.0中的每段数字
\\.

Date

Date类概述

Date类表示特定的瞬间,精确到毫秒

//1000毫秒=1秒
//时间远点 1970年1月1日,0:00:00 英国格林威治

//获取当前日期的毫秒值,返回值long类型
System.currentTimeMillis();//1588866116649(当前)

Date类的构造方法

Date的get和set方法


DateFormat

DateFormat类概述

DateFormat是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间,日期/时间格式化子类(如SimpleDateFormat类)允许进行格式化(即日期-->文本)、解析(文本-->日期)和标准化;

通过这个类可以完成日期和文本之间的转换;

DateFormat类的作用

可以将一个Date对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转换为一个Date对象

指定格式的具体规则参照SimpleDateFormat类的说明,规则是在一个字符串中,会将以下字母替换成对应的时间组成部分,剩余内容原样输出:

字母(以常用的为例) 替换(将字母替换,其余原样输出) 模式
y 替换为年 年份:yyyy
M 替换为月 月份:MM
d 替换为日 月中的天数:dd
H 替换为时 0-23小时:HH
m 替换为分 小时中的分钟:mm
s 替换为妙 秒:ss

SimpleDateFormat构造方法

DateFormat是抽象类,实际使用通过其子类SimpleDateFormat来创建对象;

DateFormat类常用方法


Calendar

Calendar类概念

Calendar是日历类,在Date后出现,替换掉了许多Date的方法,该类将所有可能用到的时间信息封装为静态成员变量,方便获取;

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象;如下:

Calendar calendar = Calendar.getInstance();(使用默认时区和语言环境获得一个日历对象)

Calendar类常用方法

日期相关类练习

/**
 * 求出自己已经出生多少天
 * 1. 获取当前时间对应的天数
 * 2. 获取自己出生日期对应的天数
 * 3. 两个时间相减
 */
System.out.println("请输入出生日期,格式要求:yyyy-MM-dd");
//获取出生日期,键盘输入
String birthDayString = new Scanner(System.in).next();
//创建SimpleDateFormat对象,写日期模式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
//调用parse方法,字符串转成日期对象
Date birthDayDate = simpleDateFormat.parse(birthDayString);

//获取今天的日期对象
Date todayDate = new Date();

//将两个日期转成毫秒值,Date类的getTime()
long birthDayMilliSecond = birthDayDate.getTime();
long todayDateMilliSecond = todayDate.getTime();
long milliSecond = todayDateMilliSecond - birthDayMilliSecond;

System.out.println(milliSecond/1000/3600/24);
/**
 * 判断是否闰年
 * 日历设置到指定年份的3月1日,add向前偏移1天,获取天数,29为闰年
 */
System.out.println("请输入年份");
int year = new Scanner(System.in).nextInt();

Calendar calendar = Calendar.getInstance();
//将日历设到指定年的3月1日
calendar.set(year, Calendar.MARCH, 1);
//日历add方法,向前偏移1天
calendar.add(Calendar.DAY_OF_MONTH, -1);
//get方法获取day of month
int day = calendar.get(Calendar.DAY_OF_MONTH);
if (day == 29) {
    System.out.println("该年是闰年");
} else {
    System.out.println("该年不是闰年");
}

基本数据类型包装类

基本数据类型对象包装类概述

实际程序开发中,用户在界面输入的数据往往都是字符串类型的,我们需要把字符串数据根据需求转换成指定的基本数据类型;Java中提供了相应的对象来解决该问题,基本数据类型对象包装类。

java将基本数据类型值封装成了对象,以提供更多的操作基本数值的功能;

8种基本数据类型对应的包装类

字节型 短整型 整型 长整型 字符型 布尔型 浮点型 浮点型
byte short int long char boolean float double
Byte Shotr Integer Long Character Boolean Float Double

基本数据类型对象包装类特点:用于在基本数据和字符串之间进行转换

基本类型和对象转换

以int类型与Integer对象转换为例子,其他基本类型转换方式相同;

Integer类其他方法

/**
 *十进制转二进制
 *十进制转八进制
 *十进制转十六进制
 */
System.out.println(Integer.toBinaryString(5));//101
System.out.println(Integer.toOctalString(9));//11
System.out.println(Integer.toHexString(17));//11

/**
 * 获取int的最大值和最小值
 */
System.out.println(Integer.MAX_VALUE);//2147483647
System.out.println(Integer.MIN_VALUE);//-2147483648

自动装箱拆箱

在需要的情况下,基本类型与包装类型可以通用;有些时候必须使用引用数据类型时,可以传入基本数据类型。比如:基本类型可以使用运算符直接进行计算,但是引用类型不可以,而基本类型包装类作为引用类型的一种却可以计算,原因在于,Java“偷偷地”自动进行了对象向基本数据类型的转换。

相应的,引用数据类型变量的值必须是new出来的内存空间地址值,而我们可以将一个基本类型的值赋值给一个基本类型包装类的引用。原因同样在于java又“偷偷地”自动进行了基本数据类型向对象的转换。

自动装箱和自动拆箱练习

Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
System.out.println(i.equals(j));//true

//数据在byte(-128~127)范围内,jvm不会重新new对象
Integer ii = 127;
Integer jj = 127;
System.out.println(ii == jj);//true
System.out.println(jj.equals(jj));//true

//自动装箱
Integer a = 500;
Integer b = 500;
System.out.println(a == b);//false
System.out.println(a.equals(b));//true

System类

概念

System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作;

System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象,System类中都是static方法,类名访问即可;


Math类

概念

Math类是包含用于执行基本数学运算方法的数据工具类,如初等函数、对数、平方根、三角函数等。类似这样的工具类,其所有方法均为静态方法,并且一般不会创建对象,如System类。

常用方法


Arrays类

概念

此类包含用来操作数组(比如排序和搜索)的各种方法;

常用方法


大数运算

BigInteger

Java中最long型为最大整数类型,对于超过long型的整数已经不能称为整数了,它们被封装成BigInteger对象,在BigInteger类中,实现四则运算符都是用方法来实现,并不是用运算符;

BigInteger构造方法

BigInteger四则运算

BigInteger big1 = new BigInteger("12345678909876543210");
BigInteger big2 = new BigInteger("98765432101234567890");

/**
 * add 实现加法运算
 */
BigInteger bigAdd = big1.add(big2);
System.out.println(bigAdd);//111111111011111111100
/**
 * subtract 实现减法运算
 */
BigInteger bigSub = big1.subtract(big2);
System.out.println(bigSub);//86419753191358024680
/**
 * multiply 实现乘法运算
 */
BigInteger bigMul = big1.multiply(big2);
System.out.println(bigMul);//1219326312117055326552354825111263526900
/**
 * divide 实现除法运算
 */
BigInteger bigDiv = big1.divide(big2);
System.out.println(bigDiv);//0

BigDecimal

如果使用double、float等类型进行运算很容易丢失精度,造成数据的不准确性;

System.out.println(0.09 + 0.01);//0.09999999999999999
System.out.println(1.0 - 0.32);//0.6799999999999999
System.out.println(1.015 * 100);//101.49999999999999
System.out.println(1.301 / 100);//0.013009999999999999

因此在涉及金额等商业计算中应该使用BigDecimal类的方式实现浮点数据的高精度计算

BigDecimal的加、减、乘三则运算

BigDecimal big1 = new BigDecimal("0.09");
BigDecimal big2 = new BigDecimal("0.01");

/**
 * add 实现加法运算
 */
BigDecimal bigAdd = big1.add(big2);
System.out.println(bigAdd);//0.10
/**
 * subtract 实现减法运算
 */
BigDecimal bigSub = big1.subtract(big2);
System.out.println(bigSub);//0.08
/**
 * multiply 实现乘法运算
 */
BigDecimal bigMul = big1.multiply(big2);
System.out.println(bigMul);//0.0009

BigDecimal的除法运算

对于浮点数据的除法运算和整数不同,可能会出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式;

上一篇下一篇

猜你喜欢

热点阅读