• Java基础(七)常用类


    一、Math类

    1、Math类介绍

      Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰。

    常用字段:

    1、E 表示自然对数的底数 2.71828 

    2、Π 表示圆周率 3.1415926

    2、Math类常用方法

    以下X表示 double,float,int,,long

    1、abs(X x):求绝对值,比如 static double abs(double a) 。

    2、max(X x1,X x2):求最大值,比如 static double max(double a, double b) 求两个数中的最大值。

    3、min(X x1,X x2):求最小值。

    4、pow(double a,double b) 返回第一个参数次幂的值。

    5、random():返回一个 0 到 1 之间的数,double类型。

    6、public static int round(float a):返回最接近参数的 int。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 int 类型。

    public static long round(double a):返回最接近参数的 long。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 long 类型。

    7、public static double sqrt(double a):返回正确舍入的 double 值的正平方根。

    二、BigInteger类和 BigDecimal类

    1、BigInteger类

       不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。

      BigInteger类比long大。

    BigInteger 方法

    1、BigInteger add(BigInteger val); 

      返回其值为 (this + val) 的 BigInteger(当前对象和传入对象相加,返回新的值)。

    2、BigInteger multiply(BigInteger val);

      返回其值为 (this * val) 的 BigInteger。

    3、BigInteger divide(BigInteger val);

      返回其值为 (this / val) 的 BigInteger。

    2、BigDecimal类

      不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)

      BigDecimal能够精确的表示一个小数,常用于商业和科学计算;float,double不能精确的表示一个小数。

      BigDecimal类和BigInteger类很相似,比如 add(加法)、multiply(乘法)divide(除法)。

     1 import java.math.BigDecimal;
     2 
     3 public class BigDecimalTest {
     4     /**
     5      * 不精确的计算
     6      */
     7     @Test
     8     public void test1(){
     9         System.out.println(0.05 + 0.01);  //输出:0.060000000000000005
    10         System.out.println(1.0 - 0.42);  //输出:0.5800000000000001
    11         System.out.println(4.015*100);  //输出:401.49999999999994
    12         System.out.println(123.3/100);  //输出:1.2329999999999999
    13     }
    14 
    15     /**
    16      * 使用BigDecimal,参数类型是double类型,计算还是不精确
    17      */
    18     @Test
    19     public void test2(){
    20         BigDecimal b1 = new BigDecimal(0.05);
    21         BigDecimal b2 = new BigDecimal(0.01);
    22         System.out.println(b1.add(b2));  //输出:0.06000000000000000298372437868010820238851010799407958984375
    23     }
    24 
    25     /**
    26      * 使用BigDecimal,参数类型是String类型,计算结果精确
    27      */
    28     @Test
    29     public void test3(){
    30         BigDecimal b1 = new BigDecimal("0.05");
    31         BigDecimal b2 = new BigDecimal("0.01");
    32         System.out.println(b1.add(b2));  //输出:0.06
    33     }
    34 }

    3、小结

    BigInteger和BigDecimal它们之间有很多共性:

    1、BigInteger 和 BigDecimal 都是Number的子类,表示数字类型。

    2、Integer是int的包装类,BigInteger,BigDecimal和Integer没有一点关系,BigInteger,BigDecimal都是平级的,都是Number的子类。

    3、BigInteger,BigDecimal 虽然都是数字类型的引用类型,但是不能够使用基本运算符( 比如 +, -, *,/),需要使用专门的方法来进行计算。

    三、随机数

    1、获取随机数的方法

    1、Math.random()

      返回带正号的double值,该值大于等于0.0 且小于1.0;(返回值double,范围[0.0,1.0) )。

    2、Java中单独提供了一个Random类

      int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。(在整个int范围内随机获得int值)。

        int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值n(不包括)之间均匀分布的 int 值。(获得0到n的一个int值)。

    3、Random括展了一个子类(ThreadLocalRandom),可以指定区间[n,m)左闭右开。

    4、UUID 唯一标识

     1 import java.util.Random;
     2 import java.util.UUID;
     3 import java.util.concurrent.ThreadLocalRandom;
     4 
     5 public class RandomTest {
     6     /**
     7     * 测试Math.random
     8     */
     9     @Test
    10     public void test1(){
    11         System.out.println(Math.random());  //输出:0.4645899681898382
    12     }
    13     
    14     /**
    15     * 测试Random类
    16     */
    17     @Test
    18     public void test2(){
    19         Random random = new Random();
    20         int nextInt1 = random.nextInt();
    21         int nextInt2 = random.nextInt();
    22         System.out.println(nextInt1);
    23         System.out.println(nextInt2);
    24         //Random(long seed) 如果种子是一个固定值,得到也是一个固定值
    25         Random random1 = new Random(123456);
    26         int nextInt3 = random1.nextInt();
    27         //int nextInt(int n) n 必须比0大,返回在 n 之间的随机数
    28         int nextInt4 = random1.nextInt(9);
    29         System.out.println(nextInt3);
    30         System.out.println(nextInt4);  //输出:4
    31     }
    32     
    33     /**
    34     * 测试ThreadLocalRandom类
    35     */
    36     @Test
    37     public void testThreadLocalRandom(){
    38         //不能使用new来创建ThreadLocalRandom对象
    39         ThreadLocalRandom random = ThreadLocalRandom.current();
    40         int nextInt1 = random.nextInt();
    41         //nextInt(int n) n 必须比0大,返回在 n 之间的随机数
    42         int nextInt2 = random.nextInt(9);
    43         System.out.println(nextInt1);  //输出:347500648
    44         System.out.println(nextInt2);  //输出:7
    45     }
    46 
    47     /**
    48     * 测试UUID 唯一标示
    49     */
    50     @Test
    51     public void testUUID(){
    52         UUID uuid = UUID.randomUUID();
    53         System.out.println(uuid);  //输出:2cc14224-72e3-4e3a-8c7b-017abb433f74
    54     }
    55 }

    四、日期时间类

    1、Date类

      java.util.Date 使用一个类表示时间,也就是把时间封装成一个类。

     1 import java.util.Date;
     2 
     3 public class DateTest {
     4     /**
     5     * 测试Date
     6     */
     7     @Test
     8     public void test1(){
     9         Date date = new Date();
    10         System.out.println(date);  //返回当前时间
    11     }
    12 }

    2、时间格式化

    DateFormat类的子类SimpleDateFormat

     方法:

    1、格式化(把Date转换成String)  String format(Date date)。

    2、解析(把String转换成Date)   Date parse(String source)。

    一般可以把时间格式化方法封装为一个工具类:

     1 import java.text.ParseException;
     2 import java.text.SimpleDateFormat;
     3 import java.util.Date;
     4 import java.util.Locale;
     5 
     6 /**
     7  * 时间工具类
     8  */
     9 public class DateUtil {
    10     /**
    11      * 格式化日期
    12      * @param date
    13      * @return
    14      */
    15     public static String DateToString(Date date) {
    16         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
    17         String format = dateFormat.format(date);
    18         return format;
    19     }
    20 
    21     /**
    22      * 字符串转换成日期格式
    23      * @param date
    24      * @return
    25      * @throws ParseException
    26      */
    27     public static Date StringToDate(String date) {
    28         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);
    29         Date parse = null;
    30         try {
    31             parse = dateFormat.parse(date);
    32         } catch (ParseException e) {
    33             e.printStackTrace();
    34         }
    35         return parse;
    36     }
    37 }

    2、Calendar 日历类

      Calendar类属于java.util包下面 , 抽象类;不能使用new创建对象,获取日历对象用 Calendar.getInstance()。

    Calendar方法:

    1、public final void set(int year, int month, int date)

      设置日历字段 YEARMONTHDAY_OF_MONTH 的值。

    2、public int get(int field)

      返回给定日历字段的值。在 lenient 模式下,所有日历字段都被标准化。在 non-lenient 模式下,所有日历字段都是经过验证的,如果任何日历字段有超出范围的值,则此方法抛出一个异常。

     1 public class DateTest {
     2     /**
     3     * 测试Calendar类
     4     */
     5     @Test
     6     public void testCalendar(){
     7         Calendar calendar = Calendar.getInstance();  //创建Calendar对象,不能用new,是一个抽象类
     8         int year = calendar.get(Calendar.YEAR);  //获取年
     9         int month = calendar.get(Calendar.MONTH) + 1; //获取月 第一个月是 JANUARY,它为 0;所以需要加 1
    10         int day = calendar.get(Calendar.DAY_OF_MONTH); //获取day
    11         System.out.println("当前日期:" + year + "年"+ month + "月" + day + "号");  //输出:当前日期:2018年2月7号
    12         Date time = calendar.getTime();  //一次性获取日期
    13         System.out.println(time);  //Wed Feb 07 16:11:00 GMT+08:00 2018
    14     }
    15 
    16     /**
    17     * Calendar类的计算
    18     */
    19     @Test
    20     public void testCalendar2(){
    21         Calendar calendar = Calendar.getInstance();
    22         calendar.add(Calendar.YEAR, 1);  //增加1年
    23         calendar.add(Calendar.MONTH, 2); //增加2个月
    24         calendar.add(Calendar.DAY_OF_MONTH, 8);  //增加8天
    25         int year = calendar.get(Calendar.YEAR);
    26         int month = calendar.get(Calendar.MONTH) + 1; //获取月 第一个月是 JANUARY,它为 0;所以需要加 1
    27         int day = calendar.get(Calendar.DAY_OF_MONTH);
    28         System.out.println("当前日期:" + year + "年"+ month + "月" + day + "号");  //输出:当前日期:2019年4月15号
    29     }
    30 }
  • 相关阅读:
    excel unixtime与北京时间互转
    vim的漫漫长征路
    const常量
    第一章:绪论
    2.4奇偶校验
    2.3数据校验的基本原理
    2.2定点与浮点数据表示
    2.1机器数及其特点
    1.2计算机系统性能评价
    冯诺依曼结构原理及层次分析
  • 原文地址:https://www.cnblogs.com/zt19994/p/8426314.html
Copyright © 2020-2023  润新知