Java 类之 java.lang.System

Java 类之 java.lang.System

文章目录

  • Java 类之 java.lang.System
  • 一、简介
  • 二、主要功能
    • 1、`currentTimeMillis()` - 获取当前时间的毫秒数
      • 说明
      • 代码示例
    • 2、`getProperty(String key)` - 获取系统属性
      • 说明
      • 代码示例
    • 3、`exit(int status)` - 终止虚拟机
      • 说明
      • 代码示例
    • 4、`arraycopy(Object src, int srcPos, Object dest, int destPos, int length)` - 复制数组
      • 说明
      • 代码示例
    • 5、`gc()` - 请求垃圾回收
      • 说明
      • 代码示例
  • 三、其它
    • 1、为什么 System 类要提供一个数组拷贝方法?
    • 2、System.getProperty 常用于获取那些属性?
    • 3、关于 System 类还有哪些需要注意的点吗?

一、简介

java.lang.System 类是 Java 编程语言中的一个核心类,提供了与系统交互的方法和字段。

public final class System

二、主要功能

1、currentTimeMillis() - 获取当前时间的毫秒数

说明

该方法返回自1970年1月1日00:00:00 UTC以来的当前时间与此类实例创建的时间的毫秒差。

代码示例

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

2、getProperty(String key) - 获取系统属性

说明

该方法根据指定的键检索系统属性值。

代码示例

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

3、exit(int status) - 终止虚拟机

说明

该方法终止当前正在运行的 Java 虚拟机。

代码示例

System.out.println("Before exit");
System.exit(0);
System.out.println("After exit"); // 不会执行到这里

4、arraycopy(Object src, int srcPos, Object dest, int destPos, int length) - 复制数组

说明

该方法从源数组复制一个数组到目标数组。

代码示例

int[] sourceArray = {1, 2, 3, 4, 5};
int[] destinationArray = new int[5];System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length);// destinationArray 现在包含了 sourceArray 的内容

5、gc() - 请求垃圾回收

说明

该方法是请求 Java 虚拟机进行垃圾回收。

代码示例

// 在某些情况下,可以显式调用垃圾回收
System.gc();

三、其它

1、为什么 System 类要提供一个数组拷贝方法?

System 类提供 arraycopy 方法主要出于性能和效率的考虑。这个方法是为了在底层执行高效的数组拷贝操作而设计的。以下是一些原因解释为什么 System.arraycopy 方法是有用的:

  1. 底层性能优化: System.arraycopy 在底层通常会使用系统级别的内存复制操作,这可能比在 Java 代码中使用循环手动复制数组元素更为高效。这对于大规模数据的拷贝尤其有利。
  2. 原子性: arraycopy 方法是原子的,即要么执行整个拷贝操作,要么不执行。在多线程环境中,这是很重要的,可以避免并发问题,确保在拷贝期间没有其他线程对数组进行修改。
  3. 支持不同类型的数组: arraycopy 可以用于复制不同类型的数组,例如将一个 int 数组的一部分复制到一个 Object 数组中。这种灵活性是手动循环复制难以提供的。
  4. 简化代码: 使用 System.arraycopy 可以减少代码量,使代码更简洁、易读。这对于需要频繁进行数组操作的情况尤为有用。
  5. 系统级内存操作: arraycopy 可以利用底层系统的内存复制机制,因此在某些情况下,比手动循环更为高效,尤其是对于较大的数组。

总体而言,System.arraycopy 是为了提供一个高性能、原子性、灵活且易用的数组拷贝方法,以适应各种不同的应用场景。在处理大量数据和对性能要求较高的情况下,使用这个方法可以更好地满足需求。

2、System.getProperty 常用于获取那些属性?

System.getProperty 方法常用于获取与系统相关的属性信息。通过指定属性的键(key),可以检索与该键相关联的属性值。以下是一些常用的键和相应的属性信息:

  1. Java 运行时环境属性:
    • "java.version": Java 运行时环境版本。
    • "java.vendor": Java 运行时环境供应商。
    • "java.vendor.url": Java 供应商的 URL。
    • "java.home": Java 安装目录。
    • "java.vm.specification.version": Java 虚拟机规范版本。
    • "java.vm.specification.vendor": Java 虚拟机规范供应商。
    • "java.vm.specification.name": Java 虚拟机规范名称。
    • "java.vm.version": Java 虚拟机实现版本。
    • "java.vm.vendor": Java 虚拟机实现供应商。
    • "java.vm.name": Java 虚拟机实现名称。
  2. 操作系统属性:
    • "os.name": 操作系统的名称。
    • "os.arch": 操作系统的架构。
    • "os.version": 操作系统的版本。
  3. 用户和目录属性:
    • "user.name": 用户的账户名称。
    • "user.home": 用户的主目录。
    • "user.dir": 用户的当前工作目录。
  4. 文件分隔符和路径分隔符:
    • "file.separator": 文件分隔符(在 UNIX 系统上是"/“,在 Windows 系统上是”")。
    • "path.separator": 路径分隔符(在 UNIX 系统上是":“,在 Windows 系统上是”;")。

