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

java Math类 和 System类 详解(通俗易懂)

  • Math类介绍

  • Math类常用方法及演示

  • System类简介

  • System类常用方法及演示


一、前言

本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类, 内容包括Math类介绍Math类常用方法System类介绍System类常用方法。该小节内容基本不涉及底层源码,只是因其使用频率较可观,本身也没什么难度,所以给大家演示一下它们的常用方法,大家可以放心食用。 注意 : 代码中的注释也很重要; 不要眼高手低,自己敲一遍才能知道怎么用。 点击侧边栏目录或者文章开头的目录可以跳转。良工不示人以朴,所有文章都会适时改进。大家如果有什么问题,都可以在评论区一块儿交流,或者私信up。 感谢阅读!

二、Math类介绍

诚然,我们目前的编程中用到数学不算多,因为我们还没讲算法。但即便如此,简单的 + - * / 有时并不能满足我们对计算的需求。我们可以使用java提供的Math类来解决这个问题,java Math类中封装了常用的数学运算,包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数
Math类属于java.base模块,java.lang包下,如下图所示 :

我们再来看看Math类的源码,如下 :

可以看到,Math类被final关键字修饰,因此Math类不可被继承。同时,Math类的构造器也被私有化了,并且源码中也给出了标注,Math类不可被实例化。


三、Math类常用方法

0.前言

在演示Math类常用方法前,顺便提一嘴Math类的两个共有静态常量E和PI,估计大家看名字也能猜出来这是干嘛的。E是自然对数,PI是圆周率。如下图所示 :

1.static ... abs(...)

返回当前数值的绝对值。可以是int,long,float, double四种类型。

2.static double pow(double a, double b)

设传入的两个形参是a和b,返回a的b次方。(求幂运算)

3.static double ceil(double a)

向上取整,返回大于等于当前形参的最小整数。

4.static double floor(double a)

向下取整,返回小于等于当前形参的最大整数。

5.static ... round(...)

四舍五入取整,支持传入float类型和double类型,对应返回类型分别为int类型和long类型。

6.static double sqrt(double a)

对传入的形参求开方。即返回当前形参的算术平方根。

7.static double random()

返回一个大于等于0.0小于1.0的随机数。即返回区间[0.0, 1.0)内的一个随机数。

PS : 如果要求[a, b]之间的一个随机整数,可以使用如下公式——

(int) (a + Math.random() * (b - a + 1)) (可令a = 0来证明)

8.static ... max(...)

返回两个数中的最大值。同abs方法一样,支持int,long,float,double四种类型。

9.static ... min(...)

返回两个数中的最小值。同abs方法一样,支持int,long,float,double四种类型。

Δ演示 :

up以Math_类为演示类,代码如下 :

