当前位置: 首页 > ds >正文

javaSE(从0开始)day13

目录

一、javaAPI常用类:

1、BigInteger:java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个int[]数组来模拟一个非常大的整数

(1)BigInteger的加法:add()

(2)BigInteger的减法:subtract()

(3)BigInteger的乘法:multiply()

(4)BigInteger的除法:divide()

2、 BigDecimal:BigDecimal和BigInteger类似,BigDecimal可以表示一个任意大小且精度完全准确的浮点数。

(1)BigDecimal一个精确的浮点数,注意构造方法一定用字符串。(传入字符串精确 ,浮点数以不精确的浮点数传入不精确)

(2)BigDecimal常用方法:

      (2.1)scale() 获取小数点后面有几位

      (2.2)stripTrailingZeros() 去除末尾的0 注意整形去除后面的0返回为负数 表示为整数有几个0, 对整形去0  会出现负值(表示为整数有几个0)

      (2.3)setScale(1,RoundingMode.HALF_UP);设置小数位数,并设置进位规则 四舍五入

      (2.4)setScale(1, RoundingMode.DOWN);直接截取

      (2.5)加减乘除:加法:add()  减法:subtract()  乘法:multiply()    除法:divide()

      (2.6)BigDecimal使用divide进行除法运算,可能存在10进制无法准确表达的小数,出异常 system.out.println("除:"+bd1.divide(bd2)):不推荐 推荐使用多参,设置小数位数和截取方式System.out.println("除:" + bd1.divide(bd2, 2, RoundingMode.DOWN));

      (2.7)对BigDecimal 做除法的同时求余数

(3)大小内容比较:

 二、常用工具类:

1、Math类:

(1)求绝对值:Math.abs();

(2)取最大或最小值:Math.max(100, 99); // 100   Math.min(1.2, 2.3); // 1.2

(3)计算x的y次方:Math.pow(2, 10); // 2的10次方=1024

(4)计算x的开平方:Math.sqrt(2); // 1.414...

(5)计算e的x次方:Math.exp(2); // 7.389...

(6)计算以10为底的对数:Math.log10(100); // 2

(7)三角函数:Math.sin(3.14); // 0.00159...Math.cos(3.14); // -0.9999...Math.tan(3.14); // -0.0015...Math.asin(1.0); // 1.57079...Math.acos(1.0); // 0.0

(8)Math还提供了几个数学常量:Math.PI; Math.E; // 2.7182818...Math.sin(Math.PI / 6); // sin(π/6) = 0.5

(9)随机数函数:Math.random(); // 0.53907 每次都不一样,生成一个随机数x,x的范围是0 <= x < 1;

2、Random类(伪随机数): Random用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。要生成一个随机数,可以使用nextInt()   nextLong()、nextFloat()、nextDouble():

(1)获取随机数对byte[]数组填充:

(2)种子相同,随机数类相同伪随机:

3、SecureRandom类:有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的:

三、枚举:为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举类:

1、枚举的好处:enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误。其次,不可能引用到非枚举的值,因为无法通过编译。最后,不同类型的枚举不能互相比较或者赋值,因为类型不符。

2、枚举的定义:使用enum修饰类,使用public staticfinal修饰(可省略不写)常量

3、枚举的比较:

4、枚举的类型:

5、enum枚举的方法:

(1)name()方法:作用:返回常量名,

(2) ordinal()方法:作用:返回定义的常量的顺序,从0开始计数,

 (3)定义private的构造方法:如果不小心修改了枚举的顺序,编译器是无法检查出这种逻辑错误的。要编写健壮的代码,就不要依靠ordinal()的返回值。因为enum本身是class,所以我们可以定义private的构造方法,并且,给每个枚举常量添加字段,这样就无需担心顺序的变化,新增枚举常量时,也需要指定一个int值。

(4)toString()方法:作用:默认情况下,对枚举常量调用toString()会返回和name()一样的字符串。但是,toString()可以被覆写,而name()则不行。我们可以给Weekday添加toString()方法进行重写,目的是在输出时更有可读性。