这些属性提供了有关 Java 运行时环境、操作系统和用户环境的信息。通过调用 System.getProperty 方法并传递相应的键,可以在程序中获取这些属性的值,从而实现对运行环境和系统配置的动态适应。

3、关于 System 类还有哪些需要注意的点吗?

除了前面提到的一些常用的方法和属性之外,还有一些关于 System 类需要注意的点:

  1. System.exit() 方法:
    • 使用 System.exit(int status) 可以终止当前正在运行的 Java 虚拟机。注意,如果在程序中调用了 System.exit(),将立即终止整个 Java 运行时,可能导致一些未完成的操作无法完成。在正常情况下,程序应该在退出之前完成必要的清理工作。
  2. System.gc() 方法:
    • 调用 System.gc() 是一个提示 Java 虚拟机执行垃圾回收的方法,但并不能确保立即执行垃圾回收。垃圾回收是由 Java 虚拟机自行管理的,因此程序员通常不需要显式调用 System.gc()
  3. 输入输出流:
    • System.inSystem.outSystem.err 分别代表标准输入、标准输出和标准错误输出。它们分别是 InputStreamPrintStream 的实例。可以使用这些流来进行输入和输出操作。
  4. 性能和效率:
    • System.arraycopy() 方法是一个高效的数组复制方法,特别适用于大规模数据的拷贝。在需要处理大量数据时,使用该方法可以提高性能。
  5. 安全性:
    • 由于 System.exit() 方法可以终止整个 Java 运行时,要慎重使用,避免在正常情况下滥用这个方法。在通常情况下,应该使用异常或其他控制流程来安全地退出程序。
  6. 环境属性:
    • 使用 System.getProperty(String key) 方法可以获取与系统相关的属性信息。这些信息可以用于适应不同的运行环境和系统配置。

总体而言,System 类提供了一些与系统交互的基本方法和属性,但在使用一些方法时需要谨慎,特别是涉及到程序终止和垃圾回收的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openRPA开源项目源码编译

最近接触到了一个新的领域——RPA,RPA全称Robotic Process Automation,中文名为机器人流程自动化。RPA可以视作一个数字机器人,它可以通过程序来模拟人与软件系统的交互过程,代替人工将大量重复、有规则的计算机操作自动化&#x…

C++之map容器

C之map容器 map构造和赋值 #include<iostream> #include<string> using namespace std; #include<map>void printMap(map<int,int>&m) {for (map<int,int>::iterator it m.begin();it ! m.end();it){//cout <<"key is: "&l…

kubernetes部署jenkins

参考&#xff1a;kubernetes 部署 Jenkins jenkins kubernetes pipeline_mob64ca14116c53的技术博客_51CTO博客 第七篇&#xff1a;kubernetes部署jenkins-CSDN博客 1、当前kubernetes集群已部署nfs服务 showmount -e 创建jenkins目录 2、添加jenkins的pvc kubectl create …

Redis(集合Set和有序集合SortedSet)

SET集合中的元素是不允许重复的&#xff0c;SET中的命令都是以S开头的。 使用SADD 在集合中添加元素&#xff0c;使用SMEMBERS查看元素。 当添加重复元素时&#xff0c;会返回0代表添加失败&#xff0c;查询还是就Redis一个元素。 使用SISMEMBER查询元素是否在集合中&#xff…

大师学SwiftUI第18章Part1 - 图片选择器和相机

如今&#xff0c;个人设备主要用于处理图片、视频和声音&#xff0c;苹果的设备也不例外。SwiftUI可以通过​​Image​​视图显示图片&#xff0c;但需要其它框架的支持来处理图片、在屏幕上展示视频或是播放声音。本章中我们将展示Apple所提供的这类工具。 图片选择器 Swift…

Gdevops北京站 2023年全球敏捷运维峰会-核心PPT资料下载

一、峰会简介 2023 Gdevops全球敏捷运维峰会-北京站成功举办&#xff0c;一众产学研界技术大佬与新锐专家&#xff0c;以智能为主线&#xff0c;就数据库、运维、架构、金融科技等领域进行了前沿技术与实践经验交流&#xff0c;一同畅聊AIGC、云原生、数智化转型下的新机遇。 …

HTTP常见面试题(小林coding版总结)

1&#xff1a;HTTP基本概念 超文本 传输 协议 2&#xff1a;常见状态码 1xx 提示信息 2xx 成功 3xx 重定向 4xx 客户端错误 5xx 服务器错误 3&#xff1a;HTTP常见的字段 host 指定服务器的域名 Content-Length 回应的数据长度 Connection 长连接&#xff08;Keep-Alive&#x…

ubuntu22.04下hadoop3.3.6+hbase2.5.6+phoenix5.1.3开发环境搭建

