滚雪球学Java(44):掌握Java编程的关键:深入解析System类

2023-10-11 07:28

本文主要是介绍滚雪球学Java(44):掌握Java编程的关键:深入解析System类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


文章目录

  • 前言
  • 摘要
  • 深入解析System类
    • System类的基本概念和作用
    • System类的常用属性和方法
      • `System.exit(int status)`
        • 代码演示:
        • 执行结果:
        • 代码解析:
      • `System.currentTimeMillis()`
        • 代码演示:
        • 执行结果:
        • 代码解析:
      • `System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)`
        • 代码演示:
        • 执行结果:
        • 代码解析:
      • `System.getenv(String name)`
        • 代码演示:
        • 执行结果:
        • 代码解析:
      • `System.getProperties()`
        • 代码演示:
        • 执行结果:
        • 代码解析:
      • `System.setOut(PrintStream out)`
        • 代码演示:
        • 执行结果:
        • 代码解析:
    • System类在Java编程中的应用
    • 小结
    • 附录源码
  • 总结
  • ☀️建议/推荐你
  • 📣关于我

  在Java编程中,System类是一个非常重要的类,它提供了大量的系统级别的操作和属性。在本文中,我们将深入解析System类,掌握Java编程的关键。

前言

  Java作为一种广泛应用于各个领域的编程语言,其系统级别的操作和属性是我们必须掌握的知识点之一。而System类就是其中非常重要的一个类,通过学习System类,我们可以更好地理解和应用Java编程语言。

摘要

本文将深入解析System类,主要包括以下内容:

  • System类的基本概念和作用
  • System类的常用属性和方法
  • System类在Java编程中的应用

深入解析System类

System类的基本概念和作用

  System类是Java.lang包下的一个类,它提供了大量的系统级别的属性和方法,可用于处理与系统相关的操作。例如,我们可以用System类获取系统的时间、内存信息、环境变量等等。

  在Java编程中,System类也经常被用于标准输入和标准输出,例如System.outSystem.in。通过System类,我们可以实现常见的输入输出操作,从而实现控制台程序开发。

System类的常用属性和方法

System类提供的常用属性和方法如下:

System.exit(int status)

  该方法用于终止Java虚拟机,并返回一个指定的状态码。一般情况下,status为0表示正常退出,非零值表示异常退出。

代码演示:

例如:

package com.demo.javase.day44;/*** 演示 System.exit(int status)** @author bug菌* @version 1.0* @date 2023/10/10 10:39*/
public class TestSystemExit {public static void main(String[] args) {System.out.println("Hello World!");System.exit(0);System.out.println("Hello World!!!"); //不会被执行(控制台不会输出)}
}
执行结果:

执行结果如下:

在这里插入图片描述

代码解析:

这段代码中包含了一个静态方法 main。在该方法中:

  • 第一行输出了一句话 “Hello World!”。

  • 第二行调用了 System.exit(0) 方法,该方法会使程序正常退出,并返回一个状态码 0。

  • 第三行的代码不会被执行,因为前一行已经使程序退出了。

  因此,该程序在执行时只会输出一句话 “Hello World!”,并且状态码为 0。

System.currentTimeMillis()

  该方法返回当前时间与1970年1月1日00:00:00之间的差值,单位为毫秒。

代码演示:

例如:

package com.demo.javase.day44;/*** 演示 System.currentTimeMillis()** @author bug菌* @version 1.0* @date 2023/10/10 10:47*/
public class TestSystemCurrentTimeMillis {public static void main(String[] args) throws InterruptedException {long startTime = System.currentTimeMillis();System.out.println("开始时间为:" + startTime);// 执行一些耗时的操作(这里线程睡眠5s作为模拟)Thread.sleep(5000);long endTime = System.currentTimeMillis();System.out.println("结束时间为:" + endTime);System.out.println("程序运行时间:" + (endTime - startTime) + "ms");}
}
执行结果:

执行结果如下:

在这里插入图片描述

代码解析:

  该段代码演示了如何使用Java中的System类的currentTimeMillis()方法来计算程序的执行时间。

  • 首先,我们获取程序开始执行时的时间戳,即System.currentTimeMillis()的返回值,并将其保存在startTime变量中。

  • 接着,我们模拟了一些耗时的操作,这里使用Thread.sleep()方法让线程休眠了5秒钟。

  • 最后,我们获取程序结束执行时的时间戳,并将其保存在endTime变量中。

  最后,我们通过计算endTime与startTime的时间差来计算程序的运行时间,并将其打印输出。

  该程序的核心是利用currentTimeMillis()获取时间戳,然后通过计算时间差来计算程序运行时间,是一种简单而有效的计时方法。

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

  该方法用于将数组src中从索引srcPos开始的length个元素复制到数组dest中的索引destPos开始的位置。

代码演示:

例如:

package com.demo.javase.day44;import java.util.Arrays;/*** 演示 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)** @author bug菌* @version 1.0* @date 2023/10/10 10:52*/
public class TestSystemArraycopy {public static void main(String[] args) {int[] src = {1, 2, 3, 4, 5};int[] dest = new int[5];System.arraycopy(src, 0, dest, 0, 5);System.out.println(Arrays.toString(dest));}
}
执行结果:

执行结果如下:

在这里插入图片描述

代码解析:

  这是一个演示使用 System.arraycopy() 方法进行数组复制的示例代码。该方法的参数包括源数组、源数组的起始位置、目标数组、目标数组的起始位置以及要复制的数组元素个数。在这个示例中,源数组是 {1, 2, 3, 4, 5},目标数组是一个长度为 5 的空数组,通过该方法将源数组的所有元素复制到目标数组中,最终打印输出目标数组的元素,即 {1, 2, 3, 4, 5}。

System.getenv(String name)

该方法用于获取系统环境变量name的值。

代码演示:

例如:

package com.demo.javase.day44;/*** 演示 System.getenv(String name)** @author bug菌* @version 1.0* @date 2023/10/10 10:55*/
public class TestSystemGetenv {//获取系统环境变量name的值public static void main(String[] args) {String javaHome = System.getenv("JAVA_HOME");System.out.println("JAVA_HOME:" + javaHome);System.out.println("CLASSPATH:"+System.getenv("CLASSPATH"));}
}
执行结果:

执行结果如下:

在这里插入图片描述

代码解析:

  这段代码演示了如何使用Java的System类中的getenv方法获取系统环境变量的值。其中,通过传入不同的参数获取不同的环境变量值,例如获取JAVA_HOME的值和CLASSPATH的值。最终,将获取到的值打印输出到控制台。

System.getProperties()

该方法返回一个Properties对象,包含了当前Java虚拟机的系统属性。

代码演示:

例如:

package com.demo.javase.day44;import java.util.Enumeration;
import java.util.Properties;/*** 演示 System.getProperties()方法** @author bug菌* @version 1.0* @date 2023/10/10 11:00*/
public class TestSystemGetProperties {//返回一个Properties对象,包含了当前Java虚拟机的系统属性public static void main(String[] args) {Properties props = System.getProperties();Enumeration<?> e = props.propertyNames();while (e.hasMoreElements()) {String key = (String) e.nextElement();String value = (String) props.get(key);System.out.println(key + " = " + value);}}
}
执行结果:

执行结果如下:

在这里插入图片描述

代码解析:

  这段代码演示了使用 System.getProperties() 方法获取当前 Java 虚拟机的系统属性,然后通过遍历 properties 对象中的键值对将其输出到控制台。

具体解析如下:

  1. 导入必要的类:
import java.util.Enumeration;
import java.util.Properties;
  1. 定义 main() 方法,获取当前 Java 虚拟机的系统属性:
public static void main(String[] args) {Properties props = System.getProperties();// ...
}

  其中,System.getProperties() 方法返回一个 Properties 对象,包含了当前 Java 虚拟机的系统属性。

  1. 遍历 properties 对象中的键值对,将其输出到控制台:
Enumeration<?> e = props.propertyNames();
while (e.hasMoreElements()) {String key = (String) e.nextElement();String value = (String) props.get(key);System.out.println(key + " = " + value);
}

  其中,props.propertyNames() 方法返回一个枚举类型的对象,该对象包含了 properties 对象中的所有键的枚举。

  然后使用 while 循环遍历该枚举对象,获取每个键值对的键和值,最后将其输出到控制台。

  因此,此段代码的作用是输出当前 Java 虚拟机的所有系统属性。

System.setOut(PrintStream out)

该方法用于将System.out设置为指定的输出流out。

代码演示:

例如:

package com.demo.javase.day44;import java.io.FileOutputStream;
import java.io.PrintStream;/*** @author bug菌* @version 1.0* @date 2023/10/10 11:02*/
public class TestSystemSetOut {//该方法用于将System.out设置为指定的输出流outpublic static void main(String[] args) {try {PrintStream out = new PrintStream(new FileOutputStream("output.txt"));System.setOut(out);System.out.println("Hello World!");out.close();} catch (Exception e) {e.printStackTrace();}}
}
执行结果:

执行结果如下:

在这里插入图片描述

代码解析:

  该代码演示了如何将Java程序中的标准输出流System.out设置为指定的输出流,具体步骤如下:

  1. 使用Java IO API中的FileOutputStream类创建一个输出流,输出到指定文件output.txt中。

  2. 使用PrintStream类对输出流进行包装,方便进行输出操作。

  3. 使用System.setOut()方法将标准输出流System.out设置为指定的输出流out。

  4. 使用System.out.println()方法输出信息,此时输出的内容将会被重定向到指定的文件output.txt中。

  5. 关闭输出流。

  该代码的运行结果是,在程序执行完毕后,会在项目根目录下生成一个名为output.txt的文件,其中包含了输出的信息"Hello World!"。

System类在Java编程中的应用

  System类在Java编程中有广泛的应用,主要包括以下方面:

  • 输入输出操作:例如System.outSystem.inSystem.err等。
  • 系统信息获取:例如System.currentTimeMillis()System.getProperties()System.getenv()等。
  • 数组复制操作:例如System.arraycopy()等。
  • 程序退出操作:例如System.exit()等。

  通过学习System类,我们可以更好地应用Java编程语言,实现更加高效、稳定和可靠的程序开发。

小结

  通过本文的讲解,我们对System类的基本概念和作用有了更加深入的理解,掌握了System类的常用属性和方法,了解了System类在Java编程中的应用,相信对我们的Java编程之路有着重要的意义。

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

  Java是一种广泛应用于各个领域的编程语言,而System类是其中非常重要的一个类,通过它我们可以更好地处理与系统相关的操作。希望本文对您有所帮助,祝您在Java编程之路中取得更加优异的成绩!

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

  我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


这篇关于滚雪球学Java(44):掌握Java编程的关键:深入解析System类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/186485

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4