一、javaAPI常用类:

1、BigInteger:java.math.BigInteger就是用来表示任意大小的整数。BigInteger内部用一个int[]数组来模拟一个非常大的整数

BigInteger bi = new BigInteger("1234567890");

// 2867971860299718107233761438093672048294900000
System.out.println(bi.pow(5));   //bi的5次幂j 

(1)BigInteger的加法:add()
(2)BigInteger的减法:subtract()
(3)BigInteger的乘法:multiply()
(4)BigInteger的除法:divide()

 BigInteger bg1=new BigInteger("10");

 BigInteger bg2=new BigInteger("2");

//加 

BigInteger add=bg1.add(bg2);

System.out.println(add);

//减

BigInteger subtract =bg1.subtract(bg2);

System.out.println(subtract);

//乘

BigInteger multiply=bg1.multiply(bg2);

System.out.println(multiply);

//除

BigInteger divide =bg1.divide(bg2);

System.out.println(divide);

2、 BigDecimal:BigDecimalBigInteger类似,BigDecimal可以表示一个任意大小且精度完全准确的浮点数。

(1)BigDecimal一个精确的浮点数,注意构造方法一定用字符串。(传入字符串精确 ,浮点数以不精确的浮点数传入不精确)

BigDecimal bd1=new BigDecimal("0.1");

BigDecimal bd2=new BigDecimal("0.2");

System.out.println(bd1.add(bd2));   //0.3

(2)BigDecimal常用方法:
      (2.1)scale() 获取小数点后面有几位
      (2.2)stripTrailingZeros() 去除末尾的0 注意整形去除后面的0返回为负数 表示为整数有几个0, 对整形去0  会出现负值(表示为整数有几个0)
      (2.3)setScale(1,RoundingMode.HALF_UP);设置小数位数,并设置进位规则 四舍五入
      (2.4)setScale(1, RoundingMode.DOWN);直接截取
      (2.5)加减乘除:加法:add()  减法:subtract()  乘法:multiply()    除法:divide()
      (2.6)BigDecimal使用divide进行除法运算,可能存在10进制无法准确表达的小数,出异常 system.out.println("除:"+bd1.divide(bd2)):不推荐 推荐使用多参,设置小数位数和截取方式System.out.println("除:" + bd1.divide(bd2, 2, RoundingMode.DOWN));
      (2.7)对BigDecimal 做除法的同时求余数

BigDecimal bd1 = new BigDecimal("10.0");

BigDecimal bd2 = new BigDecimal("3.0");

BigDecimal[] bds = bd1.divideAndRemainder(bd2);

System.out.println(Arrays.toString(bds));

        BigDecimal bd1=new BigDecimal("123.45");BigDecimal bd2=new BigDecimal("123.45000");BigDecimal bd3=new BigDecimal("12345000");//scale 获取小数点后面有几位System.out.println(bd1.scale());System.out.println(bd2.scale());System.out.println(bd3.scale());//stripTrailingZeros() 去除末尾的0 注意整形去除后面的0返回为负数 表示为整数有几个0System.out.println(bd1.stripTrailingZeros());System.out.println(bd2.stripTrailingZeros());//对整形去0  负值System.out.println(bd3.stripTrailingZeros());//设置小数位数,并设置进位规则 四舍五入BigDecimal upBd=bd2.setScale(1,RoundingMode.HALF_UP);System.out.println(upBd);//直接截取BigDecimal subBd=bd2.setScale(1, RoundingMode.DOWN);System.out.println(subBd);
(3)大小内容比较:

BigDecimal bd1 = new BigDecimal("10.0");

BigDecimal bd2 = new BigDecimal("10");

System.out.println("地址相等:"+(bd1==bd2)); //false

System.out.println("内容相等:"+(bd1.equals(bd2))); //false

System.out.println("大小相等:"+(bd1.compareTo(bd2)==0)); //true

 二、常用工具类:

1、Math类:

