System类、BigDecimal类、Calendar类 用法详解

System类

System 类是Java中的一个核心类,提供了访问与系统相关的一些属性和方法。它包含了一些静态字段和静态方法,用于获取系统的标准输入、标准输出、标准错误流,以及加载动态链接库和系统属性等功能。

常见方法:

public static void exit(int status)

  • 作用:终止当前正在运行的 Java 虚拟机。

  • 参数:status 整数值,用来指示程序的终止状态。

  • 不同的整数值通常被约定俗成地用于表示不同的意义或状态,虽然 Java 规范并未强制规定其具体含义。一般来说:

    1. 非零状态码:通常用来表示程序非正常退出,表示可能发生了错误或异常情况。不同的非零状态码可以表示不同的错误类型或级别。

    2. 零状态码:通常用来表示程序正常退出,表示程序顺利完成了其任务且没有发生异常。

    具体使用时,状态码的具体含义可以由程序员自定义约定,也可以遵循某些标准或操作系统约定的状态码含义。在实际应用中,状态码的具体选择应该根据程序的具体需求和上下文来决定,以便于后续的程序调试、错误处理或者状态监控。

    System.exit(0); // 正常退出程序

public static long currentTimeMillis()

  • 作用:返回当前时间与1970年1月1日午夜(GMT)之间以毫秒为单位的时间差。

  • 返回值:当前时间的毫秒表示。

    long currentTime = System.currentTimeMillis(); 
    System.out.println("Current time in milliseconds: " + currentTime);

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

  • 作用:将数组中指定的数据复制到另一个数组中。

  • 参数:

    • src:源数组。

    • srcPos:源数组中的起始位置。

    • dest:目标数组。

    • destPos:目标数组中的起始位置。

    • length:要复制的元素数量。

    int[] srcArray = {1, 2, 3, 4, 5};
    int[] destArray = new int[5];
    System.arraycopy(srcArray, 0, destArray, 0, 5);

public static String getProperty(String key)

  • 作用:获取系统属性。

  • 参数:key 属性名。

  • 返回值:属性值,以字符串形式返回。

    String javaVersion = System.getProperty("java.version");
    System.out.println("Java version: " + javaVersion);

public static void gc() 

  • 作用:请求 Java 虚拟机进行垃圾回收。

    System.gc();

示例

import java.util.Arrays;
import java.util.Scanner;
​
public class SystemDemo {
    public static void main(String[] args) {
        //Scanner 是 Java 中的一个类,用于获取用户输入。System.in 标准输入流
        Scanner scanner = new Scanner(System.in);
        //调用垃圾回收的方法,但不知道什么时候回收
//        System.gc();
        //终止虚拟机  一般不会用
//        System.exit(1);
        //从1970.1.1 00:00:00 到目前时间的毫秒数用于测量时间间隔或者为时间戳生成唯一标识
        for (int i = 0; i < 15; i++) {
            long l = System.currentTimeMillis();
            System.out.println(l);
        }
​
        int ints[] = {1,2,3,4,5};
        int ints1[] = new int[6];
        System.arraycopy(ints,1,ints1,1,4);
        //使用流操作将 `ints1` 数组的每个元素输出到控制台。
        Arrays.stream(ints1).forEach(System.out::println);
    }
​
}

BigDecimal类

BigDecimal 类位于 java.math 包中,是 Java 中用于精确表示任意精度的十进制数的类。它提供了高精度的算术运算,适用于需要精确计算或者不希望因为浮点数计算带来的精度问题而影响计算结果的场景。

常见方法格式及用法

  1. 构造方法

    public BigDecimal(String val)

    参数: val - 要表示的数值的字符串形式。

    功能: 根据给定的字符串创建一个 BigDecimal 对象。

    BigDecimal num1 = new BigDecimal("123.45");
    BigDecimal num2 = new BigDecimal("678.90");
    ​
    //也可以用下面的方法创建
    Double a = 2.0;
    Double b = 1.1;
    //创建BigDecimal对象,一定要用字符串,不能用double,否则精度依然会丢失
    BigDecimal bigDecimal = new BigDecimal(a.toString());
    BigDecimal bigDecimal1 = new BigDecimal(b.toString());
  2. 加法操作

    public BigDecimal add(BigDecimal augend)

    返回值: 加法结果的 BigDecimal 对象。

    参数: augend - 要加的 BigDecimal 对象。

    功能: 将当前 BigDecimal 对象与参数相加。

    BigDecimal sum = num1.add(num2);
  3. 减法操作

    public BigDecimal subtract(BigDecimal subtrahend)

    返回值: 减法结果的 BigDecimal 对象。

    参数: subtrahend - 要减的 BigDecimal 对象。

    功能: 从当前 BigDecimal 对象中减去参数。

    BigDecimal difference = num1.subtract(num2);
  4. 乘法操作

    public BigDecimal multiply(BigDecimal multiplicand)

    返回值: 乘法结果的 BigDecimal 对象。

    参数: multiplicand - 要乘的 BigDecimal 对象。

    功能: 将当前 BigDecimal 对象与参数相乘。

    BigDecimal product = num1.multiply(num2);
  5. 除法操作

    public BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)

    返回值: 除法结果的 BigDecimal 对象。

     
       

    参数

    divisor - 要除的 BigDecimal 对象。

    roundingMode - 舍入模式,用于确定如何处理除法的结果。

    功能: 将当前 BigDecimal 对象除以参数。

    BigDecimal quotient = num1.divide(num2, RoundingMode.HALF_UP);
  6. 比较操作

    public int compareTo(BigDecimal val)

    返回值

    负整数,如果当前对象小于参数。

     零,如果当前对象等于参数。

    正整数,如果当前对象大于参数。

    参数: val - 要比较的 BigDecimal 对象。

    功能: 将当前 BigDecimal 与参数进行比较。

    int comparison = num1.compareTo(num2);

  7. 转换为字符串

    public String toString()

    返回值: 表示当前 BigDecimal 对象值的字符串。

    功能:BigDecimal 对象转换为字符串形式。

    String num1Str = num1.toString();