一、涉及软件包资源清单 1、java 这里使用的是openjdk 2、hadoop-3.3.6.tar.gz 3、hbase-2.5.6-hadoop3-bin.tar.gz 4、phoenix-hbase-2.5-5.13-bin.tar.gz 5、apache-zookeeper-3.8.3-bin.tar.gz 6、openssl-3.0.12.tar.gz 二、安装 1、操作系统环境准备 换源 sudo vim /et…

【Java 进阶篇】插上翅膀:JQuery 插件机制详解

在前端开发中&#xff0c;JQuery 作为一个广泛应用的 JavaScript 库&#xff0c;为开发者提供了丰富的工具和方法&#xff0c;简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中&#xff0c;插件机制是 JQuery 的一项重要特性&#xff0c;使得开发者能够轻松地…

解决Redis分布式锁宕机出现不可靠问题-zookeeper分布式锁

核心思想&#xff1a;当客户端要获取锁&#xff0c;则创建节点&#xff0c;使用完锁&#xff0c;则删除该节点。 客户端获取锁时&#xff0c;在 lock 节点下创建临时顺序节点。然后获取 lock下面的所有子节点&#xff0c;客户端获取到所有的子节点之后&#xff0c;如果发现自己…

【漏洞复现】​金和OA存在任意文件读取漏洞

漏洞描述 金和OA协同办公管理系统C6软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助企…

freetype将字符串制作成位图并显示过程详解

在流媒体项目中字幕显示是不可或缺的一环&#xff0c;一般会有字幕流在视频播放过程中进行显示&#xff1b;不过还有很多情况是从头到尾只在视频的某个区域显示某些文字&#xff0c;例如某个电视台的log&#xff1b;这种也称为字幕&#xff0c;如果想要将这些字符串显示到视频&…

Page分页records有数据,但是total=0,解决办法

Page分页records有数据&#xff0c;但是total0&#xff0c;解决办法 问题&#xff1a;程序运行起来后&#xff0c;后端接收前端传来的搜索请求信息正常&#xff0c;但无法在前端正确反馈信息&#xff0c;通过在后端排查发现total一直等于零&#xff0c;但数据库中有数据&#x…

jenkins清理缓存命令

def jobName "yi-cloud-operation" //删除的项目名称 def maxNumber 300 // 保留的最小编号&#xff0c;意味着小于该编号的构建都将被删除 Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number < maxNumber }.each { it.delet…

微服务和Spring Cloud Alibaba介绍

1、微服务介绍 1.1 系统架构演变 随着互联网的发展&#xff0c;网站应用的规模也在不断的扩大&#xff0c;进而导致系统架构也在不断的进行变化。从互联网早起到现在&#xff0c;系统架构大体经历了下面几个过程: 单体应用架构 —> 垂直应用架构 —> 分布 式架构—>…

go 适配器模式

适配器模式用于转换一种接口适配另一种接口。 实际使用中Adaptee一般为接口&#xff0c;并且使用工厂函数生成实例。 在Adapter中匿名组合Adaptee接口&#xff0c;所以Adapter类也拥有SpecificRequest实例方法&#xff0c;又因为Go语言中非入侵式接口特征&#xff0c;其实Ada…

Qt/C++ 获取QProcess启动的第三方软件的窗体标题

Qt/C 获取QProcess启动的第三方软件的窗体标题&#xff0c;在使用EnumWindows获取窗体句柄(HWND)时&#xff0c;如果返回提前FALSE&#xff0c;则获取到的HWND状态IsWindow正常&#xff0c;但就是获取不到窗体标题。必须正常返回TRUE才能使用HWND获取到窗体标题&#xff0c;要不…

聊一聊前端面临的安全威胁与解决对策

前端是用户在使用您的网站或Web应用程序时首先体验到的东西。如果您的Web应用程序的前端受到侵害&#xff0c;它可能会影响整个布局&#xff0c;并造成糟糕的用户体验&#xff0c;可能难以恢复。集成前端安全变得越来越重要&#xff0c;本文将指导您通过可以应用于保护您的Web应…

[nlp] 损失缩放(Loss Scaling)loss sacle

在深度学习中,由于浮点数的精度限制,当模型参数非常大时,会出现数值溢出的问题,这可能会导致模型训练不稳定。为了解决这个问题,损失缩放(Loss Scaling)技术被引入,它通过缩放损失值来解决这个问题。 在深度学习中,损失缩放技术通常是通过将梯度进行缩放来实现的。具…

vue --version无法显示,只弹出vs窗口

参考连接&#xff1a; nodejs环境配置&#xff08;解压包&#xff09;安装教程_nodejs解压版安装及环境配置_tubond的博客-CSDN博客 原因&#xff1a;环境没搞好&#xff0c;没有设置全局文件夹&#xff0c;node默认放在C盘了&#xff0c;C盘有权限。因为npm -i vue/cli创建…