(1)求绝对值:Math.abs();
(2)取最大或最小值:Math.max(100, 99); // 100   Math.min(1.2, 2.3); // 1.2
(3)计算x的y次方:Math.pow(2, 10); // 2的10次方=1024
(4)计算x的开平方:Math.sqrt(2); // 1.414...
(5)计算e的x次方:Math.exp(2); // 7.389...
(6)计算以10为底的对数:Math.log10(100); // 2
(7)三角函数:Math.sin(3.14); // 0.00159...
Math.cos(3.14); // -0.9999...
Math.tan(3.14); // -0.0015...
Math.asin(1.0); // 1.57079...
Math.acos(1.0); // 0.0
(8)Math还提供了几个数学常量:Math.PI; Math.E; // 2.7182818...Math.sin(Math.PI / 6); // sin(π/6) = 0.5
(9)随机数函数:Math.random(); // 0.53907 每次都不一样,生成一个随机数x,x的范围是0 <= x < 1;

2、Random类(伪随机数): Random用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。要生成一个随机数,可以使用nextInt()   nextLong()nextFloat()nextDouble()

(1)获取随机数对byte[]数组填充:

byte[] bytes=new byte[10];

r1.nextBytes(bytes);// 获取一些随机数对byte数组进行填充 System.out.println(Arrays.toString(bytes));

