当前位置: 首页 > 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” 标…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...