BigInteger:
Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的, 最大为263-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类 都无能为力,更不用说进行运算了。
java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供
所有 Java 的基本整数 *** 作符的对应物,并提供 java.lang.Math 的所有相关方法。 另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、 位 *** 作以及一些其他 *** 作。
常用方法
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。
阶乘数较大的时候使用 :
public static void main(String[]args){ System.out.println(test(10)); System.out.println(test1(120)); System.out.println(Long.MAX_VALUE); } public static long test(long n){ long result=1; for(int i=1;i<=n;i++){ result*=i; } return result; } public static BigInteger test1(long n){ BigInteger result=new BigInteger("1"); for(int i=1;i<=n;i++){ result=result.multiply(new BigInteger(i+"")); } return result; }
public static void main (String[]args){ //必须传入字符串 BigInteger v1=new BigInteger("123"); BigDecimal v2=new BigDecimal(20); BigDecimal v3=new BigDecimal(20); //+ 加 BigDecimal result=v2.add(v3); System.out.println(result); //- 减 result=v2.subtract(v3); System.out.println(result); //* 乘 result=v2.multiply(v3); System.out.println(result); // / 除 result=v2.divide(v3); System.out.println(result); //% 取余 result=v2.remainder(v3); System.out.println(result);
Math 的一些常用API
// 绝对值 System.out.println(Math.abs(-3)); // 向上取整 , 有小数 就进位 System.out.println(Math.ceil(2.000000001)); // 向下取整 , 舍弃小数 System.out.println(Math.floor(2.999999999999)); // 返回最大的值 System.out.println(Math.max(2.3, 4.1)); // 返回最小的值 System.out.println(Math.min(2.3, 4.1)); // 开平方 System.out.println(Math.sqrt(16)); // 开立方 System.out.println(Math.cbrt(8)); // 返回一个 大于等于0 且小于 1 的随机数 // 本质就是Random的nextDouble方法 System.out.println(Math.random()); // 四舍六入五取偶 , 当小数大于0.5 就进1 , 小于 0.5 就舍弃,当小数为0.5整的时候,取偶数 // 2.5 = 2 , 3.5 = 4 , 2.50001 = 3 System.out.println(Math.rint(2.50001)); System.out.println(Math.rint(9.5)); // N的M次幂 , 2的3次幂 System.out.println(Math.pow(2, 3));
异常机制:
异常 就是错误的一种说法 在java中有一个专门模拟所有异常和错误的类 Throwable是所有异常类的父类
try...catch...:处理异常 一般用于客户端
throws 抛出异常 一般用于服务端
throw 异常源点
finally 必须执行的语句 不能单独使用 必须和 try 或 try..catch..一起使用
只有一种不执行情况 System.exit(0); 强制退出语句;
try...catch...:处理异常 一般用于客户端
try{
高风险代码
只要出错 就执行catch,try 中剩余代码不再执行
如果没出错,try就可以顺利执行完成 并且catch不再执行
}catch(异常类型 变量){
处理方案;
}
try{
* 高风险代码;
* }catch(异常类型 变量){
* 处理措施;
* }catch(异常类型 变量){
* 处理措施;
* }catch(异常类型 变量){
* 处理措施
* }
public static void main(String[]args){ //当try下面可能会出现多个异常的时候 并且每个异常对应的解决方案不同的时候 需要写多个catch进行不同的处理 //如果解决方案一致 则只写一个exception 即可 try{ new FileInputStream("123"); String stre=null; System.out.println(stre.trim()); }catch(FileNotFoundException e){ System.out.println("找不到指定文件"); }catch(IOException e){ }catch(NullPointerException e){ System.out.println("不能为空"); }catch (Exception e){ System.out.println("其他异常"); }
try{
*
* }catch(异常类型1 | 异常类型2 | 异常类型3 ...){
*
* }
*
* 同时捕捉多个异常 并且多个异常类直接用 | 隔开 并且 不能有继承关系
* 如果有继承关系 则直接写父类即可
public static void main(String[]args){ try{ new FileInputStream("123"); }catch(FileNotFoundException|NullPointerException e){ //TODO:handle exception
java 1.7新特征 自动关闭资源
try(开启资源语句 ;){
高风险代码
}catch (异常类型 变量){
处理方案
}
throws
throws 抛出异常 该方式并不会处理理解 一种提醒机制 告诉调用人员 这里可能会有错误
* 如果知道如何解决 则使用try解决问题 否则通过throws抛出问题
* 只要你的下家提醒了 要么你解决 要么抛给上家
Finally
finally 必须执行的语句块 不能单独使用 必须和 try或者try..catch..一起使用
* finally 只有一种不执行情况 遇到 System.exit(0);
public static void main(String[]args){ try{ FileInputStream fis=new FileInputStream("123"); System.out.println(fis); }catch(IOException e){ e.printStackTrace(); } finally{ System.out.println("必须执行");
方法覆写 不能比原方法有更宽泛的异常
子类方法抛出的异常 不能大于父类异常 也就是小于等于 父类异常
要么和父类抛出的异常一致 要么是父类抛出的异常的子类 或者直接不抛出异常
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)