package csdn.knowledge.api.System_Math;public class Math_ {public static void main(String[] args) {//演示 : Math类常用方法//1 —— static ... abs(...)System.out.println("-233的绝对值 = " + Math.abs(-233));System.out.println("6.666的绝对值 = " + Math.abs(6.666));System.out.println("6.666的绝对值 = " + Math.abs(-11.11));System.out.println("6.666的绝对值 = " + Math.abs(5));System.out.println("===============================");//2 —— static double pow(double a, double b)System.out.println("3 的 2次方 = " + Math.pow(3, 2));System.out.println("2 的 3次方 = " + Math.pow(2, 3));System.out.println("4 的 2次方 = " + Math.pow(4, 2));System.out.println("2 的 10次方 = " + Math.pow(2, 10));System.out.println("===============================");//3 —— static double ceil(double a)System.out.println("2.33向上取整 = " + Math.ceil(2.33));System.out.println("2.99向上取整 = " + Math.ceil(2.99));System.out.println("3.01向上取整 = " + Math.ceil(3.01));System.out.println("-3.01向上取整 = " + Math.ceil(-3.01));System.out.println("===============================");//4 —— static double floor(double a)System.out.println("2.33向下取整 = " + Math.floor(2.33));System.out.println("2.99向下取整 = " + Math.floor(2.99));System.out.println("4.01向下取整 = " + Math.floor(4.01));System.out.println("-4.01向下取整 = " + Math.floor(-4.01));System.out.println("===============================");//5 —— static ... round(...)System.out.println("2.499四舍五入 = " + Math.round(2.499));System.out.println("2.501四舍五入 = " + Math.round(2.501));System.out.println("-3.33四舍五入 = " + Math.round(-3.33));System.out.println("-6.88四舍五入 = " + Math.round(-6.88));System.out.println("===============================");//6 —— static double sqrt(double a)System.out.println("9开根号 = " + Math.sqrt(9));System.out.println("9.0开根号 = " + Math.sqrt(9.0));System.out.println("1.21开根号 = " + Math.sqrt(1.21));System.out.println("256开根号 = " + Math.sqrt(256));System.out.println("===============================");//7 —— static double random()System.out.println("返回[0.0, 1.0)区间内的一个随机数:" + Math.random());System.out.println("返回[0.0, 1.0)区间内的一个随机数:" + Math.random());System.out.println("返回一个2~11间的随机整数 = " + (int) (2 + Math.random() * (11 - 2 + 1)));System.out.println("返回一个2~11间的随机整数 = " + (int) (2 + Math.random() * (11 - 2 + 1)));System.out.println("===============================");//8 —— static double random()System.out.println("3.2 和 2.3中的最大值 = " + Math.max(3.2, 2.3));System.out.println("-2.01 和 -1.99中的最大值 = " + Math.max(-2.01, -1.99));System.out.println("2333 和 3333中的最大值 = " + Math.max(2333, 3333));System.out.println("-666 和 11中的最大值 = " + Math.max(-666, 11));System.out.println("===============================");//9 —— static double random()System.out.println("3.2 和 2.3中的最小值 = " + Math.min(3.2, 2.3));System.out.println("-2.01 和 -1.99中的最小值 = " + Math.min(-2.01, -1.99));System.out.println("2333 和 3333中的最小值 = " + Math.min(2333, 3333));System.out.println("-666 和 11中的最小值 = " + Math.min(-666, 11));}
}

运行结果 :


四、System类简介

System类属于java.base模块,java.lang包下,如下 :

我们再来看看System类的源码,如下 :

同样,System类不可被继承(final修饰),不可被实例化(构造器私有)。


五、System类常用方法

1.static void exit(int status)

退出当前程序,结束正在运行的java虚拟机。形参= 0表示以正常状态退出。

Δ演示 :

以System_类为演示类,代码如下 :

package csdn.knowledge.api.System_Math;public class System_ {public static void main(String[] args) {//演示 : System类常用方法//1.exit()System.out.println("CSDN yyds!");System.exit(0);System.out.println("这句话能否输出?");}
}

运行结果 :

可以看到,在执行exit语句后,下面的输出语句未能执行。

2.static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

第一眼看到这函数是不是有点懵😂?雀氏,我们平时并不常见这种形参有这么多的情况。

该方法可以用于数组的拷贝,可以将原数组中的指定内容拷贝到指定新数组中的指定位置。

PS : 平时我们拷贝数组更多使用的是Arrays类中的copyOf方法,实际上copyOf方法在底层调用的就是System类中的arraycopy方法。大家有兴趣可以去看看Arrays类的源码或者Debug一下,我这儿就不演示了,这个话题要是说起来就没完没了了。

具体每个形参有什么作用,源码中也作了批注,如下 :

/**
Params:src – the source array. srcPos – starting position in the source array. dest – the destination array. destPos – starting position in the destination data. length – the number of array elements to be copied.
*/

当然,up还是相信大家的英文水平的😎。不过为了凑点字数,还是给大家翻译解读一下。如下 :

第一个形参src —— 代表了数据来源的数组,即原数组。
第二个形参srcPos —— 代表了你要从原数组的哪个位置(索引)处开始拷贝。
第三个形参dest —— 代表了接收数据的目的地数组,即新数组。
第四个形参destPos —— 代表了你想在新数组的哪个位置(索引)处存放拷贝过来的内容。
第五个形参length —— 代表了原数组中你想拷贝的内容的长度。

所以,该方法总的意思就是"把src数组中从srcPos索引开始共length个元素拷贝到dest数组中的从destPos索引开始处"

实际上,我们往往使用"System.arraycopy(array1, 0, array2, 0, array1.length())"的格式,即将原数组中的内容全部拷贝至新数组。

Δ演示 :

仍以System_类为演示类,代码如下 :

package csdn.knowledge.api.System_Math;import java.util.Arrays;public class System_ {public static void main(String[] args) {//演示 : System类常用方法//2.arraycopy()int[] array1 = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int[] array2 = new int[array1.length];System.arraycopy(array1, 0, array2, 0, array1.length);System.out.println("拷贝后的新数组array2 = " + Arrays.toString(array2));int[] array3 = new int[25];System.arraycopy(array1, 0, array3, 11, 10);System.out.println("拷贝后的新数组array3 = " + Arrays.toString(array3));int[] array4 = new int[5];System.arraycopy(array1, 2, array4, 0, 3);System.out.println("拷贝后的新数组array4 = " + Arrays.toString(array4));}
}

运行结果 :

PS :

①如果你的目的地数组(新数组)的长度小于你想拷贝的内容的长度,IDEA会报ArrayIndexOutOfBoundsException,如下图所示 :

②如果原数组与新数组类型不兼容,IDEA会报ArrayStoreException,如下图所示 :

3.static long currentTimeMillis()

返回当前时间点距离1970年1月1日午夜12:00时间点的毫秒数。

有小伙伴儿可能会有疑问,为啥子是1970-1-1捏?

诺,我直接把百度结果给你搬过来。如下图所示 :

Δ演示 :

以System_类为演示类,代码如下 :

package csdn.knowledge.api.System_Math;import java.util.Arrays;public class System_ {public static void main(String[] args) {//演示 : System类常用方法//3.currentTimeMillis()Long time_Start = System.currentTimeMillis();System.out.println("当前时间距离1970-1-1-12:00的毫秒数 = " + time_Start);for (int i = 0; i < 10; i++) {System.out.print("牛逼 ");}Long time_End = System.currentTimeMillis();System.out.println("\n执行完牛逼for循环用了多少毫秒?" + (time_End - time_Start));}
}

运行结果 :


六、总结

🆗,以上就是关于Math类 和 System类的全部内容了。希望这篇博文的内容分享,能给大家带来帮助。总的来看,目前阶段这两个常用类对于大家来说,更多在于如何使用它,偏向于应用。大家不需要扣太细,有兴趣倒是可以把我们之前讲过的String类,StringBuffer类,StringBuilder类的底层去扣一扣,但现阶段也是浅尝辄止就好。API专题的下一小节,up准备来讲讲Date类 和 Calander类,我们不见不散😆。 感谢阅读!

相关文章:

java Math类 和 System类 详解(通俗易懂)

Math类介绍Math类常用方法及演示System类简介System类常用方法及演示一、前言本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类&#xff0c; 内容包括Math类介绍、Math类常用方法、System类介绍&#xff0c;System类常用方法。该小节内容基本不涉…...

软件回归测试是什么?

一、软件回归测试是什么? 软件回归测试作为软件生命周期的一个组成部分&#xff0c;在整个软件测试过程中占有很大的工作量比重&#xff0c;软件开发的各个阶段都会进行多次回归测试。回归测试是指修改了旧代码后&#xff0c;重新进行测试以确认修改没有引入新的错误或导致其…...

TwinCAT3中ModbusTCP Server和C# Client连接

目录 一、硬件环境 1、设置PLC的ip地址 2、ModbusTCP软件安装 3、PLC操作系统防火墙设置 4、网络助手连接PLC 二、创建PLC工程 1、创建寄存器读写变量 2、添加ModbusTCP授权 3、激活和运行工程 三、ModbusTCP数据协议说明 1、写单个寄存器 2、读寄存器 &#xff08;1&…...

【上传项目代码到Git详细步骤】

1.下载安装Git到电脑上&#xff08;这里我之前已经安装好了&#xff0c;就不细说了&#xff09;2.进入控制台安装好后右键点击桌面空白部分会多出两个菜单选项&#xff0c;点击第二个Git Bash Here&#xff08;点击第一个你会爆炸&#xff09;会弹出一个git控制台&#xff0c;如…...

C++回顾(十五)—— 类模板

15.1 为什么要有类模板 类模板用于实现类所需数据的类型参数化类模板在表示如数组、表、图等数据结构显得特别重要&#xff0c;这些数据结构的表示和算法不受所包含的元素类型的影响 15.2 单个类模板语法 注意&#xff1a;类模板的创建对象一定要显示调用&#xff08;指明类型…...

【JavaEE初阶】第四节.文件操作 和 IO (下篇)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言三、文件内容的操作 3.1 读文件 3.1.1 使用字节流读文件 3.2 写文件 3.2.1 使用字节流写文件 …...

华为OD机试用Python实现 -【分解质因数】 2023Q1A

华为OD机试题 本篇题目:分解质因数题目示例 1输入输出示例 2输入输出Code代码编写思路最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南...

博客项目

文章目录1. 创建项目2. 数据库设计3. 前置任务3.1 拦截器3.2 统一数据格式3.3 创建一个 Constant3.4 统一异常处理3.5 密码加密4. 功能实现4.1 登录功能4.2 注册功能4.3 博客列表页 &#xff08;功能实现&#xff09;4.3.1 左侧框4.3.2 右侧框 (分页功能 页面显示)4.4 博客详情…...

C++基础了解-20-C++类 对象

C 类 & 对象 一、C 类 & 对象 C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。 类用于指定对象的形式&#xff0c;它包含了数据表示法和用于处理数据的方法。类中的数据和方法…...

多态与虚(函数)表

前言续接上回&#xff08;继承&#xff09;&#xff0c;我们了解了继承是如何通过虚基表&#xff0c;来解决派生类和父类有相同的成员变量的情况&#xff0c;但是类和对象中可不只有成员变量&#xff0c;如果成员函数也有同名&#xff0c;更或者如果我们想在访问不同情况&#…...

云舟案例︱视频孪生技术赋能城市安全综合管理场景,提升城市数智化水平

随着城市化发展进程的加快&#xff0c;人口不断膨胀&#xff0c;社会安全隐患等问题日益突出&#xff0c;成为困扰城市建设与管理的重要难题。针对各类社会治安突出问题&#xff0c;城市管理部门积极推进城市信息化建设&#xff0c;视频监控等各类信息化采集手段为城市数字化管…...

OpenFOAM 自定义gcc和openmpi安装

Compile Logs 编译很多次了但是好久不编还是会容易遗漏细节步骤&#xff0c;谨以为记。 使用自己编译的编译器和openmpi而不是系统自带的 库来完成对OF 的编译 依赖包安装 编译 GCC 编译 openmpi 编译OF 1依赖包安装 先 sudo apt-get install update当然&#xff0c;然后安…...

2023年3.8女神节买台灯怎么挑选?台灯用什么样的比较好

最近女神节&#xff0c;祝广大女性朋友们节日快乐啊。娱乐之余&#xff0c;一些实用的东西也是非常适合作为礼物送给女性朋友哦&#xff0c;台灯就是其中一个不错的选择。 台灯作为一种智能家居产品&#xff0c;不仅可见点缀卧室房间装饰&#xff0c;晚上的时候开启小范围照明&…...

近亿美元:人工心脏龙头永仁心医疗完成超大额A轮融资

近日&#xff0c;永仁心医疗器械有限公司&#xff08;以下简称“永仁心医疗”&#xff09;完成近一亿美元A轮融资&#xff0c;由北京科兴中维生物技术有限公司&#xff08;SINOVAC科兴&#xff09;领投&#xff0c;太平&#xff08;深圳&#xff09;医疗健康产业私募股权投资基…...

群智能优化计算中的混沌映射

经实验证明&#xff0c;采用混沌映射产生随机数的适应度函数值有明显提高&#xff0c;用混沌映射取代常规的均匀分布的随机数发生器可以得到更好的结果&#xff0c;特别是搜索空间中有许多局部解时&#xff0c;更容易搜索到全局最优解&#xff0c;利用混沌序列进行种群初始化、…...

【LeetCode】剑指 Offer 25. 合并两个排序的链表 p145 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof/ 1. 题目介绍&#xff08;25. 合并两个排序的链表&#xff09; 输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 【测试用例】&#xf…...

如何应对危害机房安全的这几个常见要素?

随着现代化进程的推进&#xff0c;各行业对计算机的依赖性日益增高&#xff0c;计算机系统已经成为业务系统的重要组成部分。 在这种情况下&#xff0c;一旦机房设备出现故障&#xff0c;就会影响机房的正常运行&#xff0c;造成严重后果。尤其是银行、证券、海关等需要实时数据…...

【bug】antd全局的主题色样式被覆盖,被修改为`antd`默认的主题色

背景&#xff1a; 项目本身修改了主题色,配置如下: // umi配置文件 export default {theme: {primary-color: #2F54EB, // 全局主色}, };需要对图片上传组件做封装,并在项目中统一引用,如下 import { TdsUpload } from tdsComponents;环境信息 node tiandstiandsdeMacBook…...

MySQL DDL表操作【入门到精通】

目录 一、查询创建 1、查询当前数据库所有表 2、查看指定表结构 3、查询指定表的建表语句 4、创建表结构 二、数据类型 1、数值类型 2、字符串类型 3、日期时间类型 三、表操作-案例 设计一张员工信息表&#xff0c;要求如下&#xff1a; 对应的建表语句如下&#…...

《MySQL系列-InnoDB引擎28》表-约束详细介绍

约束 1 数据完整性 关系型数据库系统和文件系统的一个不同点是&#xff0c;关系数据库本身能保证存储数据的完整性&#xff0c;不需要应用程序的控制&#xff0c;而文件系统一般需要在程序端进行控制。当前几乎所有的关系型数据库都提供约束(constraint)机制&#xff0c;该机制…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...