(2)种子相同,随机数类相同伪随机:
package com.yuan.randomClass;import java.util.Random;public class Demo02 {public static void main(String[] args) {//种子相同,随机数类相同伪随机Random r1=new Random(123534654);for (int i = 0; i <20 ; i++) {System.out.print(r1.nextInt(10)+" ");}System.out.println("===============");Random r2=new Random(123534654);for (int i = 0; i <20 ; i++) {System.out.print(r1.nextInt(10)+" ");}}
}

3、SecureRandom类:有伪随机数,就有真随机数。实际上真正的真随机数只能通过量子力学原理来获取,而我们想要的是一个不可预测的安全的随机数,SecureRandom就是用来创建安全的随机数的:

  安全原因:SecureRandom无法指定种子,它使用RNG(random number generator)算法。JDK的SecureRandom实际上有多种不同的底层实现,有的使用安全随机种子加上伪随机数算法来产生安全的随机数,有的使用真正的随机数生成器。实际使用的时候,可以优先获取高强度的安全随机数生成器,如果没有提供,再使用普通等级的安全随机数生成器:

package com.yuan.randomClass;import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;public class Demo03 {public static void main(String[] args) {//真随机数  安全 种子有多种随机算法实现 不可破解SecureRandom sr;try {//安全等级更高的随机数获取sr=SecureRandom.getInstanceStrong();} catch (NoSuchAlgorithmException e) {e.printStackTrace();sr =new SecureRandom();}System.out.println("随机的整数:"+sr.nextInt()); //整形范围内System.out.println("随机的整数:"+sr.nextInt(10)); //0-指定范围内System.out.println("随机的Boolean:"+sr.nextBoolean());System.out.println("随机小数"+sr.nextDouble());byte[] bytes=new byte[10];sr.nextBytes(bytes);// 获取一些随机数对byte数组进行填充System.out.println(Arrays.toString(bytes));}
}

三、枚举:为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举类:

1、枚举的好处:enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误。其次,不可能引用到非枚举的值,因为无法通过编译。最后,不同类型的枚举不能互相比较或者赋值,因为类型不符。

2、枚举的定义:使用enum修饰类,使用public staticfinal修饰(可省略不写)常量

public class Weekday {public static final int SUN = 0;public static final int MON = 1;public static final int TUE = 2;public static final int WED = 3;public static final int THU = 4;public static final int FRI = 5;public static final int SAT = 6;
}

3、枚举的比较:

if (day == Weekday.FRI) { // ok!
}

if (day.equals(Weekday.SUN)) { // ok, but more code!
}

4、枚举的类型:

通过enum定义的枚举类,和其他的class有什么区别?答案是没有任何区别。enum定义的类型就是class,只不过它有以下几个特点:

  • 定义的enum类型总是继承自java.lang.Enum,且无法被子类继承;
  • 只能定义出enum的实例,而无法通过new操作符创建enum的实例;
  • 定义的每个实例都是引用类型的唯一实例;
  • 可以将enum类型用于switch语句。

例如,我们定义的Color枚举类:

public enum Color {
    RED, GREEN, BLUE;
}

5、enum枚举的方法:

(1)name()方法:作用:返回常量名,

作用:返回常量名,

(2) ordinal()方法:作用:返回定义的常量的顺序,从0开始计数,

int n = Weekday.MON.ordinal(); // 1

 (3)定义private的构造方法:如果不小心修改了枚举的顺序,编译器是无法检查出这种逻辑错误的。要编写健壮的代码,就不要依靠ordinal()的返回值。因为enum本身是class,所以我们可以定义private的构造方法,并且,给每个枚举常量添加字段,这样就无需担心顺序的变化,新增枚举常量时,也需要指定一个int值。
public class Main {public static void main(String[] args) {Weekday day = Weekday.SUN;if (day.dayValue == 6 || day.dayValue == 0) {System.out.println("Work at home!");} else {System.out.println("Work at office!");}}
}enum Weekday {MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6), SUN(0);public final int dayValue;private Weekday(int dayValue) {this.dayValue = dayValue;}
}
(4)toString()方法:作用:默认情况下,对枚举常量调用toString()会返回和name()一样的字符串。但是,toString()可以被覆写,而name()则不行。我们可以给Weekday添加toString()方法进行重写,目的是在输出时更有可读性。
public class Main {public static void main(String[] args) {Weekday day = Weekday.SUN;if (day.dayValue == 6 || day.dayValue == 0) {System.out.println("Today is " + day + ". Work at home!");} else {System.out.println("Today is " + day + ". Work at office!");}}
}enum Weekday {MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");public final int dayValue;private final String chinese;private Weekday(int dayValue, String chinese) {this.dayValue = dayValue;this.chinese = chinese;}@Overridepublic String toString() {return this.chinese;}
}

http://www.xdnf.cn/news/16081.html

相关文章:

  • 通过TPLink路由器进行用户行为审计实战
  • 【图像处理基石】什么是相机的内外参数?
  • springcloud -- 微服务02
  • 关于 URL 中 “+“ 号变成空格的问题
  • 数据结构:找出字符串中重复的字符(Finding Duplicates in a String)——使用哈希表
  • HTTP性能优化实战技术详解(2025)
  • Linux进程核心机制:状态、优先级与上下文切换详解
  • Redis进阶--缓存
  • AQS 抽象队列同步器 资源竞争-排队等待
  • C++实战案例:从static成员到线程安全的单例模式
  • Django视图与路由系统
  • Elasticsearch、Solr 与 OpenSearch 搜索引擎方案对比分析及选型建议
  • 漏洞扫描 + 渗透测试:双轮驱动筑牢网络安全防线
  • 计算机发展史:个人计算机时代的多元融合与变革
  • cartographer内置评估工具使用流程:评估前端优化的误差
  • XSS学习总结
  • 【LeetCode数据结构】栈的应用——有效的括号问题详解
  • iOS 加固工具有哪些?快速发布团队的实战方案
  • Django Ninja
  • 【web 自动化】-6- 数据驱动DDT
  • AWS Certified Cloud Practitioner 认证考试 测试题与解析
  • CSS实现背景色下移10px
  • 自动化与安全 - 将 Terraform 集成到 CI/CD
  • rancher上使用rke在华为云多网卡的服务器上安装k8s集群问题处理了
  • 使用Trae简单编写一个登陆页面
  • 智能合约安全 - 重入攻击 - 常见漏洞(第一篇)
  • AUTOSAR进阶图解==>AUTOSAR_SWS_COMManager
  • 【JS逆向基础】数据库之MongoDB
  • c#转python第四天:生态系统与常用库
  • 近期工作感想:职业规划篇