theme: healer-readable
highlight: a11y-dark
哈喽,各位小伙伴们,你们好呀,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
Java作为一门强大的开发语言,内置了许多基础类库,其中Math类就是其中之一。Math类提供了一些常见的数学函数和常量,方便开发者进行数学运算。
本篇文章将对Java的Math类进行介绍和解析,包括其源代码、应用场景案例、优缺点分析等内容。
摘要
Java的Math类是一个不可变类,其中提供了许多数学运算函数和常量。这些函数包括三角函数、幂函数、指数函数、对数函数、取整函数等。Math类的常量包括π和自然对数e等。
Math类的方法是静态方法,不需要创建Math类的实例即可直接调用。由于是不可变类,Math类的方法不会修改其参数,而是返回计算结果。
Math类
简介
Java的Math类是一个不可变的工具类,提供了许多数学函数和常量。Math类的方法都是静态方法,不需要创建Math类的实例即可直接调用。Math类提供的常量包括π和自然对数e等。
Java的Math类提供了许多常见的数学运算函数,如三角函数、幂函数、指数函数、对数函数、取整函数等。Math类的方法返回值为double类型,如果要使用整型结果,则需要进行类型转换。
除了常见的数学运算函数和常量之外,Math类还提供了一些特殊函数,如随机数函数、最大值函数、最小值函数等。
源代码解析
Math类是Java中的一个final类,即无法被继承。它的源代码如下:
代码语言:java复制public final class Math {
// 省略部分代码
/**
* Returns the trigonometric sine of an angle.
*
* @param a an angle, in radians.
* @return the sine of the argument.
*/
public static native double sin(double a);
// 省略部分代码
/**
* Returns the largest (closest to positive infinity)
* double value that is less than or equal to the argument and is
* equal to a mathematical integer.
* <p>
* Special cases:
* <ul>
* <li>If the argument value is already equal to a mathematical
* integer, then the result is the same as the argument.
* <li>If the argument is NaN or an infinity or positive zero or negative
* zero, then the result is the same as the argument.
* <li>If the argument value is less than zero but greater than -1.0,
* then the result is negative zero.
* </ul>
* Note that the value of {@code Math.floor(x)} is exactly the
* same as the value of {@code -(int)Math.ceil(-x)}.
*
* @param a a value.
* @return the largest (closest to positive infinity)
* floating-point value that less than or equal to the argument
* and is equal to a mathematical integer.
*/
public static double floor(double a) {
return StrictMath.floor(a); // use StrictMath
}
// 省略部分代码
}
Math类,其中包含了很多数学计算相关的方法,如sin、floor等。其中的sin是一个native方法,意味着它的实现是由底层语言(如C/C )提供的,而不是由Java实现的。而floor方法则使用了StrictMath类的实现。
注释中对floor方法进行了详细说明,指出它的功能是返回小于或等于参数值的最大double值,其值等于一个数学整数。在一些特殊情况下,如参数值已经是数学整数、参数值为NaN或无穷大、参数值小于零但大于-1.0等情况,返回结果会有所不同。此外,注释中还提到了Math.floor(x)与-(int)Math.ceil(-x)的等价关系。
总体来说,这段代码为Java程序提供了一些常用的数学计算方法,如三角函数、取整等。
如下是部分源码截图:
应用场景案例
Math类常用于数学计算,比如求平方根、绝对值、最大值、最小值、幂等的计算等等。
以下是一些实际的应用场景案例:
1. 求平方根
代码语言:java复制public class MathTest {
public static void main(String[] args) {
double a = 4;
double result = Math.sqrt(a);
System.out.println(result); // 输出:2.0
}
}
根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。
2. 求绝对值
代码语言:java复制public class MathTest {
public static void main(String[] args) {
double a = -1.5;
double result = Math.abs(a);
System.out.println(result); // 输出:1.5
}
}
根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。
3. 求最大值
代码语言:java复制public class MathTest {
public static void main(String[] args) {
double a = 2.5;
double b = 3.0;
double result = Math.max(a, b);
System.out.println(result); // 输出:3.0
}
}
根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。
优缺点分析
Math类提供了一系列与数学计算相关的方法,可以方便地进行数学计算。而且由于Math类中的方法都是静态的,因此可以直接通过类名调用,方便快捷。另外,Math类的源代码是开源的,可以根据需要进行改进和优化。
但是,Math类并不是线程安全的。如果有多个线程同时调用Math类中的方法,可能会导致意想不到的问题。因此,在多线程环境下,需要采取相应措施(比如使用synchronized关键字)来保证线程安全。
类代码方法介绍
abs
代码语言:java复制public static double abs(double a)
这个方法返回参数的绝对值。如果参数为NaN,则返回NaN。
ceil
代码语言:java复制public static double ceil(double a)
这个方法返回最小的(最接近负无穷大)double值,该值大于等于参数,并等于某个整数。
floor
代码语言:java复制public static double floor(double a)
这个方法返回最大的(最接近正无穷大)double值,该值小于等于参数,并等于某个整数。
max
代码语言:java复制public static double max(double a, double b)
这个方法返回两个参数中的最大值。
min
代码语言:java复制public static double min(double a, double b)
这个方法返回两个参数中的最小值。
pow
代码语言:java复制public static double pow(double a, double b)
这个方法返回第一个参数的第二个参数次幂的值。
round
代码语言:java复制public static long round(double a)
这个方法返回最接近参数的long类型值。结果是四舍五入的。
sin
代码语言:java复制public static double sin(double a)
这个方法返回指定double型参数的正弦值。
sqrt
代码语言:java复制public static double sqrt(double a)
这个方法返回参数的平方根。如果参数小于0,则返回NaN。
测试用例
以下是对Math类中几个常用方法的测试用例:
测试代码演示
代码语言:java复制package com.example.javase.se.classes;
/**
* @Author ms
* @Date 2023-11-02 18:49
*/
public class MathTest {
public static void main(String[] args) {
double a = -1.5;
double result = Math.abs(a);
System.out.println("Absolute value of " a " is " result);
a = 1.5;
result = Math.ceil(a);
System.out.println("Ceiling value of " a " is " result);
a = 1.5;
result = Math.floor(a);
System.out.println("Floor value of " a " is " result);
double b = 2.0;
result = Math.max(a, b);
System.out.println("Maximum value between " a " and " b " is " result);
result = Math.min(a, b);
System.out.println("Minimum value between " a " and " b " is " result);
double x = 2;
double y = 3;
result = Math.pow(x, y);
System.out.println(x " raised to the power of " y " is " result);
a = 1.5;
long roundResult = Math.round(a);
System.out.println("Rounded value of " a " is " roundResult);
double angle = Math.PI / 2;
result = Math.sin(angle);
System.out.println("Sine of " angle " radians is " result);
a = 4;
result = Math.sqrt(a);
System.out.println("Square root of " a " is " result);
}
}
测试结果
根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。
测试代码分析
根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。
该测试用例是一个Java类,名为MathTest,用于演示Java中Math类的一些常用方法。该类中包含了一个名为main的静态方法,代表了程序的入口点。在main方法中,依次调用了Math类中的abs、ceil、floor、max、min、pow、round、sin和sqrt等方法,并输出了对应的结果。
具体来看,第一行定义了一个double类型的变量a,并初始化为-1.5。第二行调用Math类中的abs方法,求出a的绝对值,将结果赋值给result变量。第三行输出结果。这个过程的结果是输出 "Absolute value of -1.5 is 1.5"。
类似地,第四行调用Math类中的ceil方法,对1.5向上取整,将结果赋值给result变量。第五行输出结果。这个过程的结果是输出 "Ceiling value of 1.5 is 2.0"。
第六、七行也类似,调用Math类中的floor方法对1.5向下取整,并输出结果 "Floor value of 1.5 is 1.0"。
第八、九行调用Math类中的max和min方法,求出a和b的最大值和最小值,并依次输出结果 "Maximum value between 1.5 and 2.0 is 2.0" 和 "Minimum value between 1.5 and 2.0 is 1.5"。
第十行调用Math类中的pow方法,求出x的y次方,并输出结果 "2.0 raised to the power of 3.0 is 8.0"。
第十一、十二行调用Math类中的round方法,对1.5进行四舍五入,并输出结果 "Rounded value of 1.5 is 2"。
第十三、十四行调用Math类中的sin和PI常量,求出PI/2的正弦值,并输出结果 "Sine of 1.5707963267948966 radians is 1.0"。
最后,第十五、十六行调用Math类中的sqrt方法,求出4的平方根,并输出结果 "Square root of 4.0 is 2.0"。
小结
本文介绍了Java中的Math类,包括定义、源代码解析、应用场景案例、优缺点分析、类代码方法介绍、测试用例等。Math类提供了一系列与数学计算相关的方法,可以方便地进行数学计算。但是,Math类并不是线程安全的,需要注意线程安全问题。
总结
Java中的Math类是一个不可变的工具类,提供了许多数学函数和常量。Math类的方法都是静态方法,不需要创建Math类的实例即可直接调用。Math类提供的常量包括π和自然对数e等。它为Java程序提供了一些常用的数学计算方法,如三角函数、取整等。 Math类常用于数学计算,比如求平方根、绝对值、最大值、最小值、幂等的计算等等。然而,Math类并不是线程安全的,需要注意线程安全问题。总而言之,Math类是一个非常重要的工具类,常被开发者广泛使用,在使用过程中需要注意线程安全问题。
... ...
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
... ...
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
***
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!