Math类
java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单。基本运算的方法
方法演示,代码示例
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个参数,含义分别为:
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类中的主要结构
常用方法摘要
- public String 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) :判断两个对象是否相等。
我们可以查看一下源码,学习一下:
Arrays工具类
java.util.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提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
- 装箱:从基本类型转换为对应的包装类对象。
- 拆箱:从包装类对象转换为对应的基本类型。
基本类型转换为String
- 方式一:直接在数字后加一个空字符串(建议)
- 方式二:通过String类静态方法valueOf()
String转换为int
- 方式一:先将字符串数字转成Integer,再调用valueOf()方法
- 方式二:通过Integer静态方法parseInt()进行转换
案例需求
有一个字符串:“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); } }