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

news2024/9/28 17:35:17
  • 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类,我们不见不散 😆。 感谢阅读!

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

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

相关文章

【教程】你现在还不知道微软的New Bing?你out了,快点进来看

哈喽啊&#xff0c;大家好&#xff0c;好久不见&#xff0c;我是木易巷&#xff01; 不禁感叹&#xff0c;AI人工智能时代真的已经来临&#xff01; 目前&#xff0c;谷歌和微软就各自面向大众的产品发布了重大公告。谷歌推出了一款名为Bard实验性对话式 AI 服务&#xff0c;而…

Python开发入门之了解Python高阶函数

上段时间有小伙伴询问&#xff1a;高阶函数的问题&#xff0c;今天小编就带大家一起来看一看&#xff1a; 一、什么是高阶函数? 高阶函数是在Python中一个非常有用的功能函数&#xff0c;所谓高阶函数就是一个函数可以用来接收另一个函数作为参数&#xff0c;这样的函数叫做…

扬帆优配|数字经济刮起“东风”,龙头晋级7连板

今日两市共40只涨停股&#xff0c;主要集中于数字经济、6G板块&#xff0c;上一个交易日涨停股为29股&#xff1b;除掉18只ST股及3只一字板新股&#xff0c;共19股涨停。另外&#xff0c;4股封板未遂&#xff0c;整体封板率为83%。 6股封单金额超亿元 从收盘涨停板封单量来看&…

第54章 图片URL的后端获取

1 注意&#xff1a; 在.NetCore WebApi框架中&#xff0c;在默认情况下由于没有集成“UseStaticFiles”内置管道中间件方法&#xff0c;如果想要通过图片URL显示图片&#xff0c;由会显示“404”错误&#xff0c;必须先把“UseStaticFiles”内置管道中间件方法集成到.NetCore W…

安装MySQL数据库8.0服务实例

前言 之前尝试去安装了MySQL5.7的社区版本&#xff0c;今天来安装MySQL8.0的版本&#xff0c;并且以两种方式进行安装&#xff0c;一个是通过RPM包的安装&#xff0c;另一个则是编译的方式。 一. 前期准备 查看服务器IP [rootlocalhost ~]# hostname -I 192.168.161.166 19…

js中window自带的四舍五入toFixed方法中的坑以及解决办法

Hello&#xff0c;各位&#xff0c;我胡汉三~啊呸&#xff0c;我又回来啦&#xff0c;还改了名&#xff0c;换了头像&#xff0c;哈哈哈&#xff01;时隔这么长时间不更新了&#xff0c;太忙了&#xff0c;平时笔记都记在了自己的电脑上&#xff0c;从今天起&#xff0c;继续更…

vxe-grid 全局自定义filter过滤器,支持字典过滤

一、vxe-table的全局筛选器filters的实现 官网例子&#xff1a;https://vxetable.cn/#/table/renderer/filter 进入之后&#xff1a;我们可以参照例子自行实现&#xff0c;也可以下载它的源码&#xff0c;进行调整 下载好后并解压&#xff0c;用vscode将解压后的文件打开。全局…

CRM系统中的营销自动化能解决什么问题

CRM客户管理系统营销自动化的范围远远超出了人们的认知。许多人认为它只是自动化完成重复和乏味的任务来减少营销人员的工作量。虽然这确实占了很大一部分&#xff0c;但它真正的价值在于提高潜客转化&#xff0c;增加业务收入。那么&#xff0c;什么是CRM系统营销自动化&#…

195、【动态规划】AcWing —— 91. 最短Hamilton路径(C++版本)

题目描述 原题链接&#xff1a;91. 最短Hamilton路径 解题思路 动态规划五步曲&#xff1a; &#xff08;1&#xff09;dp[i][j]含义&#xff1a; 到达点j并且状态为i时&#xff0c;具有的最短路径长度&#xff0c;其中状态j用状态压缩二进制的方式表示。j中从0-n-1位分别对…

