Math类
数学操作的工具类。
工具类的特点:
1、没有构造方法(私有了无参构造方法并不提供任何其他的构造方法)
//do not let anyone instance this class
2、所有的成员都被static修饰,可以直接使用类名调用
成员方法:
static double PI:圆周率
static int abs(int a):绝对的,求一个数的绝对值
static double ceil(double a):向上取整
static double floor(double a):向下取整
static long round(double a):四舍五入
static int max(int a, int b):求最大值
static int min(int a, int b):求最小值
static double pow(double a, double b): 求a的b次幂
static double random():求随机数 [0,1) 小数
System类
跟系统操作相关的工具类。
成员方法:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):数组拷贝
Object src: 源数组 int srcPos:要拷贝的元素的起始索引位置
Object dest:目的数组 int destPos:目的地数组接收元素的起始索引位置 int length:拷贝多少个元素
static long currentTimeMillis():当前时间毫秒
1604540404445: 现在时间 - 时间原点的毫秒值 1970年1月1日 8:0:0 --》 0毫秒
static void exit(int status):JVM退出 比return更猛
int status 状态码 : 非0即为异常退出
Object类
Object 类是所有Java代码的超类、根类、基类
所有的类都直接或者间接的继承于Object。
String toString()
直接输出对象名其实就是输出对象.toString()
源码分析:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
//返回 对象全类名@16进制的地址值
}
类的全类名 @ 16进制的地址值
java.util.Random @ 7f690630
getClass().getName() + "@" + Integer.toHexString(hashCode());
getClass():获取一个类的字节码对象
getName():获取名字
getClass().getName():获取此类对象字节码对象的名称 --> 获取此类对象的全类名 -> 包名.类名
Integer.toHexString(hashCode());
hashCode():对象在堆内存中的10进制地址值
Integer.toHexString(对象在堆内存中的10进制地址值):把10进制的数转化成16进制
Integer.toHexString(hashCode()):把对象10进制的地址值转化成16进制表示
直接输出对象一定看到的是对象的地址值,只要不是地址值一定是有问题
boolean equals(Object obj)
==:用来比较基本数据类型比较的是值是否相等
==:用来比较2个对象一定比较的是地址值
如果现在我想比较两个对象的时候不比较地址值而是比较对象的属性值,若属性值都相同则认为是同一个对象
Object equals方法
boolean equals(Object obj)
public boolean equals(Object obj) {
return (this == obj);
}
this == obj : 调用方法的对象 == 传递进来的对象
重写父类的equals可以改变equals方法的执行代码。
Objects类
关于对象操作的工具类
static String toString(Object o):调用对象的toString方法,但是提前对o对象进行非空校验
static String toString(Object o, String nullDefault):调用对象的toString方法,但是提前对o对象进行非空校验,如果o是null则把第二个参数返回给调用者
static boolean isNull(Object obj):判读obj对象是否是null,是null就true
static boolean nonNull(Object obj):判断obj对象是否不是null,不是null就是true
if(obj == null)
BigDecimal
Java中数学精准运算的类。
构造方法:
BigDecimal(double d)
BigDecimal(String str)
(String str):字符串的小数
四则运算:
BigDecimal add(BigDecimal augend):求和
BigDecimal subtract(BigDecimal augend):求差
BigDecimal multiply(BigDecimal augend):求乘
BigDecimal divide(BigDecimal augend):求商
BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
第一个参数:除数
第二个参数:保留小数点位数
第三个参数:舍入模式
进一法:BigDecimal.ROUND_UP
去尾法:BigDecimal.ROUND_FLOOR
四舍五入:BigDecimal.ROUND_HALF_UP
包装类
基本数据类型四类八种的数据是不可以直接存入到集合中的,如果集合的泛型血基本数据类型就会报错。
ArrayList<int> ❌
我们必须使用基本数据类型对应的包装类型。
包装类就是基本数据类型对应的引用数据类型。
byte --> Byte
short --> Short
int --> Integer
long --> Long
float --> Float
double --> Double
char --> Character
boolean --> Boolean
我们在定义集合的时候,要存储基本数据类型,集合的泛型必须写基本数据类型对应的包装类。
自动装箱和自动拆箱 --> 特性:简便了基本数据类型到引用数据类型之间的转换
//自动装箱: 基本数据类型 --> 引用数据类型
//Integer i = 100;
//static Integer valueOf(int i)
Integer i = Integer.valueOf(100);
//自动拆箱:引用数据类型 --> 基本数据类型
//int num = i;
//int intValue()
int num = i.intValue();
所有的包装类(除了Character)中都有一个 把字符串类型的基本数据类型值转换成对应的基本数据类型的方法
"100" "13.14" "true" --> 还原成基本数据类型的值
static 对应的基本数据类型 parseXxx(字符串类型的基本数据类型值)
Integer : static int parseInt("100");
Boolean : static boolean parseBoolean("true");
Arrays
关于数组操作的工具类
static int binarySearch(int[] a, int key):二分查找--> 必须要求有序
底层就是通过二分查找法完成的数据查找,寻找key参数第一次出现在数组的索引位置
static void sort(int[] a):按照自然排序的规则对数组元素进行排序, 从小到大
static String toString(int[] a):漂亮的把数组拼接起来
底层是通过 快速排序的算法完成的数组排序
二分查找的底层原理
前提:有序
原理:对数组进行砍半,判断中间值和目标值的大小关系,舍弃一半序列
递归
在方法内部调用方法本身
从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事
从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事
从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事
从前有座山,山里有座庙,庙里有个老和尚,老和尚给小和尚讲故事
使用递归必须关注点:
1、必须定义方法
2、递归必须有出口
3、递归一定要找到规律
4、在方法内部调用方法本身
5、再次调用方法的时候,实际参数要改变,改变的方向是往出口方向