Math
1.Math是什么?
-
Java提供的类,里面的方法都是静态方法;
-
Math类包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。
2.Math的方法怎么用?
- 类名.方法名
3.Math的作用
- 对数字进行各种运算, 如求最大值、最小值、指数、对数等。
4.演示math类的基本使用
public static void main(String[] args) {
//因为方法都是静态的 直接使用类名.调用即可
//求两个整数的最大值
int rs1 = Math.max(10, 20);
System.out.println(rs1);
//求两个整数的最小值
int rs2 = Math.min(100, 200);
System.out.println(rs2);
//Math m = new Math(); //希望通过Math类的无参构造方法创建对象, 报错就可以肯定没有无参构造方法
//如果没有无参 那么就一定有 有参构造
}
5.思考题
Math类可以创建对象?
不可以创建对象,Math类的构造方法私有化。开发者可以直接通过类名加方法名的方式来调用Math类的静态方法,而不需要创建Math类的对象。
System
1.System是什么?
-
Java提供的类,里面的方法都是静态方法
-
System类包含一些和系统相关的方法,如退出虚拟机,获取系统时间,数组拷贝等。
2.System的方法怎么用?
- 类名.方法名
3.System的作用
- 包含一些和系统相关的方法,如退出虚拟机,获取系统时间,数组拷贝等。
4.演示System类的基本使用
代码一:演示System常用的方法
/**
* 演示System常用的方法
*/
public class SystemTest {
public static void main(String[] args) {
//public static void exit(int status)终止当前运行的Java 虚拟机,非零表示异常终止
int a = 20;
if (a == 10){
//退出虚拟机
System.exit(0);
}
System.out.println("编程是一门艺术 积累的越多 技术越好 将来的空间越大");
//public static long currentTimeMillis()返回当前时间(以毫秒为单位)
long startTime = System.currentTimeMillis();
String str = "";
for (int i = 0; i < 10000; i++) {
str += i;
}
long endTime = System.currentTimeMillis();
System.out.println("字符串拼接1W次用时:"+(endTime - startTime));
//arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组copy
//要拷贝数组的元素 最好有两个数组
int[] arr1 = {9587, 9527, 4399};
// 0 1 2
//创建一个长度为5的数组 但是都是默认值
int[] arr2 = new int[5];
// 0 1 2 3 4
//需求: 将arr1 这个数组的前面两个元素 拷贝到 arr2数组的最后两个位置上
System.arraycopy(arr1, 0, arr2, 3, 2);
//遍历arr2
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
}
代码二:定义工具类操作数组
1.定义工具类:
方法一:判断两个int类型的数组是否相等;
方法二:将int类型的数组按照指定的格式拼接 最后返回。
/**
* 操作数组的工具类
*/
public class ArrayUtil {
/**
* 私有构造方法
*/
private ArrayUtil() {
}
/**
* 方法一: 判断两个int类型的数组是否相等
* 方法的参数: 两个int类型的数组
* 方法的返回值: 要告诉调用者数组是否相等 boolean
*/
public static boolean checkArray(int[] arr1, int[] arr2){
//判断数组的长度是否一样 如果不一样直接返回false即可
if (arr1.length != arr2.length){
return false;
}
//比较两个数组的内容 随便遍历一个数组即可
for (int i = 0; i < arr1.length; i++) {
//如果有一个元素不相等 就直接返回false
if (arr1[i] != arr2[i]){
return false;
}
}
//如果循环结束了 还没有return false 就说明这两个数组的内容是一样的 那么就return true
return true;
}
/**
* 方法二: 将int类型的数组按照指定的格式拼接 最后返回
* 方法的参数: int类型的数组
* 方法的返回值: String
*/
public static String getString(int[] arr){
//定义一个字符串 用于拼接数组的内容
String str = "【";
//遍历数组
for (int i = 0; i < arr.length; i++) {
//判断是否到了数组的最后一个索引位置
if (i == arr.length-1){
//先拼接元素 然后再拼接】
str += arr[i];
str += "】";
}else { //那么先拼接数组的元素 再拼接逗号和空格
str += arr[i];
str += ", ";
}
}
return str; //当循环结束后 返回 str 即可
}
}
2.定义测试类操作工具类:
public class UtilTest {
public static void main(String[] args) {
//直接使用工具类的类名.方法名
int[] a = {11,22,33};
int[] b = {11,22};
//调用方法 判断两个数组的内容是否一样
boolean rs1 = ArrayUtil.checkArray(a, b);
System.out.println(rs1);
System.out.println("==============");
//调用方法将数组的内容转成字符串
String rs2 = ArrayUtil.getString(a);
System.out.println(rs2);
}
}
5.思考题
System可以创建对象?
不可以创建对象,System类的构造方法私有化。
Java为什么要把Math、System的构造都私有?
- 工具类。
- 工具类的好处: 提高了代码的复用性;调用方便,提高了开发效率。
工具类为什么要用静态方法,而不是用实例方法?
- 实例方法需要创建对象来调用,会浪费内存。
能自定义工具类?
- 必须可以。
- 建议:私有构造, 所有方法定义为静态方法