示例

import java.math.BigDecimal;
import java.math.RoundingMode;
​
public class BigDecimalExample {
    public static void main(String[] args) {
        BigDecimal num1 = new BigDecimal("123.45");
        BigDecimal num2 = new BigDecimal("678.90");
        
        // 加法
        BigDecimal sum = num1.add(num2);
        System.out.println("Sum: " + sum);
        
        // 减法
        BigDecimal difference = num1.subtract(num2);
        System.out.println("Difference: " + difference);
        
        // 乘法
        BigDecimal product = num1.multiply(num2);
        System.out.println("Product: " + product);
        
        // 除法
        BigDecimal quotient = num1.divide(num2, RoundingMode.HALF_UP);
        System.out.println("Quotient: " + quotient);
        
        // 比较
        int comparison = num1.compareTo(num2);
        System.out.println("Comparison result: " + comparison);
        
        // 转换为字符串
        String num1Str = num1.toString();
        System.out.println("num1 as String: " + num1Str);
    }
}

Calendar类

在Java中,Calendar 类位于 java.util 包中,是一个抽象类,用于处理日期和时间的操作。

虽然它是抽象类,但可以通过静态工厂方法 getInstance() 获得 Calendar 类的实例,该方法根据当前时区和语言环境返回一个适当类型的日历对象。Calendar 类允许我们进行日期字段(如年、月、日)的操作,还可以进行日期之间的计算和比较。Calendar 类的常见方法可以帮助我们获取和设置日期信息、进行日期计算等操作。

常见方法格式

下面是一些常见方法的格式,包括权限修饰符、返回值类型、方法名和参数类型。

  1. 获取和设置日期字段

    • 权限 返回值 方法名(参数类型)

      public int get(int field):获取给定字段的值,如年、月、日等。

      public void set(int field, int value):设置给定字段的值为指定值。

      public void add(int field, int amount):根据日历规则,将指定字段增加或减少指定的时间量。

      public void roll(int field, boolean up):增加或减少指定字段的值,而不影响更大的字段。

      示例用法:

      Calendar cal = Calendar.getInstance();
      int year = cal.get(Calendar.YEAR);
      int month = cal.get(Calendar.MONTH); // 注意:月份从 0 开始
      cal.set(Calendar.DAY_OF_MONTH, 1); // 设置日期为本月的第一天
      cal.add(Calendar.DAY_OF_MONTH, 7); // 增加一周

  2. 比较和判断

    • 权限 返回值 方法名(参数类型)

      public boolean before(Object when):比较当前日历是否在指定日历之前。

      public boolean after(Object when):比较当前日历是否在指定日历之后。

      public boolean equals(Object obj):比较两个日历对象是否表示相同的日期时间。

      示例用法:

      Calendar cal1 = Calendar.getInstance();
      Calendar cal2 = Calendar.getInstance();
      cal2.add(Calendar.DAY_OF_MONTH, 1);
      if (cal1.before(cal2)) {
          System.out.println("cal1 is before cal2");
      }

  3. 格式化和输出

    • 权限 返回值 方法名(参数类型)

      public String toString():返回表示此 Calendar 的字符串描述。

      public void setTime(Date date):使用给定的 Date 设置此 Calendar 的时间。

      public Date getTime():返回表示此 Calendar 的时间值(作为 Date 对象)。

      示例用法:

      Calendar cal = Calendar.getInstance();
      System.out.println("Current date and time: " + cal.getTime());

示例

import java.util.Calendar;
​
public class CalendarExample {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        
        // 获取当前日期和时间
        System.out.println("Current date and time: " + cal.getTime());
        
        // 获取年、月、日
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH); // 月份从 0 开始
        int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println("Year: " + year + ", Month: " + (month + 1) + ", Day: " + dayOfMonth);
        
        // 设置日期为本月第一天
        cal.set(Calendar.DAY_OF_MONTH, 1);
        System.out.println("First day of the month: " + cal.getTime());
        
        // 增加一周
        cal.add(Calendar.DAY_OF_MONTH, 7);
        System.out.println("After adding a week: " + cal.getTime());
        
        // 比较两个 Calendar 对象
        Calendar anotherCal = Calendar.getInstance();
        anotherCal.add(Calendar.DAY_OF_MONTH, 1);
        if (cal.before(anotherCal)) {
            System.out.println("cal is before anotherCal");
        }
    }
}

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知、508

你的鼓励实我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值