从零开始学习 Java:简单易懂的入门指南之MAth、System(十二)
常见API,MAth、System
- 1 Math类
- 1.1 概述
- 1.2 常见方法
- 1.3 算法小题(质数)
- 1.4 算法小题(自幂数)
- 2 System类
- 2.1 概述
- 2.2 常见方法
1 Math类
1.1 概述
tips:了解内容
查看API文档,我们可以看到API文档中关于Math类的定义如下:
Math类所在包为java.lang包,因此在使用的时候不需要进行导包。并且Math类被final修饰了,因此该类是不能被继承的。
Math类包含执行基本数字运算的方法,我们可以使用Math类完成基本的数学运算。
要想使用Math类我们就需要先创建该类的对象,那么创建对象就需要借助于构造方法。因此我们就需要首先查看一下API文档,看看API文档中针对Math类有没有提供对应的构造方法。通过API文档来查看
一下Math类的成员,如下所示:
在API文档中没有体现可用的构造方法,因此我们就不能直接通过new关键字去创建Math类的对象。同时我们发现Math类中的方法都是静态的,因此在使用的时候我们可以直接通过类名去调用。在Math类中
定义了很多数学运算的方法,但是我们并不可能将所有的方法学习一遍,我们主要学习的就是一些常见的方法。
1.2 常见方法
tips:重点讲解内容
常见方法介绍
我们要学习的Math的常见方法如下所示:
public static int abs(int a) // 返回参数的绝对值
public static double ceil(double a) // 返回大于或等于参数的最小整数
public static double floor(double a) // 返回小于或等于参数的最大整数
public static int round(float a) // 按照四舍五入返回最接近参数的int类型的值
public static int max(int a,int b) // 获取两个int值中的较大值
public static int min(int a,int b) // 获取两个int值中的较小值
public static double pow (double a,double b) // 计算a的b次幂的值
public static double random() // 返回一个[0.0,1.0)的随机值
案例演示
接下来我们就来演示一些这些方法的执行效果,如下所示:
public class MathDemo01 {public static void main(String[] args) {// public static int abs(int a) 返回参数的绝对值System.out.println("-2的绝对值为:" + Math.abs(-2));System.out.println("2的绝对值为:" + Math.abs(2));// public static double ceil(double a) 返回大于或等于参数的最小整数System.out.println("大于或等于23.45的最小整数位:" + Math.ceil(23.45));System.out.println("大于或等于-23.45的最小整数位:" + Math.ceil(-23.45));// public static double floor(double a) 返回小于或等于参数的最大整数System.out.println("小于或等于23.45的最大整数位:" + Math.floor(23.45));System.out.println("小于或等于-23.45的最大整数位:" + Math.floor(-23.45));// public static int round(float a) 按照四舍五入返回最接近参数的intSystem.out.println("23.45四舍五入的结果为:" + Math.round(23.45));System.out.println("23.55四舍五入的结果为:" + Math.round(23.55));// public static int max(int a,int b) 返回两个int值中的较大值System.out.println("23和45的最大值为: " + Math.max(23, 45));// public static int min(int a,int b) 返回两个int值中的较小值System.out.println("12和34的最小值为: " + Math.min(12 , 34));// public static double pow (double a,double b)返回a的b次幂的值System.out.println("2的3次幂计算结果为: " + Math.pow(2,3));// public static double random()返回值为double的正值,[0.0,1.0)System.out.println("获取到的0-1之间的随机数为: " + Math.random());}}
运行程序进行测试,控制台输出结果如下:
-2的绝对值为:2
2的绝对值为:2
大于或等于23.45的最小整数位:24.0
大于或等于-23.45的最小整数位:-23.0
小于或等于23.45的最大整数位:23.0
小于或等于-23.45的最大整数位:-24.0
23.45四舍五入的结果为:23
23.55四舍五入的结果为:24
23和45的最大值为: 45
12和34的最小值为: 12
2的3次幂计算结果为: 8.0
获取到的0-1之间的随机数为: 0.7322484131745958
1.3 算法小题(质数)
需求:
判断一个数是否为一个质数
代码实现:
public class MathDemo2 {public static void main(String[] args) {//判断一个数是否为一个质数System.out.println(isPrime(997));//997 2~996 995次}public static boolean isPrime(int number) {int count = 0;for (int i = 2; i <= Math.sqrt(number); i++) {count++;if (number % i == 0) {return false;}}System.out.println(count);return true;}
}
1.4 算法小题(自幂数)
自幂数,一个n位自然数等于自身各个数位上数字的n次幂之和
举例1:三位数 1^3 + 5^3 + 3^3 = 153
举例2:四位数 1^4 + 6^4 + 3^4 + 4^3 = 1634
如果自幂数是:
- 一位自幂数,也叫做:独身数
- 三位自幂数:水仙花数 四位自幂数:四叶玫瑰数
- 五位自幂数:五角星数 六位自幂数:六合数
- 七位自幂数:北斗七星数 八位自幂数:八仙数
- 九位自幂数:九九重阳数 十位自幂数:十全十美数
//水仙花数:100 ~ 999
int count = 0;
//得到每一个三位数
for (int i = 100; i <= 999; i++) {//个位 十位 百位int ge = i % 10;int shi = i / 10 % 10;int bai = i / 100 % 10;//判断://每一位的三次方之和 跟本身 进行比较。double sum = Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3);if (sum == i) {count++;//System.out.println(i);System.out.println(count);}
}
2 System类
2.1 概述
tips:了解内容
查看API文档,我们可以看到API文档中关于System类的定义如下:
System类所在包为java.lang包,因此在使用的时候不需要进行导包。并且System类被final修饰了,因此该类是不能被继承的。
System包含了系统操作的一些常用的方法。比如获取当前时间所对应的毫秒值,再比如终止当前JVM等等。
要想使用System类我们就需要先创建该类的对象,那么创建对象就需要借助于构造方法。因此我们就需要首先查看一下API文档,看看API文档中针对System类有没有提供对应的构造方法。通过API文档来
查看一下System类的成员,如下所示:
在API文档中没有体现可用的构造方法,因此我们就不能直接通过new关键字去创建System类的对象。同时我们发现System类中的方法都是静态的,因此在使用的时候我们可以直接通过类名去调用(Nested Class Summary内部类或者内部接口的描述)。
2.2 常见方法
tips:重点内容
常见方法介绍
我们要学习的System类中的常见方法如下所示:
public static long currentTimeMillis() // 获取当前时间所对应的毫秒值(当前时间为0时区所对应的时间即就是英国格林尼治天文台旧址所在位置)
public static void exit(int status) // 终止当前正在运行的Java虚拟机,0表示正常退出,非零表示异常退出
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); // 进行数值元素copy
案例演示
接下来我们就来通过一些案例演示一下这些方法的特点。
案例1:演示currentTimeMillis方法
public class SystemDemo01 {public static void main(String[] args) {// 获取当前时间所对应的毫秒值long millis = System.currentTimeMillis();// 输出结果System.out.println("当前时间所对应的毫秒值为:" + millis);}}
运行程序进行测试,控制台的输出结果如下:
当前时间所对应的毫秒值为:1876050298313
获取到当前时间的毫秒值的意义:我们常常来需要统计某一段代码的执行时间。此时我们就可以在执行这段代码之前获取一次时间,在执行完毕以后再次获取一次系统时间,然后计算两个时间的差值,
这个差值就是这段代码执行完毕以后所需要的时间。如下代码所示:
public class SystemDemo2 {public static void main(String[] args) {//判断1~100000之间有多少个质数long start = System.currentTimeMillis();for (int i = 1; i <= 100000; i++) {boolean flag = isPrime2(i);if (flag) {System.out.println(i);}}long end = System.currentTimeMillis();//获取程序运行的总时间System.out.println(end - start); //方式一:1514 毫秒 方式二:71毫秒}//以前判断是否为质数的方式public static boolean isPrime1(int number) {for (int i = 2; i < number; i++) {if (number % i == 0) {return false;}}return true;}//改进之后判断是否为质数的方式(效率高)public static boolean isPrime2(int number) {for (int i = 2; i <= Math.sqrt(number); i++) {if (number % i == 0) {return false;}}return true;}
}
案例2:演示exit方法
public class SystemDemo01 {public static void main(String[] args) {// 输出System.out.println("程序开始执行了.....");// 终止JVMSystem.exit(0);// 输出System.out.println("程序终止了..........");}}
运行程序进行测试,控制台输出结果如下:
程序开始执行了.....
此时可以看到在控制台只输出了"程序开始了…",由于JVM终止了,因此输出"程序终止了…"这段代码没有被执行。
案例3:演示arraycopy方法
方法参数说明:
// src: 源数组
// srcPos: 源数值的开始位置
// dest: 目标数组
// destPos: 目标数组开始位置
// length: 要复制的元素个数
public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
代码如下所示:
public class SystemDemo01 {public static void main(String[] args) {// 定义源数组int[] srcArray = {23 , 45 , 67 , 89 , 14 , 56 } ;// 定义目标数组int[] desArray = new int[10] ;// 进行数组元素的copy: 把srcArray数组中从0索引开始的3个元素,从desArray数组中的1索引开始复制过去System.arraycopy(srcArray , 0 , desArray , 1 , 3);// 遍历目标数组for(int x = 0 ; x < desArray.length ; x++) {if(x != desArray.length - 1) {System.out.print(desArray[x] + ", ");}else {System.out.println(desArray[x]);}}}}
运行程序进行测试,控制台输出结果如下所示:
0, 23, 45, 67, 0, 0, 0, 0, 0, 0
通过控制台输出结果我们可以看到,数组元素的确进行复制了。
使用这个方法我们也可以完成数组元素的删除操作,如下所示:
public class SystemDemo02 {public static void main(String[] args) {// 定义一个数组int[] srcArray = {23 , 45 , 67 , 89 , 14 , 56 } ;// 删除数组中第3个元素(67):要删除67这个元素,我们只需要将67后面的其他元素依次向前进行移动即可System.arraycopy(srcArray , 3 , srcArray , 2 , 3);// 遍历srcArray数组for(int x = 0 ; x < srcArray.length ; x++) {if(x != desArray.length - 1) {System.out.print(srcArray[x] + ", ");}else {System.out.println(srcArray[x]);}}}
}
运行程序进行测试,控制台的输出结果如下所示:
23, 45, 89, 14, 56, 56
通过控制台输出结果我们可以看到此时多出了一个56元素,此时我们只需要将最后一个位置设置为0即可。如下所示:
public class SystemDemo02 {public static void main(String[] args) {// 定义一个数组int[] srcArray = {23 , 45 , 67 , 89 , 14 , 56 } ;// 删除数组中第3个元素(67):要删除67这个元素,我们只需要将67后面的其他元素依次向前进行移动即可System.arraycopy(srcArray , 3 , srcArray , 2 , 3);// 将最后一个位置的元素设置为0srcArray[srcArray.length - 1] = 0 ;// 遍历srcArray数组for(int x = 0 ; x < srcArray.length ; x++) {if(x != srcArray.length - 1 ) {System.out.print(srcArray[x] + ", ");}else {System.out.println(srcArray[x]);}}}
}
运行程序进行测试,控制台输出结果如下所示:
23, 45, 89, 14, 56, 0
此时我们可以看到元素"67"已经被删除掉了。67后面的其他元素依次向前进行移动了一位。
arraycopy方法底层细节:
1.如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错
2.在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型
代码示例:
public class SystemDemo3 {public static void main(String[] args) {//public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝//细节://1.如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错//2.在拷贝的时候需要考虑数组的长度,如果超出范围也会报错//3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型Student s1 = new Student("zhangsan", 23);Student s2 = new Student("lisi", 24);Student s3 = new Student("wangwu", 25);Student[] arr1 = {s1, s2, s3};Person[] arr2 = new Person[3];//把arr1中对象的地址值赋值给arr2中System.arraycopy(arr1, 0, arr2, 0, 3);//遍历数组arr2for (int i = 0; i < arr2.length; i++) {Student stu = (Student) arr2[i];System.out.println(stu.getName() + "," + stu.getAge());}}
}class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}/*** 获取** @return name*/public String getName() {return name;}/*** 设置** @param name*/public void setName(String name) {this.name = name;}/*** 获取** @return age*/public int getAge() {return age;}/*** 设置** @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Person{name = " + name + ", age = " + age + "}";}
}class Student extends Person {public Student() {}public Student(String name, int age) {super(name, age);}
}
后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹
相关文章:

从零开始学习 Java:简单易懂的入门指南之MAth、System(十二)
常见API,MAth、System 1 Math类1.1 概述1.2 常见方法1.3 算法小题(质数)1.4 算法小题(自幂数) 2 System类2.1 概述2.2 常见方法 1 Math类 1.1 概述 tips:了解内容 查看API文档,我们可以看到API文档中关于Math类的定义如下: Math类…...

人工智能原理概述 - ChatGPT 背后的故事
大家好,我是比特桃。如果说 2023 年最火的事情是什么,毫无疑问就是由 ChatGPT 所引领的AI浪潮。今年无论是平日的各种媒体、工作中接触到的项目还是生活中大家讨论的热点,都离不开AI。其实对于互联网行业来说,自从深度学习出来后就…...

【Linux】以太网协议——数据链路层
链路层解决的问题 IP拥有将数据跨网络从一台主机送到另一台主机的能力,但IP并不能保证每次都能够将数据可靠的送到对端主机,因此IP需要上层TCP为其提供可靠性保证,比如数据丢包后TCP可以让IP重新发送数据,最终在TCP提供的可靠性机…...

Neo4j之MATCH基础
1】基本匹配和返回:查找所有节点和关系,返回节点的标签和属性。 MATCH (n) RETURN n;2】条件筛选:查找所有名为 "Alice" 的人物节点。 MATCH (person:Person {name: Alice}) RETURN person;3】关系查询:查找所有和 &q…...

Python实验代码合集
NumPy实验(1) NumPy实验(2) NumPy实验(3) SciPy实验(1) 请结合最小二乘法的原理,利用以前学的Numpy和Python知识,实现最小乘法直线拟合的算法,并测试。 请结合梯度下降的原理,利用以前学的Numpy和Python知识,实现梯度下降法求函数最小值的…...

Less和Sass的原理和用法
一、原理 1.1 Less定义:是一种动态的样式语言,使CSS变成一种动态的语言特性,如变量、继承、运算、函数。Less既可以在客户端上面运行(支持IE6以上版本、Webkit、Firefox),也可以在服务端运行(Node.js) 1.2 SaSS定义:是一种动态样式语言&#…...

c# List<T>.Aggregate
List<T>.Aggregate 方法的定义: public TAccumulate Aggregate<TAccumulate>(TAccumulate seed, Func<TAccumulate, T, TAccumulate> func)参数解析如下: TAccumulate seed:初始累积值,也是累积的起始值(默认…...
软件测试常用工具总结(测试管理、单元测试、接口测试、自动化测试、性能测试、负载测试等)
前言 在软件测试的过程中,多多少少都是会接触到一些测试工具,作为辅助测试用的,以提高测试工作的效率,使用好了测试工具,能对测试起到一个很好的作用,同时,有些公司,也会要求掌握一…...

Hadoop组件
前言 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。具有可靠、高效、可伸缩的特点。 HDFS(hadoop分布式文件系统) 是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。 Mapreduce(分…...

jeecg-boot批量导入问题注意事项
现象: 由于批量导入数据速度很快, 因为数据库中的create time字段的时间可能一样,并且jeecg框架自带的是根据生成时间排序, 因此在前端翻页查询的时候,数据每次排序可能会不一样, 会出现第一页已经出现过一…...

Django图书商城系统实战开发 - 实现会员管理
Django图书商城系统实战开发 - 实现会员管理 在Django图书商城系统中,会员管理是一个重要的功能模块。该模块包括会员信息的展示、编辑和删除等功能。以下是实现会员管理功能的详细步骤和代码示例。 步骤一:设计数据库模型 首先,我们需要设…...

Kafka如何解决消息丢失的问题
在 Kafka 的整个架构中可以总结出消息有三次传递的过程: Producer 端发送消息给 Broker 端Broker 将消息进行并持久化数据Consumer 端从 Broker 将消息拉取并进行消费 在以上这三步中每一步都可能会出现丢失数据的情况, 那么 Kafka 到底在什么情况下才…...

我只记得512天在CSDN的日子
机缘 不知不觉开始写博客已经512天了,在这期间有过因为懒惰想要放弃,也有过写不出优质文章没有阅读量的气馁,也有过学习蛮久却不知道从何开始写起的迷茫,但是最终好在还是坚持了下来,无论好坏坚持总没有错。 写博客的…...

pycharm,VSCode 几个好用的插件
pycharm Tabnine AI Code 可以在编写程序的时候为你提供一些快捷方式,增加编程速度 Chinese 对英文不好的程序员来说是个不错的选择,可以将英文状态下的pycharm变为中文版的 ChatGPT 可以跟ai聊天,ai可以解决你80%的问题 ,也可以帮…...

springboot 使用zookeeper实现分布式ID
添加ZooKeeper依赖:在pom.xml文件中添加ZooKeeper客户端的依赖项。例如,可以使用Apache Curator作为ZooKeeper客户端库: <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</arti…...

git cherry-pick
cherry-pick命令的基本用法 对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并( git merge )。另一种情况是,…...

转行软件测试四个月学习,第一次面试经过分享
我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余&…...

ECS服务器安装docker
为了安装并配置 Docker ,你的系统必须满足下列最低要求: 64 位 Linux 或 Windows 系统 如果使用 Linux ,内核版本必须不低于 3.10 能够使用 sudo 权限的用户 在你系统 BIOS 上启用了 VT(虚拟化技术)支持 on your s…...

高等数学教材啃书汇总重难点(三)微分中值定理与导数的应用
本章节包含多个知识点,一些列微分中值定理是考研证明题的重头戏,而洛必达和泰勒展开则是方法论的天花板难度,虽然对于小题的考察难度较低,整体上仍需重点复习 1.费马引理 2.罗尔定理 3.拉格朗日定理 4.柯西中值定理 5.洛必达法则 …...

域名列表是什么?
域名列表指的是一个网站上所使用的所有域名地址。在互联网发展的今天,拥有一个有效的域名列表对于一个企业或组织来说是非常重要的。本文将围绕着域名列表这一主题展开,并从以下几个方面进行分析。 一、为什么需要域名列表? 首先࿰…...

数据库操作不再困难,MyBatis动态Sql标签解析
系列文章目录 MyBatis缓存原理 Mybatis的CachingExecutor与二级缓存 Mybatis plugin 的使用及原理 MyBatis四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 详解 MyBatisSpringboot 启动到SQL执行全流程 数据库操作不再困难,MyBatis动态S…...

Android 网络编程-网络请求
Android 网络编程-网络请求 文章目录 Android 网络编程-网络请求一、主要内容二、开发网络请求前的基本准备1、查看需要请求的网址是否有效(1)通过网页在线验证(2)使用专用window网咯请求工具(3)编写app代码…...

Mac下全选,使用pynput,怎样调用command键?
Key.command 不行,用Key.cmd 。 win或linux下: with keyboard.pressed(Key.ctrl):keyboard.press(a)time.sleep(1)keyboard.release(a) 那么在mac下就是: with keyboard.pressed(Key.cmd):keyboard.press(a)time.sleep(1)keyboard.rel…...

21款美规奔驰GLS450更换中规高配主机,汉化操作更简单
很多平行进口的奔驰GLS都有这么一个问题,原车的地图在国内定位不了,语音交互功能也识别不了中文,原厂记录仪也减少了,使用起来也是很不方便的。 可以实现以下功能: ①中国地图 ②语音小助手(你好…...

R语言ggplot2 | R语言绘制物种组成面积图(三)
📋文章目录 面积图简介准备数据集加载数据集数据处理数据可视化 利用R语言绘制物种组成图。本文以堆叠面积图的方式与大家分享。 面积图简介 面积图又叫区域图。它是在折线图的基础之上形成的, 它将折线图中折线与自变量坐标轴之间的区域使用颜色或者纹理填充&…...

数据统计与可视化的Dash应用程序
在数据分析和可视化领域,Dash是一个强大的工具,它结合了Python中的数据处理库(如pandas)和交互式可视化库(如Plotly)以及Web应用程序开发框架。本文将介绍如何使用Dash创建一个简单的数据统计和可视化应用程…...

解决并发冲突:Java实现MySQL数据锁定策略
在并发环境下,多个线程同时对MySQL数据库进行读写操作可能会导致数据冲突和不一致的问题。为了解决这些并发冲突,我们可以采用数据锁定策略来保证数据的一致性和完整性。下面将介绍如何使用Java实现MySQL数据锁定策略,以及相关的注意事项和最…...

C++——函数重载及底层原理
函数重载的定义 函数重载: 是函数的一种特殊情况,C允许在同一作用域重声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或者类型,类型的顺序)不同,常用来处理实现功能类似数据结构…...

Ceph入门到精通-Aws Iam(user,role,group,policy,resource)架构图和快速入门
-- Aws Iam(identity,user,role,group,policy,resource,)架构图和快速入门. 【官网】:Cloud Computing Services - Amazon Web Services (AWS) 应用场景 aws 云服务运维,devops过程中经常涉及各项服务,权限,角色的处理。 为了更好的使用各项…...

【kubernetes】k8s高可用集群搭建(三主三从)
目录 【kubernetes】k8s高可用集群搭建(三主三从) 一、服务器设置 二、环境配置 1、关闭防火墙 2、关闭selinux 3、关闭swap 4、修改主机名(根据主机角色不同,做相应修改) 5、主机名映射 6、将桥接的IPv4流量…...