【玩转c++】List讲解和模拟底层实现

本期主题&#xff1a;list的讲解和模拟实现博客主页&#xff1a;小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐1.list的介绍和使用1.1.list的介绍1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

Good Idea, 利用MySQL JSON特性优化千万级文库表

&#x1f473;我亲爱的各位大佬们好&#x1f618;&#x1f618;&#x1f618; ♨️本篇文章记录的为 利用MySQL JSON特性优化千万级文库表 相关内容&#xff0c;适合在学Java的小白,帮助新手快速上手,也适合复习中&#xff0c;面试中的大佬&#x1f649;&#x1f649;&#x1f…

常见问题整理1

目录 偏差和方差 欠拟合underfitting 过拟合overfitting 梯度消失和梯度爆炸 归一化 偏差和方差 偏差&#xff1a;算法期望预测和真实预测之间的偏差程度。反应的是模型本身的拟合能力。 方差&#xff1a;度量了同等大小的训练集的变动导致学习性能的变化&#xff0c;刻画…

万字长文带你走进MySql优化(系统层面优化、软件层面优化、SQL层面优化)

文章目录系统层面优化采用分布式架构使用缓存使用搜索引擎软件层面优化调整 MySQL 参数配置定期清理无用数据创建索引创建索引普通索引唯一索引全文索引组合索引空间索引主键索引外键索引索引前缀适合创建索引的场景不适合创建索引的场景优化表结构分库分表SQL优化explain执行计…

Python3-File(文件) 方法

Python3 File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件&#xff0c;并返回文件对象。 在对文件进行处理过程都需要使用到这个函数&#xff0c;如果该文件无法被打开&#xff0c;会抛出 OSError。 注意&#xff1a;使用 open() 方法一定要保证关闭文件对…

Nowcoder .链表分割

文章目录哨兵位节点哨兵位节点 链表分割 小于X 尾插到一个新链表 大于等于X 尾插到另一个链表 最后将两个链表链接起来 需要注意的细节&#xff1a;将第一个链表的尾与第二个链表的头相连接&#xff0c;再返回连接后的整个链表的头&#xff08;哨兵位头节点的下一个&#xff0…

ECharts 环形图组件封装

一、ECharts引入1.安装echarts包npm install echarts --save2.引入echarts这里就演示全局引入了&#xff0c;挂载到vue全局&#xff0c;后面使用时&#xff0c;直接使用 $echartsimport * as echarts from echarts Vue.prototype.$echarts echarts二、写echarts组件这里演示环…

【蓝桥杯嵌入式】PWM的设置,原理图解析与代码实现(第十一届省赛为例)——STM32

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…

Lombok 常用注解

文章目录简介MAVEN 依赖常用的注解1. Data 注解 :2. Setter 注解&#xff1a;3.Getter 注解&#xff1a;4.Log4j or Slf4j 注解5.NoArgsConstructor注解&#xff1a;6.AllArgsConstructor注解&#xff1a;7.RequiredArgsConstructor注解:8.Builder注解&#xff1a;9.Cleanup注解…

全国青少年软件编程(Scratch)等级考试一级真题——2019.12

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;一级&#xff09;分数&#xff1a;100 题数&#xff1a;37一、单选题(共25题&#xff0c;每题2分&#xff0c;共50分)1.下列关于舞台的描述&#xff0c;不正确的是&#xff1f;&#xff08; &#xff09…

DMHS搭建DMDSC 2节点集群同步到单库

DMHS搭建DMDSC 2节点集群同步到单库环境介绍1 安装DMOCI1.1 关闭数据库实例服务1.2 将DMOCI 复制到源端与目的端的数据库bin目录1.3 对数据库bin 执行目录文件更改用户属组和权限2 启动源数据库服务并配置数据库实例参数2.1 使用DMCSSM启动集群实例2.2 DMDSC源其中一个节点执行…