day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

Math类

java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。

基本运算的方法

day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

 方法演示,代码示例

public class MyTest {
    public static void main(String[] args) {
        //public static int abs​(int a):返回参数的绝对值
        System.out.println(Math.abs(88));//88
        System.out.println(Math.abs(-88));//88

        //public static double ceil​(double a):返回大于或等于参数的最小double值,等于一个整数
        System.out.println(Math.ceil(12.34));//13.0
        System.out.println(Math.ceil(12.56));//13.0

        //public static double floor​(double a):返回小于或等于参数的最大double值,等于一个整数
        System.out.println(Math.floor(12.34));//12.0
        System.out.println(Math.floor(12.56));//12.0

        //public static int round​(float a):按照四舍五入返回最接近参数的int
        System.out.println(Math.round(12.34F));//12
        System.out.println(Math.round(12.56F));//13

        //public static int max​(int a,int b):返回两个int值中的较大值
        System.out.println(Math.max(66, 88));//88

        //public static int min​(int a,int b):返回两个int值中的较小值
        System.out.println(Math.min(66, 88));//66
        //public static double pow​(double a,double b):返回a的b次幂的值
        System.out.println(Math.pow(2.0, 3.0));//8.0

        //public static double random​():返回值为double的正值,[0.0,1.0)
        System.out.println((int) (Math.random() * 100) + 1);//18
    }
}

请使用 Math 相关的API,计算在 -10.8 到 5.9 之间,绝对值大于 6 或者小于 2.1 的整数有多少个?

public class MathTest {
    public static void main(String[] args) {
        // 定义最小值
        double min = -10.8;
        // 定义最大值
        double max = 5.9;
        // 定义变量计数 
        int count = 0;
        // 范围内循环
        for (double i = Math.ceil(min); i <= max; i++) {
            // 获取绝对值并判断
            if (Math.abs(i) > 6 || Math.abs(i) < 2.1) {
                // 计数
                count++;
            }
        }
        System.out.println("个数为: " + count + " 个");//个数为: 9 个
    }
}

System类

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

常用成员方法

  • void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将数组中指定的数据拷贝到另一个数组中。数组的拷贝动作是系统级的,性能很高。System.arraycopy方法具有5个参数,含义分别为:

day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

需求:将src数组中前3个元素,复制到dest数组的前3个位置上复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
import java.util.Arrays;

public class Test {

    public static void main(String[] args) {
        int[] src = new int[]{1, 2, 3, 4, 5};
        int[] dest = new int[]{6, 7, 8, 9, 10};
        System.arraycopy(src, 0, dest, 0, 3);
            
        // 代码运行后:两个数组中的元素发生了变化 src数组元素[1,2,3,4,5] dest数组元素[1,2,3,9,10] 
        System.out.println(Arrays.toString(src));//[1, 2, 3, 4, 5]
        System.out.println(Arrays.toString(dest));//[1, 2, 3, 9, 10]


    }
}
  • native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
import java.util.Arrays;

public class Test {
    //计算输出1-10000 耗时多少
    public static void main(String[] args) {
        // 获取开始的时间节点
        long start = System.currentTimeMillis();
        for (int i = 1; i <= 10000; i++) {
            System.out.println(i);
        }
        // 获取代码运行结束后的时间节点
        long end = System.currentTimeMillis();
        System.out.println("共耗时:" + (end - start) + "毫秒");
    }

}
  • void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
  • void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。

Object类 

概述:Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份。如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。为什么子类构造方法中会默认访问父类的无参构造方法,因为他们的*父类Object中,只有无参构造方法。

Object类中的主要结构

 day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

常用方法摘要

  • public String toString() :返回该对象的字符串表示。
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。在IntelliJ IDEA中,可以点击 Code 菜单中的 Generate... ,也可以使用快捷键 alt+insert ,点击 toString() 选项。选择需要包含的成员变量并确定。在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。
  • public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。

equals调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。如果没有覆盖重写equals方法,那么Object类中默认进行 == 运算符的对象地址比较,只要不是同一个对象,结果必然为false。如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。在IntelliJ IDEA中,可以使用 Code 菜单中的 Generate… 选项,也可以使用快捷键 alt+insert ,并选择 equals() and hashCode() 进行自动代码生成。

Objects类 

在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:
  • public static boolean equals(Object a, Object b) :判断两个对象是否相等。

我们可以查看一下源码,学习一下:

day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

 Arrays工具类

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。 其所有方法均为静态方法,调用起来非常简单。 

常用方法

 day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

 方法演示,代码如下

import java.util.Arrays;

//请使用 Arrays 相关的API,将一个随机字符串中的所有字符升序排列,并倒序打印。
public class Test {
    public static void main(String[] args) {
        // 定义随机的字符串
        String line = "ysKUreaytWTRHsgFdSAoiwery6rdq";
        // 转换为字符数组
        char[] chars = line.toCharArray();
        // 升序排序
        Arrays.sort(chars);
        // 反向遍历打印
        for (int i = chars.length - 1; i >= 0; i--) {
            System.out.print(chars[i] + " "); //y y y w t s s r r r q o i g e e d d a W U T S R K H F A 6 

        }

    }
}

包装类

Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:

day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

装箱与拆箱

基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

  • 装箱:从基本类型转换为对应的包装类对象。
  • 拆箱:从包装类对象转换为对应的基本类型。

基本类型转换为String 

  • 方式一:直接在数字后加一个空字符串(建议)
  • 方式二:通过String类静态方法valueOf() 

String转换为int

  • 方式一:先将字符串数字转成Integer,再调用valueOf()方法
  • 方式二:通过Integer静态方法parseInt()进行转换 
总结:基本类型、包装类与String类间的转换,如下图所示 day17_常用API(Math类丶System类丶Object类 丶Objects类丶 Arrays工具类丶包装类 )

案例需求

有一个字符串:“91 27 46 38 50”,请写程序实现最终输出结果是:“27 38 46 50 91”
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        //定义一个字符串
        String s = "91 27 46 38 50";
        //把字符串中的数字数据存储到一个int类型的数组中
        String[] strArray = s.split(" ");
        //定义一个int数组,把 String[] 数组中的每一个元素存储到 int 数组中
        int[] arr = new int[strArray.length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(strArray[i]);
        }
        //对 int 数组进行排序
        Arrays.sort(arr);
        //把排序后的int数组中的元素进行拼接得到一个字符串,这里拼接采用StringBuilder来实现
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(" ");
            }
        }
        String result = sb.toString();
        //输出结果
        System.out.println(result);
    }
}
上一篇:Linux基础命令---文本统计wc


下一篇:python学习笔记,视频day17-文件处理