• java基础 System类、BigInteger 和 BigDecimal类、时间类


    目录

    23、System类

    1、常用方法

    24、BigInteger 和 BigDecimal类

    1、BigInteger适合保存比较大的整数

    2、BigDecimal 适合保存精度更高的浮点型(小数)

    25、日期类

    1、第一代日期类

    2、第二代日期类

    3、前两代日期的不足分析

    4、第三代日期


    23、System类

    1、常用方法

    1. exit 退出当前程序

      1. public static void main(String[]args){
      2.        //exit 退出当前程序
      3.        System.out.println("ok1");
      4.        // exit(0)代表程序退出
      5.        // 0表示一个状态,正常退出的状态
      6.        System.exit(0);
      7.        System.out.println("ok2");
      8.   }

    2. arraycopy :复制数组元素,比较适合底层调用,一般我们使用Arrays.copyOf()完成赋值数组

      1. public static void main(String[]args){
      2.        //arraycopy 复制数组元素
      3.        int[] arr = {1,2,3};
      4.        int[] arr2 = new int[3];  // 0 0 0
      5.        /**
      6.         * @param     src     the source array.
      7.         *                     源数组(待复制的数组)
      8.         * @param     srcPos   starting position in the source array.
      9.         *                     源数组那个开始索引拷贝
      10.         * @param     dest     the destination array.
      11.         *                     目标数组(把源数组的数据拷贝到那个数组)
      12.         * @param     destPos starting position in the destination data.
      13.         *                     把源数组的数据拷贝到目标数组的那个索引位置
      14.         * @param     length   the number of array elements to be copied.
      15.         *                     从源数组拷贝长度
      16.         * 如果length超出源数组的范围---会出现异常
      17.         */
      18.        System.arraycopy(arr,0,arr2,1,2);
      19.        System.out.println(Arrays.toString(arr2));
      20.   }

    3. currentTimeMillens :返回当前时间距离1970-1-1的毫秒数

    4. gc : 提醒jdm运行垃圾回收机制

    24、BigInteger 和 BigDecimal类

    1、BigInteger适合保存比较大的整数

    1. public static void main(String[]args){
    2.        /**
    3.         * 在编程中需要处理很大的整数 long的范围不够用的时候
    4.         * 我们使用BigInteger的类来搞定
    5.         */
    6. //       long l = 999999999999999999999999l;
    7.        BigInteger bigInteger = new BigInteger("999999999999999999999999");
    8.        /**
    9.         * 在对BigInteger进行加减乘除的还是,需要使用对应的方法,不能直接使用 + - * /
    10.         * add加   subtract减 multiply乘 divide除
    11.         */
    12.        bigInteger.add(new BigInteger("10"));
    13.        bigInteger.subtract(new BigInteger("10"));
    14.        bigInteger.multiply(new BigInteger("10"));
    15.        bigInteger.divide(new BigInteger("10"));
    16.   }

    2、BigDecimal 适合保存精度更高的浮点型(小数)

    跟BigInteger类似
    注意的是除法  如果除不尽会抛出一个 ArithmeticException异常
    解决方案是,在调用divide方法的时候 指定精度即可 
    ​
    
    1. public static void main(String[]args){
    2.        BigDecimal bigInteger = new BigDecimal("99.99999991111911");
    3.        System.out.println(bigInteger.add( new BigDecimal("1.1")));
    4.        System.out.println(bigInteger.subtract( new BigDecimal("1.1")));
    5.        System.out.println(bigInteger.multiply( new BigDecimal("1.1")));
    6.        //如过有无限循环小数,就会保留分子的精度
    7.        System.out.println(bigInteger.divide( new BigDecimal("1.1"),BigDecimal.ROUND_CEILING));
    8.   }

    25、日期类

    1、第一代日期类

    1. Date:精确到毫秒,代表特定的瞬间

    2. SimpleDateFormat: 格式和解析日期的类 (允许: 日期 -》文本 、 文本 -》日期 )

    1. public static void main(String[] args) throws ParseException {
    2.        //1、获取当前系统时间
    3.        //2、引入的是java.util.Date
    4.        //3、默认输出的日期格式是国外方式,因此通常需要对格式进行转换
    5.        Date date = new Date();
    6.        System.out.println(date);
    7.        //通过毫秒数指定时间
    8.        Date date1 = new Date(9234567);
    9.        System.out.println(date1);
    10.        //创建SimpleDateFormat进行格式转换
    11.        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
    12.        String format = sf.format(date);
    13.        System.out.println(format);
    14.        //将字符串准换成时间 (字符串的格式要跟 (sf)转换的格式相同) 否则会抛出一个转换异常
    15.        //得到的Date对象输出的时候,还是按照国外的形式
    16.        //如果希望指定格式输出,需要转换
    17.        String str = "2000-1-1 10:23:31 星期六";
    18.        Date parse = sf.parse(str);
    19.        System.out.println(parse);
    20.   }

    2、第二代日期类

    1. 第二代日期类,主要就是Calendar类(日历)

      public abstract class Calendar implements Serializable, Cloneable, Comparable
    2. Calendar类是一个抽象类,它为特定瞬间与一组 如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间提供了转换方法

    1. public static void main(String[]args){
    2.        //1、Calendar类抽象类 ,并且构造器是私有化的
    3.        //2、可以通过getInstance()获取实例
    4.        //3、提供了大量的字段和方法供我们使用
    5.        //4、Calendar没有提供对应的格式化的类,需要程序员自己组合输出
    6.        //5.如果我们要按照24小时进制 我们使用 Calendar.HOUR ---> Calendar.HOUR_OF_DAY
    7.        Calendar c = Calendar.getInstance();
    8.        System.out.println(c);
    9.        //获取日历对象的相关字段
    10.        System.out.println("年:"+c.get(Calendar.YEAR));
    11.        //月要加1 因为Calendar默认是从0开始计算的(国外)
    12.        System.out.println("月:"+(c.get(Calendar.MONTH)+1));
    13.        System.out.println("日:"+c.get(Calendar.DAY_OF_MONTH));
    14.        System.out.println("时(12):"+c.get(Calendar.HOUR));
    15.        //24小时
    16.        System.out.println("时(24):"+c.get(Calendar.HOUR_OF_DAY));
    17.        System.out.println("分:"+c.get(Calendar.MINUTE));
    18.        System.out.println("秒:"+c.get(Calendar.SECOND));
    19.   }

    3、前两代日期的不足分析

    1. 可变性:像日期和时间这样的类应该是不可变的

    2. 变异性:Date中的年份是从1970开始的,Calendar的月份是从0开始的

    3. 格式化:格式化只对Date有用 Calendar无法使用

    4. 此外,它们也不是线程安全的

    4、第三代日期

    1. LocalDate 日期 年月日

    2. LocalTime 时间 时分秒

    3. LocalDateTime 日期时间 年月日 时分秒 这三类是 jdk8加入

    1. public static void main(String[]args){
    2.        //第三代日期
    3.        // private LocalDateTime(LocalDate date, LocalTime time) 构造器私有化了
    4.        //1. 使用now() 表示返回当前日期时间的对象
    5.        LocalDateTime ldt = LocalDateTime.now();
    6.        System.out.println(ldt);
    7.        System.out.println("年:"+ldt.getYear());
    8.        //这个是英文
    9.        System.out.println("月:"+ldt.getMonth());
    10.        //数字
    11.        System.out.println("月:"+ldt.getMonthValue());
    12.        System.out.println("日:"+ldt.getDayOfMonth());
    13.        System.out.println("时:"+ldt.getHour());
    14.        System.out.println("分:"+ldt.getMinute());
    15.        System.out.println("秒:"+ldt.getSecond());
    16.        //使用DateTimeFormatter 进行格式化 上面三个类都行
    17.        //格式跟SimpleDateFormat一样 也可以开api文档
    18.        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    19.        System.out.println(dtf.format(ldt));
    20.        //Date和Instant 转换
    21.        //Instant时间戳
    22.        Instant now = Instant.now();
    23.        System.out.println(now);
    24.        //1、Instant -->Date
    25.        Date date  = Date.from(now);
    26.        //2、 Date --> Instant
    27.        Instant instant = date.toInstant();
    28.        System.out.println("==========");
    29.        //提供了大量的 plus 和minus方法 可以对当前时间进行 加或者减
    30.        //看看890天后 是什么时候
    31.        LocalDateTime l = ldt.plusDays(890);
    32.        System.out.println(dtf.format(l));
    33.        //100小时前
    34.        LocalDateTime ld = ldt.minusHours(100);
    35.        System.out.println(dtf.format(ld));
    36.   }

  • 相关阅读:
    【21天打卡】前端攻城狮重学算法之-直接插入排序
    【每日一题Day320】LC2651计算列车到站时间 | 数学
    6-13 折半查找
    VMware之RAID配置
    2024MathorCup A题 赛后思路代码分享(分赛区一等奖)移动通信网络中 PCI 规划问题
    Android学习-fragment的使用
    耳鸣会给患者带来什么影响?
    盲盒电商深度解析,盲盒电商怎么玩?
    Fibonacci 数列与黄金分割
    Jetpack:016-Jetpack中的SanckBar
  • 原文地址:https://blog.csdn.net/weixin_52574640/article/details/127589285