Java黑马程序员基础中API方法大全

API方法大全

java如何math中的方法求一个数的平方根立方根?

平方根:使用Math.sqrt()方法。

double num = 25.0;
 double squareRoot = Math.sqrt(num);
 System.out.println("平方根为:" + squareRoot);

立方根:使用Math.cbrt()方法。

double num = 27.0;
 double cubeRoot = Math.cbrt(num);
 System.out.println("立方根为:" + cubeRoot);

需要注意的是,Math类中的sqrt()和cbrt()方法都返回一个double类型的值,因此返回的结果可能是一个无限小数。如果需要得到一个精确的平方根或立方根,可以使用其他算法或库来进行计算。

通法:用Math.pow()方法。

在Java中,Math.pow()方法的签名如下:

 public static double pow(double a, double b)

这个方法用于计算参数a的参数b次方的结果。返回的是一个double类型的值。需要注意的是,参数ab都是double类型,返回值也是double类型。

如何对一个数进行取整操作?

工具:调用Math类中的方法

Math类中提供了三种与取整有关的方法:ceil(该方法表示向上取整)、floor(该方法表示向下取整)、round(该方法表示四舍五入)

如何调用?

直接通过math类进行调用代码示例如下:

public static void main(String[] args) {
         double number = 5.5;
         double rounded = Math.ceil(number);
         System.out.println(rounded);//6.0
         rounded = Math.floor(number);
         System.out.println(rounded);//5.0
         rounded = Math.round(number);
         System.out.println(rounded);//6.0
         rounded = Math.round(-5.5);
         System.out.println(rounded);//-5.0
         
     }

如何得出程序运行时间?

工具:System.currentTimeMillis()

System.currentTimeMillis() 是 Java 中 System 类的一个静态方法,它返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的当前时间的长整型(long)表示。这个方法没有参数。

其签名如下:

public static long currentTimeMillis()

要使用Java中的System类来获取程序运行时间,可以使用System.currentTimeMillis()方法获取当前时间戳(以毫秒为单位),并在程序开始时记录下这个时间戳。然后在程序结束时再次调用这个方法,将两次时间戳相减,即可得到程序运行的时间。

以下是一个示例代码:

 public class ProgramRunTime {
     public static void main(String[] args) {
         // 记录程序开始时间
         long startTime = System.currentTimeMillis();
 ​
         // 执行程序代码
         // ...
 ​
         // 记录程序结束时间
         long endTime = System.currentTimeMillis();
 ​
         // 计算程序运行时间
         long runTime = endTime - startTime;
 ​
         // 输出程序运行时间
         System.out.println("程序运行时间:" + runTime + "毫秒");
     }
 }

如何进行基本数据类型数组(字符串数组也可以用)拷贝?

1.使用System.arraycopy()方法:

System.arraycopy() 方法的签名如下:

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

参数说明:

  • src:源数组,要从中复制元素的数组。

  • srcPos:开始复制的源数组中的位置。

  • dest:目标数组,要将元素复制到的数组。

  • destPos:开始放置复制元素的目标数组中的位置。

  • length:要复制的元素数量。

这是最常用且最有效的方法,因为它在底层进行优化,并且可以处理任何类型的数组。以下是一个示例:

int[] originalArray = {1, 2, 3, 4, 5};
 int[] copiedArray = new int[originalArray.length];
 System.arraycopy(originalArray, 0, copiedArray, 0, originalArray.length);
2.用clone()进行浅拷贝(不推荐)

对于对象数组,可以使用clone()方法。但需要注意的是,clone()方法创建的是浅拷贝。

 String[] a = {"abc","def","ghi","jkl"};
 String[] b = a.clone();
 a[0] = "mno";
 System.out.println(a[0]);//输出为mno!!!!
 System.out.println(b[0]);//输出为abc!!!!

如何把对象进行拷贝?

浅拷贝与深拷贝细节

  1. 要重写object中的clone方法

  2. 要让JavaBean类实现cloneable接口

  3. 创建本体对象调用clone即可。

浅拷贝的局限性

浅拷贝的局限性在于除字符串以外的引用数据类型(字符串存在于串池中)例如数组的拷贝。本体中如果存在除字符串以外的引用数据类型,则拷贝出来的复制体并没有完全独立,仍然会因为本体中元素的改变而改变。

int[][]arr = {
   
   {1,2,3},{4,5,6}};
 int[][]brr = arr.clone();
 System.out.println(arr);
 System.out.println(brr);
 arr[0][0] = 0;
 for (int i = 0; i < 2; i++) {
      for (int j = 0; j < 3; j++) {
         System.out.print(arr[i][j]+",");
     }
 }
 System.out.println();
 for (int i = 0; i < 2; i++) {
     for (int j = 0; j < 3; j++) {
         System.out.print(brr[i][j]+",");
     }
 }

上述代码控制台输出为:

