Java基础篇--System(系统交互)类

System类是Java核心库中的一部分,提供了与系统环境交互的属性和方法它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。

下面是System类的一些常用方法和字段:

  1. out:表示标准输出流(即控制台输出),是一个PrintStream对象。可以使用System.out.println()来向控制台输出内容。
  2. in:表示标准输入流(即控制台输入),是一个InputStream对象。可以使用其他输入流对象(如Scanner)来替代。
  3. err:表示标准错误流,是一个PrintStream对象。可以使用System.err.println()来向控制台输出错误信息。
  4. currentTimeMillis():返回当前时间的毫秒值,通常用于计算程序执行的时间或生成唯一的时间戳。
  5. arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定范围的元素复制到另一个数组中。
  6. getProperties():取得当前的系统属性
  7. getProperty(String key):根据指定的系统属性名获取对应的系统属性值。
  8. exit(int status):终止当前正在运行的Java虚拟机。
  9. gc():运行垃圾回收器,建议JVM进行垃圾回收。

arraycopy()方法

arraycopy()方法用于将数组从源数组复制到目标数组,声明格式如下:

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

关于声明格式中参数的相关介绍如下:

  • src:源数组
  • srcPos:源数组的起始位置索引
  • dest:目标数组
  • destPos:目标数组的起始位置索引
  • length:要复制的元素个数
  • 注意:
  1. ​​​​​​​arraycopy()方法是用浅拷贝的方式进行复制,按照指定位置范围逐个元素地复制数组中的值,如果需要进行深拷贝,可以使用其他方法或循环遍历数组进行逐个复制。
  2. 在进行数组复制时,目标数组必须有足够的空间来存放拷贝的元素,否则会发生角标越界异常。
  • 接下来通过一个案例演示数组元素的拷贝。
    public class myclass {
        public static void main(String[] args) {
            int[] sourceArray = {1, 2, 3, 4, 5};
            int[] destinationArray = new int[5];
    
            // 使用arraycopy()方法将sourceArray的内容复制到destinationArray中
            System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length);
    
            // 打印destinationArray的内容
            for (int i = 0; i < destinationArray.length; i++) {
                System.out.print(destinationArray[i] + " ");  //运行结果:1 2 3 4 5 
            }
        }
    }
    

    currentTimeMillis()方法

  • currentTimeMillis()方法用于获取当前系统的时间,返回值是long类型的值,该值表示当前时间与1970年1月1日0点0分0秒之间的时间差,单位是毫秒,通常也将该值称作时间戳。
  • 接下来通过一个案例演示如何使用currentTimeMillis()方法获取当前时间戳:​​​​​​​
  • import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class myclass {
        public static void main(String[] args) {
            // 获取当前时间戳
            long timestamp = System.currentTimeMillis();
    
            // 将时间戳转换为可读的日期时间字符串
            String dateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(timestamp));
    
            // 输出当前时间戳和日期时间
            System.out.println("当前时间戳:" + timestamp);
            System.out.println("当前日期时间:" + dateTime);
        }
    }
    

    运行以上代码,将输出当前时间戳和对应的日期时间,例如:

    当前时间戳:1691973658054
    当前日期时间:2023-08-14 08:40:58
    

    getProperties()和getProperty()方法

  • System类的getProperties()方法用于获取当前系统的全部属性,该方法会返回一个Properties对象,其中封装了系统的所有属性,这些属性是以键值对形式存在的。getProperty() 方法用于根据系统的属性名获取对应的属性值。
  • 接下来通过一个案例演示如何使用getProperties()getProperty()方法获取系统属性:​​​​​​​
  • import java.util.Properties;
    
    public class myclass {
        public static void main(String[] args) {
            // 获取所有系统属性信息
            Properties properties = System.getProperties();
    
            // 打印所有系统属性
            System.out.println("=== 系统属性 ===");
            for (String key : properties.stringPropertyNames()) {
                String value = properties.getProperty(key);
                System.out.println(key + " = " + value);
            }
            System.out.println("================\n");
    
            // 获取特定系统属性值
            String javaVersion = System.getProperty("java.version");
            String osName = System.getProperty("os.name");
            String userName = System.getProperty("user.name");
    
            // 打印特定系统属性值
            System.out.println("Java 版本:" + javaVersion);
            System.out.println("操作系统:" + osName);
            System.out.println("当前用户:" + userName);
        }
    }
    

    gc()方法

  • gc()方法是Java中的一个静态方法,用于请求进行垃圾回收(Garbage Collection)。

    垃圾回收是Java自动内存管理的一部分,它负责释放不再使用的内存资源,以便重新分配给其他对象。当没有对一个对象的引用时,该对象就成为可回收的垃圾(即无法被访问和使用的对象),垃圾回收器会在适当的时机自动回收这些对象所占用的内存空间。

    虽然Java的垃圾回收机制是自动进行的,但是开发者可以使用gc()方法来显式地请求系统进行垃圾回收。调用gc()方法并不保证立即执行垃圾回收,而是只是向系统建议进行回收操作。具体的垃圾回收行为和频率由Java虚拟机(JVM)和垃圾回收器的算法决定。

    接下来通过一个案例演示如何使用gc()方法进行垃圾回收:​​​​​​​
  • public class myclass {
        public static void main(String[] args) {
            Runtime runtime = Runtime.getRuntime();
    
            // 打印初始内存情况
            long initialMemory = runtime.totalMemory() - runtime.freeMemory();
            System.out.println("初始内存使用量: " + initialMemory);
    
            // 创建大量对象
            for (int i = 0; i < 100000; i++) {
                new Object();
            }
    
            // 打印创建对象后的内存情况
            long memoryAfterAllocation = runtime.totalMemory() - runtime.freeMemory();
            System.out.println("分配对象后内存使用量: " + memoryAfterAllocation);
    
            // 执行垃圾回收
            runtime.gc();
    
            // 打印垃圾回收后的内存情况
            long memoryAfterGC = runtime.totalMemory() - runtime.freeMemory();
            System.out.println("垃圾回收后内存使用量: " + memoryAfterGC);
        }
    }
    

    exit()方法

  • exit(int status)方法是System类中的一个常见方法,用于终止当前正在运行的Java虚拟机。
  • 该方法接受一个整数参数status,表示当前的退出状态。通常情况下,如果status值为0,表示正常退出;其他非零的status值则代表异常终止,可以用来指示不同的错误状态或异常情况。
  • 接下来通过一个案例演示如何使用exit()​​​​​​​方法在Java程序中终止虚拟机:​​​​​​​
  • public class myclass {
        public static void main(String[] args) {
            System.out.println("开始执行程序");
    
              boolean someCondition = false;
    		//boolean someCondition = true;
    		// 模拟某种条件发生时需要退出程序
            if (someCondition) {
                System.out.println("发生异常,程序即将异常终止");
                System.exit(1); // 非零的状态码表示异常终止
            }
    
            // 正常执行的代码
            System.out.println("程序正常结束");
            System.exit(0); // 0 表示正常退出
        }
    }

    运行以上代码,结果为:

    开始执行程序
    程序正常结束
    

猜你喜欢

转载自blog.csdn.net/m0_74293254/article/details/132266038