JAVA中常用的API(持续更新)
前言
API(Application Programming Interface,应用程序编程接口)是一些预先定义的接口,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节(来自百度百科)。
看完百度百科对API的解释,总结一下:API是程序的接口, 里面封装着各种功能的 Java类。
正文
1. API文档使用
API文档下载:地址
简单说来,API就是一个帮助文档,它可以让你快速地了解到你想了解的java类及其属性和方法。
如图:
在文档中,你可以通过索引,精准查询并定位到你想详解的那个类。
2. JAVA常用API
2.1 String类(java.lang.String)
String类代表字符串, Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
字符串不变,它们的值在创建后不能被更改(String是一个类,是引用数据类型,而引用数据类型的变量存放的是对象的地址值,所以,这里不能改变的字符串值,指的是对象,String类的变量内容可以更改,因为它存的是对象的地址值)。
注意:
对象改变:改变的是对象的内容 ,修改了堆内存中对象的内容 (如数组中存放的值)
变量改变: 改变的是变量记录的地址值, 即改变的是栈内存中变量的值
举例:
String s = new String(“abc”);
这里等号左边的s是一个引用数据类型的变量,在栈内存中,它存放的是等号右边new出来的String类型的对象的地址值,这个对象在堆内存中。
String类常用的构造方法:
除却上述构造方法外,创建String对象最直接的方式 :
String s = “abc”;
Java程序中的所有字符串文字(例如"abc" )都会被实现为String的实例,在这里,abc是字符串常量,存放在堆内存中的字符串常量池中。
使用演示:
//以无参构造创建字符串对象,值为空的(注意,不是关键字null)
String s = new String();
//以字符数组为参数,创建字符串对象
char[] chars = {'a', 'b', 'c'};
String s1 = new String(chars);
//以字符串对象为参数,创建一个新的字符串对象
String s2 = new String(new String("张三"));
System.out.println(s);
System.out.println(s1);
System.out.println(s2);
//以无参构造创建字符串对象,值为空的(注意,不是关键字null)
String s = new String();
//以字符数组为参数,创建字符串对象
char[] chars = {'a', 'b', 'c'};
String s1 = new String(chars);
//以字符串对象为参数,创建一个新的字符串对象
String s2 = new String(new String("张三"));
System.out.println(s);
System.out.println(s1);
System.out.println(s2);
打印结果:
String类的常用方法(注意,这里列出的只是常用方法,API文档中除却这些方法外还有很多):
2.2 StringBuilder类(java.lang.StringBuilder)
StringBuilder,一个可变的字符序列。
它与String最大的区别:String不可变,而StringBuilder可变。
StringBuilder常用构造方法:
StringBuilder的常用方法:
注意:StringBuilder的append()方法是一个重载方法,如图:
另外需要注意:
1.StringBuilder类对象可变,比如当一个StringBuilder类对象使用append或者reverse方法时,即便方法会返回结果,但是这个对象的内容也会跟着改变!!
而String类对象不会变,当一个String类对象调用String类的方法,方法会返回一个结果,但这个String对象的内容不会发生任何改变,
2.String类对象的拼接操作,底层原理是使用StringBuilder的append方法。(步骤是先将String对象转为StringBuilder对象,然后调用StringBuilder的append方法,最后再调用StringBuilder的toString方法将StringBuilder对象转为String对象,完成拼接操作!)
StringBuilder sb = new StringBuilder(String s);//将String对象转为StringBuilder对象
sb.append(String s1);//调用StringBuilder的append方法
String s2 = sb.toString;//调用StringBuilder的toString方法将StringBuilder对象转为String对象
StringBuilder sb = new StringBuilder(String s);//将String对象转为StringBuilder对象
sb.append(String s1);//调用StringBuilder的append方法
String s2 = sb.toString;//调用StringBuilder的toString方法将StringBuilder对象转为String对象
2.3 Math类(java.lang.Math)
Math类中包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
查看Math类源码,如图:
源码中表示: Math类的构造方法是私有的,所以不允许创建Math类对象,但Math类中所有的公共方法都是静态的,可以通过类名.方法名()调用。
测试代码:
//Math m = new Math(); Math类的构造方法被private修饰,所以无法创建Math类对象
System.out.println(Math.abs(-10));//打印参数的绝对值
System.out.println(Math.ceil(10.4));//打印参数向上取整的结果
System.out.println(Math.floor(10.4));//打印参数向下取整的结果
System.out.println(Math.round(10.4));//打印参数四舍五入的结果
System.out.println(Math.round(10.6));//打印参数四舍五入的结果
System.out.println(Math.max(5, 7));//打印两个int值的较大值
System.out.println(Math.min(11, 99));//打印两个int值的较小值
System.out.println(Math.pow(3.0, 2.0));//打印 3.0 的2次幂
System.out.println(Math.random());//打印随机数,大于等于0.0,小于1.0
//Math m = new Math(); Math类的构造方法被private修饰,所以无法创建Math类对象
System.out.println(Math.abs(-10));//打印参数的绝对值
System.out.println(Math.ceil(10.4));//打印参数向上取整的结果
System.out.println(Math.floor(10.4));//打印参数向下取整的结果
System.out.println(Math.round(10.4));//打印参数四舍五入的结果
System.out.println(Math.round(10.6));//打印参数四舍五入的结果
System.out.println(Math.max(5, 7));//打印两个int值的较大值
System.out.println(Math.min(11, 99));//打印两个int值的较小值
System.out.println(Math.pow(3.0, 2.0));//打印 3.0 的2次幂
System.out.println(Math.random());//打印随机数,大于等于0.0,小于1.0
测试结果:
注意:有些方法实现了重载(即参数有多种),如图:
2.4 System类(java.lang.System)
System类包含几个有用的类字段和方法,它不能被实例化,但可以使用类名.方法名的方式调用静态方法。
System类提供的设施包括标准输入,标准输出和错误输出流; 访问外部定义的属性和环境变量; 一种加载文件和库的方法; 以及用于快速复制阵列的一部分的实用方法。
System类的常用方法:
小知识:System.exit(0)可以在循环中用来结束死循环(当然程序也会结束)
2.5 Object(java.lang.Object)
Object类是类层次结构的根。
每个类都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。
Object类的常用方法:
注意:
Object类的toString方法返回的是一个等于下列值的字符串(即类名@地址值):
getClass().getName() + ‘@’ + Integer.toHexString(hashCode())
所以,建议重写这个方法!(IDEA中 alt + insert键可快速重写)
2.6 Objects(java.util.Objects)
Objects 对象(Object)工具类,构造方法静态,无法被实例化,但可以使用类名.方法名调用方法。
此类由static用于在对象上操作的实用方法或在操作之前检查某些条件。 这些实用程序包括用于计算对象的哈希码,返回对象的字符串,比较两个对象以及检查索引或子范围值是否超出范围的null或null - null方法。
Objects类的常用方法:
注意事项:
1.当一个对象为null,调用Object类的toString()方法,会报空指针异常。但使用Objects的toString()方法并不会,它会打印一个null。
如图:
Student student1 = null;
Object o = student1;//空指针异常注意
Student sss = null;
String s2 = Objects.toString(sss);//这个并不会报异常,他会返回null
System.out.println(s2);
o.toString();//当对象为Null会报空指针异常,而Objects.toString(空对象)不报异常
Student student1 = null;
Object o = student1;//空指针异常注意
Student sss = null;
String s2 = Objects.toString(sss);//这个并不会报异常,他会返回null
System.out.println(s2);
o.toString();//当对象为Null会报空指针异常,而Objects.toString(空对象)不报异常
2.当一个对象为null,且使用Objects.toString(空对象,默认值),原对象内容不变(依旧为null)
Student student = null;
String s = Objects.toString(student, "空了,我给它默认值");//返回结果字符串,但原对象内容不变
System.out.println(s);//student对象为null,所以给默认值
// 一个对象为null,即便使用toString(Object,"")给它赋默认值,但用isNull判断依旧为null
System.out.println(Objects.isNull(student));//isNull方法判断对象是否为空,结果ture
System.out.println(Objects.nonNull(student));//nonNull方法判断对象是否不为空,结果false
Student student = null;
String s = Objects.toString(student, "空了,我给它默认值");//返回结果字符串,但原对象内容不变
System.out.println(s);//student对象为null,所以给默认值
// 一个对象为null,即便使用toString(Object,"")给它赋默认值,但用isNull判断依旧为null
System.out.println(Objects.isNull(student));//isNull方法判断对象是否为空,结果ture
System.out.println(Objects.nonNull(student));//nonNull方法判断对象是否不为空,结果false
2.7 BigDecimal(java.math.BigDecimal)
BigDecimal类,用来对超过16位有效位的数进行精确的运算。
在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。
BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。
常用构造方法(重载):
注意:建议使用String形参的构造方法!!不建议使用double形参的构造方法,因为其有一定的不可预知性,即给定一个double值,在计算机中其展示出来的可能不是你原来给定的那样精确的值。
BigDecimal num1 = new BigDecimal(15);//int形参
System.out.println(num1);
BigDecimal num2 = new BigDecimal(15L);//long形参
System.out.println(num2);
BigDecimal num3 = new BigDecimal(159.68);//double形参,给的是159.68,但结果不一样
System.out.println(num3);
BigDecimal num4 = new BigDecimal("15");//String形参
System.out.println(num4);
BigDecimal num1 = new BigDecimal(15);//int形参
System.out.println(num1);
BigDecimal num2 = new BigDecimal(15L);//long形参
System.out.println(num2);
BigDecimal num3 = new BigDecimal(159.68);//double形参,给的是159.68,但结果不一样
System.out.println(num3);
BigDecimal num4 = new BigDecimal("15");//String形参
System.out.println(num4);
经过测验,参数类型为double的构造方法的结果有一定的不可预知性!而String类型却是完全可知的(你给他什么数字,他就是什么),所以建议使用String类型的形参。
前面讲过,BigDecimal创建的是对象,而对象是不能使用±*/这样的符号来进行计算的,所以BigDecimal对象要想实现计算,需要使用这个类的方法。
BigDecimal常用方法:
使用示例:
//构造方法重载了,但常用String形参的构造方法创建,因为更精确
BigDecimal bd1 = new BigDecimal("0.17");
BigDecimal bd2 = new BigDecimal("0.3");
System.out.println(bd1.add(bd2));
System.out.println(bd1.subtract(bd2));
System.out.println(bd1.multiply(bd2));
//System.out.println(bd1.divide(bd2));当除不尽时会报错 ArithmeticException 算数异常
//用三个参数的divide方法 divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
//第二个参数表示精确的范围即小数点后几位,第三个参数可以设置进位模式等
System.out.println(bd1.divide(bd2, 5, RoundingMode.DOWN));
//构造方法重载了,但常用String形参的构造方法创建,因为更精确
BigDecimal bd1 = new BigDecimal("0.17");
BigDecimal bd2 = new BigDecimal("0.3");
System.out.println(bd1.add(bd2));
System.out.println(bd1.subtract(bd2));
System.out.println(bd1.multiply(bd2));
//System.out.println(bd1.divide(bd2));当除不尽时会报错 ArithmeticException 算数异常
//用三个参数的divide方法 divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
//第二个参数表示精确的范围即小数点后几位,第三个参数可以设置进位模式等
System.out.println(bd1.divide(bd2, 5, RoundingMode.DOWN));
注意:除法计算时,如果除不尽,要使用带三个参数的divide,如果用一个参数的divide会报算数异常
三个参数的divide方法中,第三个参数进位模式:
CEILING 圆形模式向正无穷大转弯。
DOWN 舍入模式向零舍入。
FLOOR 舍入模式向负无穷大转弯。
HALF_DOWN 四舍五入模式向“最近邻居”转弯,除非这两个邻居都是等距离的,在这种情况下,这是倒圆的。
HALF_EVEN 四舍五入模式向“最近邻居”转弯,除非这两个邻居都是等距离的,在这种情况下,朝向偶数邻居。
HALF_UP 四舍五入模式向“最近邻居”转弯,除非两个邻居都是等距的,在这种情况下是圆括弧的。
UNNECESSARY 舍入模式来确定所请求的操作具有精确的结果,因此不需要舍入。
UP 舍入模式从零开始。