当前位置: 首页 > news >正文

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 类提供了一些与系统交互的基本方法和属性,但在使用一些方法时需要谨慎,特别是涉及到程序终止和垃圾回收的情况。

相关文章:

Java 类之 java.lang.System

Java 类之 java.lang.System 文章目录 Java 类之 java.lang.System一、简介二、主要功能1、currentTimeMillis() - 获取当前时间的毫秒数说明代码示例 2、getProperty(String key) - 获取系统属性说明代码示例 3、exit(int status) - 终止虚拟机说明代码示例 4、arraycopy(Obje…...

认识Modbus通信协议(笔记)

Modbus 莫迪康 1979年 PLC 1969年 什么是modbus? 它是一个Bus,即总线协议。比如串口协议、IIC协议、SPI都是通信协议。 协议,顾名思义是一种规定和约束 Modbus协议是一种引用层的报文传输协议,RTU、ASCLL、TCP,都属于Modbus协…...

【算法】距离(最近公共祖先节点)

题目 给出 n 个点的一棵树,多次询问两点之间的最短距离。 注意: 边是无向的。所有节点的编号是 1,2,…,n。 输入格式 第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数; 下来 n−1 行,每行三个整数 x,y,k&am…...

基于SpringBoot的SSMP整合案例(消息一致性处理与表现层开发)

消息一致性处理 在后端执行完相应的操作后,我们需要将执行操作后的结果与数据返回前端,前端 调用我们传回去的数据,前端是如何知道我们传回去的数据名称的? 答:前后端遵循了同一个"协议"。这个协议就是定义…...

c#之反射详解

总目录 文章目录 总目录一、反射是什么?1、C#编译运行过程2、反射与元数据3、反射的优缺点 二、反射的使用1、反射相关的类和命名空间1、System.Type类的应用2、System.Activator类的应用3、System.Reflection.Assembly类的应用4、System.Reflection.Module类的应用…...

synchronized jvm实现思考

底层实现时,为什么使用了cxq队列和entryList双向链表?这里为什么不跟AQS中使用一个队列就行了,加了一个entryList的目的是为了什么? 个人理解这里多一个entryList,可能是用于减少频繁的cas操作。假设存在很多锁竞争时&…...

【hive基础】hive常见操作速查

文章目录 一. hive变量操作1. 查看当前hive配置信息2. 设置变量3. 修改变量4. 进入hive终端重新加载配置 二. 执行hive sql三. 启动hive 一. hive变量操作 1. 查看当前hive配置信息 # 查看当前所有配置信息 hive > set ;# 查看某一项配置信息 hive >set hive.metastore…...

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-A

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-A 一、竞赛时间 总计:360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …...

基于51单片机电子钟温度计数码显示设计( proteus仿真+程序+设计报告+讲解视频)

这里写目录标题 ✅1.主要功能:✅讲解视频:✅2.仿真设计✅3. 程序代码✅4. 设计报告✅5. 设计资料内容清单&&下载链接✅[资料下载链接:](https://docs.qq.com/doc/DS0Nja3BaQmVtWUpZ) 基于51单片机电子钟温度检测数码显示设计( proteu…...

jenkins+centos7上传发布net6+gitlab

工作中实践了一下jenkins的操作,所以记录一下这次经验,没有使用到docker 先看下成果: 选择发布项目 选择要发布的分支 构建中 发布成功 开始 首先安装好jenkins并注册自己的jenkins账号 因为我们的项目代码管理使用的是gitlab&#xff0c…...

python趣味编程-5分钟实现一个F1 赛车公路游戏(含源码、步骤讲解)

Python 中的 F1 赛车公路游戏及其源代码 F1 Race Road Game是用Python编程语言开发的,它是一个桌面应用程序。 这款 Python 语言的 F1 赛道游戏可以免费下载开源代码,它是为想要学习 Python 的初学者创建的。 该项目系统使用了 Pygame 和 Random 函数。 Pygame 是一组跨平…...

Kafka快速入门

文章目录 Kafka快速入门1、相关概念介绍前言1.1 基本介绍1.2 常见消息队列的比较1.3 Kafka常见相关概念介绍 2、安装Kafka3、初体验前期准备编码测试配置介绍 bug记录 Kafka快速入门 1、相关概念介绍 前言 在当今信息爆炸的时代,实时数据处理已经成为许多应用程序和…...

基于Pytorch的从零开始的目标检测

引言 目标检测是计算机视觉中一个非常流行的任务,在这个任务中,给定一个图像,你预测图像中物体的包围盒(通常是矩形的) ,并且识别物体的类型。在这个图像中可能有多个对象,而且现在有各种先进的技术和框架来解决这个问…...

interview review

M: intrinsic matrix [ f x s c x 0 f y c y 0 0 1 ] \begin{bmatrix}f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1\end{bmatrix} ​fx​00​sfy​0​cx​cy​1​ ​ ( c x , c y ) (c_x, c_y) (cx​,cy​): camera center in pixels ( f x , f y …...

layui表头多出一列(已解决)

问题描述 :layui表头多出来一列,但是表体没有内容,很影响美观。 好像是原本的表格有滚轮,我操作放大之后滚轮没有了,但是滚轮自带的表头样式还在, 之后手动把这个样式隐藏掉了,代码如下&#xf…...

​LeetCode解法汇总307. 区域和检索 - 数组可修改

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个数…...

Java源码分析:Guava之不可变集合ImmutableMap的源码分析

原创/朱季谦 一、案例场景 遇到过这样的场景&#xff0c;在定义一个static修饰的Map时&#xff0c;使用了大量的put()方法赋值&#xff0c;就类似这样—— public static final Map<String,String> dayMap new HashMap<>(); static {dayMap.put("Monday&q…...

详解自动化测试之 Selenium

目录 1. 什么是自动化 2.自动化测试的分类 3. selenium&#xff08;web 自动化测试工具&#xff09; 1&#xff09;选择 selenium 的原因 2&#xff09;环境部署 3&#xff09;什么是驱动&#xff1f; 4. 一个简单的自动化例子 5.selenium 常用方法 5.1 查找页面元素&…...

vue监听对象属性值变化

一、官方文档 二、实现方法 方法一、直接根据watch来监听 export default {data() {return {object: {username: ,password: }}},watch: {object.username(newVal, oldVal) {console.log(newVal, oldVal)}} }方法二&#xff1a;利用watch和computed来实现监听 利用computed定…...

Unicode编码的emoji表情如何在前端页面展示(未完成)

Unicode编码的emoji表情如何在前端页面展示 一、首先几个定义解决办法 一、首先几个定义 U1F601 和 0x1F601 表示同一个 Unicode 代码点&#xff0c;即笑脸 Emoji 的代码点。它们之间的区别在于表示方式和数据类型。 1.U1F601 是一种常见的表示方式&#xff0c;也称为 “U” 标…...

Python 字典遍历全攻略:5 种常用方法 + 性能对比 + 实战优化技巧

在 Python 开发中&#xff0c;字典&#xff08;dict&#xff09; 是最常用的数据结构之一&#xff0c;以键值对形式存储数据&#xff0c;具备查询快、易操作的特点。而字典的遍历是日常开发中高频操作 —— 从简单的数据读取&#xff0c;到大规模数据处理、接口返回值解析&…...

避免Java Stream重复消费:高效过滤Map的策略

本文旨在解决Java Stream在多过滤场景中常见的IllegalStatexception&#xff0c;即流被重复消耗的问题。我们将深入讨论Java Stream的单次使用特性&#xff0c;通过将外部过滤条件转换为集合&#xff0c;优化Map的过滤操作&#xff0c;提供高效、符合最佳实践的解决方案&#x…...

为什么90%的Python项目误用SM9?——基于NIST SP 800-56A rev3与GB/T 38635.2的合规性性能审计清单

第一章&#xff1a;SM9密码算法的合规性认知误区与审计必要性在国产密码应用推广过程中&#xff0c;SM9标识密码体系常被误认为“天然合规”——仅因列入《GB/T 38635.1—2020 信息安全技术 SM9标识密码算法 第1部分&#xff1a;总则》即等同于满足等保2.0、密评及《商用密码管…...

机器人离线编程专访:我是SiemensMCD与pdps用户,该不该切换为国产机器人设计与仿真软件iRobotCAM

摘要: 作为Siemens MCD与PDPS的用户&#xff0c;我从PDPS切换到其它软件时会考虑哪些因素&#xff0c;该不该切换到国产的iRobotCAM&#xff0c;本文通过专该机器人设计与仿真软件专家的形式&#xff0c;提供行业从业者的视角&#xff0c;阐述iRobotCAM的产品特点与适用性。工业…...

MangoHud与Vulkan视频编码协议:AV1监控完全指南

MangoHud与Vulkan视频编码协议&#xff1a;AV1监控完全指南 【免费下载链接】MangoHud A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. Discord: https://discordapp.com/invite/Gj5YmBb 项目地址: https://gitcode.com/gh_mirrors/…...

DeepSeek-OCR开源镜像多场景实践:跨境电商多语言产品说明书自动本地化预处理

DeepSeek-OCR开源镜像多场景实践&#xff1a;跨境电商多语言产品说明书自动本地化预处理 1. 项目背景与价值 跨境电商企业在全球化运营中面临着一个共同挑战&#xff1a;产品说明书的多语言本地化。传统方式需要人工翻译、重新排版设计&#xff0c;整个过程耗时耗力且成本高昂…...

手把手教你学Simulink——基于Simulink的同步整流Buck变换器效率提升仿真

目录 手把手教你学Simulink——基于Simulink的同步整流Buck变换器效率提升仿真​ 摘要​ 一、背景与挑战​ 1.1 传统二极管整流的效率瓶颈​ 1.1.1 二极管损耗机理​ 1.2 同步整流的优势与挑战​ 1.2.1 同步整流原理​ 1.2.2 核心挑战​ 1.3 设计目标​ 二、系统架构与…...

Node RED实战:5分钟搞定MQTT消息发布与订阅(附EMQX配置)

Node RED与MQTT实战&#xff1a;从零构建物联网消息系统 1. 为什么选择Node RED与MQTT组合&#xff1f; 物联网开发领域一直存在一个核心挑战&#xff1a;如何快速搭建可靠的消息通信系统而不陷入底层协议实现的泥潭。这正是Node RED与MQTT这对黄金组合的价值所在——它们让开发…...

Qwen3.5-4B-Claude-Opus惊艳效果:编译原理词法分析器状态转换图生成

Qwen3.5-4B-Claude-Opus惊艳效果&#xff1a;编译原理词法分析器状态转换图生成 1. 模型能力展示&#xff1a;从代码到状态转换图 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF模型在编译原理领域展现了令人惊艳的代码理解与可视化能力。当输入词法分析器代码时&…...

DXVK解决方案:基于Vulkan的Direct3D兼容层性能优化指南

DXVK解决方案&#xff1a;基于Vulkan的Direct3D兼容层性能优化指南 【免费下载链接】dxvk Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk DXVK是一个基于Vulkan的Direct3D 8/9/10/11实现层…...