[[I@2f4d3709 [[I@4e50df2e 0,2,3,4,5,6, 0,2,3,4,5,6,

深拷贝

调用第三方方法。

为什么要重写对象中的tostring方法?或者说如何获取对象的字符串表达形式?

途径:重写对象中的toString()方法

如果不重写,则对象中的tostring方法是继承父类object中的方法的,而父类中的tostring返回的字符串是对象的地址值,而我们想要的是对象中的内容,所以要重写。

class Person {
     private String name;
     private int age;
 ​
     public Person(String name, int age) {
         this.name = name;
         this.age = age;
     }
 ​
     // 重写 toString() 方法
     @Override
     public String toString() {
         return "Person{name='" + name + "', age=" + age + "}";
     }
 }

如何判断两个对象(包括字符串)是否相等?

途径1:重写对象中的equals()方法

如果不重写,则调用父类中的equals()方法,而父类中的equals()方法使用==号来进行比较的,也就是只会比较对象的地址值是否相等。而我们要比较的是对象中的属性值是否相等,则我们要重写对象中的equals()方法。

//重写equals()方法
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
         Person person = (Person) o;//要记得强转,因为此时的o是object类型的无法调用子类的属性
         return age == person.age && objects.equals(name,person.name);
     }

途径2:用objects中的equals方法

方法签名:
 
public static boolean equals(Object a, Object b)
方法源码:
public static boolean equals(Object a, Object b) {
     return (a == b) || (a != null && a.equals(b));//到头来还是会调用a中重写的equals方法。
 }
注意事项:
  1. 方法的底层会判断是a是否为null,如果为null,直接返回false

  2. 如果a不是null,那么就利用a再次调用equals方法,如果a是举例类的person类的就要重写person类中的equals方法。否则还是比较两个对象的地址值。

如果是字符串,String类已经重写了 equals 方法,比较两个字符串不能使用“ == ”,直接使用equals 。

如何用好BigInteger来获取整数

BigInteger 是一个可以表示任意精度的整数的类,它在 Java 中提供了大整数运算的支持。以下是使用 BigInteger 来获取数字的一些方法:

  1. 创建 BigInteger 对象: 您可以使用 BigInteger 类的构造函数来创建一个 BigInteger 对象。例如,如果您有一个 long 类型的数字,您可以使用 BigInteger.valueOf(long val) 方法将其转换为 BigInteger 对象。而且此方法有一个好处就是如果传递到数据在-16~16之间那么方法会返回已经创建好的对象,可以减少内存。

    javaBigInteger bigInt = BigInteger.valueOf(12345);
  2. 从字符串获取数字: 如果您有一个表示数字的字符串,您可以使用 new BigInteger(String val) 构造函数来创建一个 BigInteger 对象。

 javaString numberString = "12345";
 BigInteger bigInt = new BigInteger(numberString);

如何用好BigInteger来进行数字运算

BigInteger的方法表

divideAndRemainder方法:

可以用数组的方式来接受divideAndRemainder返回的两个值,示例代码如下:

public static void main(String[] args) {
         BigInteger dividend = new BigInteger("12345678901234567890");
         BigInteger divisor = new BigInteger("9876543210987654321");
 ​
         BigInteger[] result = dividend.divideAndRemainder(divisor);
 ​
         System.out.println("商: " + result[0]);
         System.out.println("余数: " + result[1]);
     }

如何运用BigDecimal来进行小数进行可控精度操作

如何获得一个很大的小数

方法名 描述
BigDecimal a = new BigDecimal(double val) 创建一个具有给定double值的BigDecimal,不推荐会有精度丢失。
BigDecimal a = new BigDecimal(String val) 创建一个具有给定字符串表示的BigDecimal。
BigDecimal a = new BigDecimal.valueOf(double val) 创建一个具有给定double值的BigDecimal.

如果数字不大没有超出double的范围,建议用:BigDecimal a = BigDecimal.valueOf(double val),而且此方法有一个好处就是如果传递到数据在0~10之间那么方法会返回已经创建好的对象,可以减少内存。 如果超出了double的范围则建议使用:BigDecimal a =BigDecimal(String val)

BigDecimal方法大全

方法中的除法:

如果调用倒数第二行的除法方法,如果遇到除不尽的情况,代码会报错,所以要用倒数第一行的方法但在此之前我们要了解一下Java中的舍入方式有哪些

Java里RoundingMode中的舍入方式、

注意:这里的舍入方式是针对要保留几位有效数字而言的,如果保留控制不到位,则等于没写。如果要保留3位有效数字,则会对小数点后4位进行舍入处理。示例代码如下:

 
public static void main(String[] args){
         BigDecimal a = BigDecimal.valueOf(-1.25);
         System.out.println(a.divide(new BigDecimal("2"),3,RoundingMode.HALF_UP));//-0.625,舍入等于没写
         System.out.println(a.divide(new BigDecimal("2"),2,RoundingMode.HALF_UP));//-0.63
         System.out.println(a.divide(new BigDecimal("2"),2,RoundingMode.HALF_DOWN));//-0.62
     }

猜你喜欢

转载自blog.csdn.net/2301_80160619/article/details/136036132