一、什么是 API
- API(Application Programming interface)应用程序编程接口
- 简单来说:就是 Java 帮我们已经写好的一些类和方法,我们直接拿过来用就可以了
二、Object 类
1. toString 方法
例如:
public class ToStringDemo {
public static void main(String[] args) {
Student stu = new Student("zhangsan",23);
//如果Student类没有重写toString方法,那么打印的就是stu对象的地址
System.out.println(stu);
//两句代码含义一样
System.out.println(stu.toString());
}
}
2. equals 方法
3. Objects 概述
Objects 类与 Object 还是继承关系,Objects 类是从 JDK 1.7 开始之后才有的。
Objects 的常用方法:
三、Math 类
- 包含执行基本数字运算的方法
常用方法:
四、System 类
- System 的功能是静态的,都是直接用类名调用即可
常用方法:
例如1:
public static void main(String[] args) {
//返回1970年1月1日0时0分0秒,到现在所经历过的毫秒值
//一般可以用来计算程序执行的时间
long start = System.currentTimeMillis();
String s = " ";
for (int i = 0; i < 10000; i++) {
s += i;
}
System.out.println(s);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
例如2:
public static void main(String[] args) {
int[] arr = {11,22,33,44,55,66};
int[] newArr = new int[6];
//数组拷贝
System.arraycopy(arr,0,newArr,0,4);
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
五、BigDecimal 类
- 用于解决小数运算中,出现的不精确的问题
创建对象:
例如:
BigDecimal bd1 = new BigDecimal(0.5);//无法保证精确度,不推荐使用
BigDecimal bd2 = new BigDecimal("0.5");
BigDecimal bd3 = BigDecimal.valueOf(0.5);
常用方法:
例如:
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal bd1 = BigDecimal.valueOf(0.6);
BigDecimal bd2 = BigDecimal.valueOf(0.3);
System.out.println(bd1.add(bd2));//加法
System.out.println(bd1.subtract(bd2));//减法
System.out.println(bd1.multiply(bd2));//乘法
System.out.println(bd1.divide(bd2));//除法
}
}
运行结果为:
0.9
0.3
0.18
2
注意:divide 除法细节
例如:
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal bd1 = BigDecimal.valueOf(10);
BigDecimal bd2 = BigDecimal.valueOf(3);
BigDecimal result = bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP);
System.out.println(result);
/*
result作为BigDecimal的对象,打印时却是一个数,说明BigDecimal重写了toString方法
但是如果想把该数据运用到Math类中的方法,需要转换为普通的数据类型
*/
double a = result.doubleValue();
System.out.println(Math.abs(a));
}
}
运行结果为:
3.33
3.33
六、包装类
- 将基本数据类型,包装成类(变成引用数据类型)
- 变成类,就可以创建对象了,对象就可以调用方法方便的解决问题了
- 8种基本数据类型都有它们所对应的包装类:
- 手动装箱:调用方法,手动将基本数据类型,包装成类
public class IntegerDemo {
public static void main(String[] args) {
/*
1. public Integer(int value):通过构造方法
2. public static Integer valueOf(int i):通过静态方法
*/
int num = 10;
Integer integer1 = new Integer(num);//此方法已过时,不推荐使用
Integer integer2 = Integer.valueOf(num);
System.out.println(integer2);
}
}
- 手动拆箱:调用方法,手动将包装类,拆成(转换)基本数据类型
public class IntegerDemo {
public static void main(String[] args) {
int num = 10;
Integer integer2 = Integer.valueOf(num);
/*
public int intValue():以 int 类型返回该 Integer 的值
*/
int i = integer2.intValue();
System.out.println(i);
}
}
- 自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量
int num = 10;
Integer integer = num;
- 自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量
int num = 10;
Integer integer = num;
int i = integer;
Integer 常用方法:
其它包装类的常用方法与 Integer 类似
练习:
已知字符串 String s = “10,50,30,20,40”; 请将该字符串转换为整数并存入数组。
public class IntegerTest {
public static void main(String[] args) {
String s = "10,50,30,20,40";
//根据逗号作切割
String[] arr = s.split(",");
//准备一个整数数组,用来存储转换以后的数字
int[] Arr = new int[arr.length];
//遍历字符串数组
for (int i = 0; i < arr.length; i++) {
//将数字字符串转换为整数,并存入数组
Arr[i] = Integer.parseInt(arr[i]);
}
for (int i = 0; i < Arr.length; i++) {
System.out.println(Arr[i]);
}
}
}
运行结果为:
10
50
30
20
40
面试题:
public class IntegerTest2 {
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);//true
Integer i3 = 129;
Integer i4 = 129;
System.out.println(i3 == i4);//false
}
}
判断自动装箱范围在 -128 ~ 127 之间
在:不会创建新的对象,而是从底层数组中直接获取
不在:重新 new 出新的 Integer 对象
八、Arrays 工具类
- 数组操作工具类,专门用于操作数组元素
常用方法:
冒泡排序:
import java.util.Arrays;
public class BubbleSort {
/*
冒泡排序:相邻的两个数进行比较,如果第一个比第二个大,就交换他们两个
第一轮:arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] arr[3]-arr[4] 比较4次
第二轮:arr[0]-arr[1] arr[1]-arr[2] arr[2]-arr[3] 比较3次
第三轮:arr[0]-arr[1] arr[1]-arr[2] 比较2次
第四轮:arr[0]-arr[1] 比较1次
*/
public static void main(String[] args) {
int[] arr = {22, 55, 44, 33, 11};
//外循环:控制比较的轮数
for (int i = 0; i < arr.length - 1; i++) {
//内循环:控制比较的次数
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序:
import java.util.Arrays;
public class SelectSort {
/*
选择排序:从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较
第一轮:arr[0]-arr[1] arr[0]-arr[2] arr[0]-arr[3] arr[0]-arr[4]
第二轮:arr[1]-arr[2] arr[1]-arr[3] arr[1]-arr[4]
第三轮:arr[2]-arr[3] arr[2]-arr[4]
第四轮:arr[3]-arr[4]
*/
public static void main(String[] args) {
int[] arr = {22, 55, 44, 33, 11};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
二分查找(折半查找):
public class BinarySearch {
/*
二分查找(折半查找):
前提:数组元素必须是排好序的
思路:1.定义两个变量记录最小索引和最大索引
2.折半的动作不止一次,需要使用循环
条件:while(min <= max)
3.循环中计算出中间索引
4.加入判断
元素如果大于中间元素:min = mid + 1;
元素如果小于中间元素:max = mid - 1;
元素如果等于中间元素:将索引返回(mid)
*/
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55, 66, 77, 88};
int result = binarySearch(arr,88);
System.out.println(result);
}
private static int binarySearch(int[] arr,int num) {
int min = 0;
int max = arr.length - 1;
int mid;
while (min <= max) {
mid = (min + max) / 2;
if (num < arr[mid]) {
max = mid - 1;
}
else if (num > arr[mid]) {
min = mid + 1;
}
else return mid;
}
return -1;
}
}