.1 Biginteger
1.1 概述
1、Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的, 最大为263-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。
2、java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供
所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位操作以及一些其他操作。
1.2 常用方法
public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数 相除只保留整数部分。
BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。
1.3 使用
-
BigInteger abs() 返回大整数的绝对值
-
BigInteger add(BigInteger val) 返回两个大整数的和
-
BigInteger and(BigInteger val) 返回两个大整数的按位与的结果
-
BigInteger andNot(BigInteger val) 返回两个大整数与非的结果
-
BigInteger divide(BigInteger val) 返回两个大整数的商
-
double doubleValue() 返回大整数的double类型的值
-
float floatValue() 返回大整数的float类型的值
-
BigInteger gcd(BigInteger val) 返回大整数的最大公约数
-
int intValue() 返回大整数的整型值
-
long longValue() 返回大整数的long型值
-
BigInteger max(BigInteger val) 返回两个大整数的最大者
-
BigInteger min(BigInteger val) 返回两个大整数的最小者
-
BigInteger mod(BigInteger val) 用当前大整数对val求模
-
BigInteger multiply(BigInteger val) 返回两个大整数的积
-
BigInteger negate() 返回当前大整数的相反数
-
BigInteger not() 返回当前大整数的非
-
BigInteger or(BigInteger val) 返回两个大整数的按位或
-
BigInteger pow(int exponent) 返回当前大整数的exponent次方
-
BigInteger remainder(BigInteger val) 返回当前大整数除以val的余数
-
BigInteger leftShift(int n) 将当前大整数左移n位后返回
-
BigInteger rightShift(int n) 将当前大整数右移n位后返回
-
BigInteger subtract(BigInteger val)返回两个大整数相减的结果
-
byte[] toByteArray(BigInteger val)将大整数转换成二进制反码保存在byte数组中
-
String toString() 将当前大整数转换成十进制的字符串形式
-
BigInteger xor(BigInteger val) 返回两个大整数的异或
2 Math
2.1 概述
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回
值类型一般为double型。
2.2 常用方法
abs 绝对值 acos,asin,atan,cos,sin,tan 三角函数 sqrt 平方根
pow(double a,doble b) a的b次幂 log 自然对数
exp e为底指数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度—>角度
toRadians(double angdeg) 角度—>弧度
适用于int long float double的方法。调用形式:abs(int a, int b)
方法名 解释
abs 绝对值
max 最大值
min 最小值
适用于int long 这几个是java1.8新增的方法,主要是对一些 类型溢出异常进行抛出处理。调用形式:addExact(int a,int b)
方法名 解释
addExact 加
substractExact 减
multiplyExact 乘
incrementExact 自增
decrementExact 自减
negateExact 负运算:1->-1;-2->2
三角函数相关的double ,这里只部分罗列。调用形式:cos(double a)
cos,sin,tan,acos,asin,atan...
平方根:sqrt(double a) 立方根:cbrt(double a)
幂,指数,对数相关。除了pow(double a,double b),其余调用形式为log(double a)
方法名 解释
exp 以自然对数e为底,求幂
expml 以自然对数e为底的幂-1
log 取自然对数e为底的对数
log10 取10为底的对数
取余的结果有很多标准。
Math.IEEEremainder(double a,double b) 使用的是IEEE的标准进行取余。
类库里还有其他方法:
方法名 解释
ceil(double a) 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。-3.1->-3.0;3.1->4.0
floor(double a) 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
round(float a) 最接近参数的 int
round(double a) 最接近参数的 long
rint(double a) 返回最接近参数并等于某一整数的 double 值
round(double a) 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0
2.3 使用方式
3 异常机制
3.1 碰到过的异常
1空指针异常
2 下标越界异常
3类型转换异常
4 栈内存溢出
3.2 概述
异常是Java中提供的一种识别及响应错误情况的一致性机制。有效地异常处理能使程序更加健壮、易于调试。
异常发生的原因有很多,比如:
- 用户输入了非法数据
- 要打开的文件不存在
- 网络通信时连接中断
- JVM内存溢出
- 这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
3.3 继承体系
3.4 Error
系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理。
比如:OOM(内存溢出错误)、VirtualMachineError(虚拟机错误)、StackOverflowError(堆栈溢出错误)等,一般发生这种情况,JVM会选择终止程序。
3.5 Exception
3.5.1 概述
Exception是所有异常类的父类。分为非RuntimeException和RuntimeException 。
- 非RuntimeException
指程序编译时需要捕获或处理的异常,如IOException、自定义异常等。属于checked异常。 - RuntimeException
指程序编译时不需要捕获或处理的异常,如:NullPointerException等。属于unchecked异常。一般是由程序员粗心导致的。如空指针异常、数组越界、类型转换异常等。 - 5.2 常用方法
3.5.3 Try ....catch
3.5.4 Throws
抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常。下面它们之间的异同。
一、系统自动抛异常
当程序语句出现一些逻辑错误、主义错误或类型转换错误时,系统会自动抛出异常:(举个栗子)
public static void main(String[] args) {
int a = 5, b =0;
System.out.println(5/b);
//function();
}
系统会自动抛出ArithmeticException异常
或者
public static void main(String[] args) {
String s = "abc";
System.out.println(Double.parseDouble(s));
//function();
}
系统会自动抛出NumberFormatException异常。
二、throw
throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
//function();
}
运行时,系统会抛出异常:
Exception in thread "main" java.lang.NumberFormatException at......
三、throws
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
public void function() throws Exception{......}
当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理
public class testThrows {
public static void function() throws NumberFormatException {
String s = "abc";
System.out.println(Double.parseDouble(s));
}
public static void main(String[] args) {
try {
function();
} catch (NumberFormatException e) {
System.err.println("非数据类型不能强制类型转换。");
//e.printStackTrace();
}
}
}
运行结果:
非数据类型不能强制类型转换。
四、throw与throws的比较
throws出现在方法函数头;而throw出现在函数体。
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
3.5.5 Finally
必须执行的语句块 ,不能单独使用 必须和try 或者try...catch 一块使用
finally 只有一种不执行的情况 就是system.exit();
3.5.6 不能有更宽泛的异常
3.6 自定义异常类
3.6.1 需求
完成用户登陆功能
传入用户信息,校验用户名和密码是否正确,如果正确则返回该用户所有信息,反之则提示错误信息
3.6.2 实体类
3.6.3 异常类
3.6.4 controller
3.6.5 Date
3.6.6 Dao
3.6.7 Service