Java基础(19)之类常用API(常用类)

1. Math

Math

1.1 Math类概述

在这里插入图片描述

1.2 Math类的常用方法

返回绝对值:是正数是时候直接返回参数本身,是负值的时候返回的是参数的相反数。
参数是10时返回的是10,参数是-10的时候返回的是10。
Math类的三个方法比较: floor() ceil() round()
在这里插入图片描述

2. System

System

2.1 System的常用方法

currentTimeMillis计算时间
在这里插入图片描述
方法示例:
exit方法:
在这里插入图片描述
运行结果:
结果为只有一个开始没有接受,因为在中间Java虚拟机已经被终止了。
在这里插入图片描述

3. Object

Object

3.1 Object类的概述

在这里插入图片描述

3.2 Object的常用方法

在这里插入图片描述

3.2.1 toString

toString方法示例:

创建一个学生类对象:
有变量,构造方法,get,set方法。
在这里插入图片描述
测试类:
测试类中为name和age变量赋值,然后输出s,会输出什么那?
在这里插入图片描述
运行结果:
输出的是一串和变量没有任何关系的字符
在这里插入图片描述
那为什么会输出这样一段字符那?
接下来就要看System.out.println();中println的源码了。
在这里插入图片描述

如果我们在类中重写了toString方法就不会输出这样的一串字符了。
一般可以使用快捷键生成
在这里插入图片描述

3.2.2 equals

创建一个学生类:
类中有变量和构造方法,get,set
在这里插入图片描述
测试类:
比较两个对象的内容是否相同
在这里插入图片描述
运行结果:
false可见()是实现不了不交两个对象的内容是否相同的
因为s1和s2都是new出来的,代表的是一个地址值,比较地址值是看不出内容是否相同的。
在这里插入图片描述
将(
)注释,使用equals方法比较
在这里插入图片描述
运行结果:
输出的还是false
为什么还是false?往下看equals的源码
在这里插入图片描述
归根到底还是用的(==)方法,所以也是行不通的。
所以想要判断内容对象的内容是否相同只能重写equals方法了。
在这里插入图片描述
在类中重写equals方法,直接快捷键生成即可,快捷键生成会生成两个方法,把hashCode方法删除即可。
然后再运行测试类:
确实变成了true,是为什么那?往下看
在这里插入图片描述
结果是true
在这里插入图片描述

4. Arrays

4.1 冒泡排序

在这里插入图片描述
将下面的身高由低到高排列,最后d会出现在最左边,b会出现在最右边。
第一次比较,a和b比较,大的往后排,所以这次不变。现在的位置还是a b c d e
第二次比较,b和c比较,大的往后排,将b和c调换位置。现在的位置是a c b d e
第三次比较,b和d比较,大的往后排,将b和d调换位置。现在的位置是a c d b e
第四次比较,b和e比较,大的往后排,将b和e调换位置。现在的位置是a c d e b
接下来的比较b就不会参与了,是a c d e四个比较,和上面的比较过程一样。
在这里插入图片描述
在这里插入图片描述
代码示例:

public class ArrayDemo {

	public static void main(String[] args) {
		// 定义一组数组
		int[] arr = { 12, 34, 63, 11 };
		System.out.println("排序前" + arrayToString(arr));

		// length-1是为了防止索引越界;
		// 因为在比较相邻的两个数据时,第二个比较数据会是{i+1},
		// 如果第二个比较的数据正好是最后一个数据时,
		// 再{i+1}就会超出本来的索引。
		for (int i = 0; i < arr.length - 1; i++) {
			// 比较两个相邻的数据,如果第一个大于第二个就进入方法进行位置更替
			if (arr[i] > arr[i + 1]) {
				// 先将arr[i]中的数据赋值给temp
				int temp = arr[i];
				// 将arr[i+1]的值赋给arr[i]
				arr[i] = arr[i + 1];
				// 将temp,也就是原来的arr[i]的值赋给arr[i+1]
				arr[i + 1] = temp;
			}
		}
		System.out.println("第一次比较" + arrayToString(arr));
		
		//因为每次比较都要少一个数据,所以这里每次都要多减一个
		for (int i = 0; i < arr.length - 1 - 1; i++) {
			if (arr[i] > arr[i + 1]) {
				int temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
			}
		}
		System.out.println("第二次比较" + arrayToString(arr));
		
		for (int i = 0; i < arr.length - 1 - 2; i++) {
			if (arr[i] > arr[i + 1]) {
				int temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
			}
		}
		System.out.println("第三次比较" + arrayToString(arr));
		
	}

	/// 把数组中的元素按照指定的规则组成一个字符串: [元素1,元素2,...]
	public static String arrayToString(int[] arr) {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < arr.length; i++) {
			// 判断数组是否是最后一个,最后一个则不加逗号。
			if (i == arr.length - 1) {// 因为arr.length判断的长度是从1开始的,但是计算机的长度是从0开始的,所以要-1
				sb.append(arr[i]);
			} else {
				sb.append(arr[i] + ",");
			}
		}
		sb.append("]");
		// 将StringBuilder转化为String
		String s = sb.toString();
		return s;
	}
}

运行结果:
第三次的结果就是我们想要的结果了,从小到大排列。
但是这样的写法太麻烦,还能继续优化一下,向下看。
在这里插入图片描述
优化后的代码:
未优化的代码做的事情就是比较n-1次,所以可以直接用for循环表示,在for循环中进行比较。

public class ArrayDemo {

	public static void main(String[] args) {
		// 定义一组数组
		int[] arr = { 12, 34, 63, 11 };
		System.out.println("排序前" + arrayToString(arr));
		
		//冒泡排序循环比较的次数是n-1,所以这里的循环次数也要-1
		for (int i = 0; i < arr.length - 1; i++) {
			//这里直接-i,就可以了,因为外面的循坏正好是从0开始一直到循环次数
			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("排序后的:" + arrayToString(arr));
		
	}

	/// 把数组中的元素按照指定的规则组成一个字符串: [元素1,元素2,...]
	public static String arrayToString(int[] arr) {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < arr.length; i++) {
			// 判断数组是否是最后一个,最后一个则不加逗号。
			if (i == arr.length - 1) {// 因为arr.length判断的长度是从1开始的,但是计算机的长度是从0开始的,所以要-1
				sb.append(arr[i]);
			} else {
				sb.append(arr[i] + ",");
			}
		}
		sb.append("]");
		// 将StringBuilder转化为String
		String s = sb.toString();
		return s;
	}
}

4.2 Arrays类的概述和常用方法

Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法

使用时导包:import java.util.Arrays
Arrays类的常用方法
在这里插入图片描述
代码示例:
在这里插入图片描述
运行结果:
在这里插入图片描述

5. 基本类型包装类

基本类型和包装类型的区别

5.1 基本类型包装类概述

除了char和int,剩下的包装类都是基本数据类型首字母大写。
在这里插入图片描述

5.2 Integer类的概述和使用

过时的方法也可以使用,但是不推荐使用。
在这里插入图片描述
注意:根据String值创建Interger对象,String值只能是数字。
在这里插入图片描述

5.3 int和String的相互转换

在这里插入图片描述
代码示例:
在这里插入图片描述
运行结果:
在这里插入图片描述

5.4 自动装箱和拆箱

在这里插入图片描述
代码示例:

装箱:
valueOf就是返回一个指定int值的Integet的实例,
Integer i = Integer.valueOf(100),
将100装箱成一个Integer实例
在这里插入图片描述
拆箱:
.intValue(),将包装类转换为基本数据类型就是拆箱。
将ii的值转为int类型的过程就是拆箱。
在这里插入图片描述
自动拆箱:
在这里插入图片描述
运行结果:
还是300
在这里插入图片描述
最后说个小问题:
如果Integer是null,装箱则会报错空指针异常,所以建议先判断一下判断是否Integet是否为空再决定是否执行。
在这里插入图片描述
在这里插入图片描述

6. 日期类

时间类

6.1 Date类概述和构造方法

Date
在这里插入图片描述

6.2 Date类的常用方法

在这里插入图片描述

6.3 SimpleDateFormat类概述

在这里插入图片描述

6.4 c类的构造方法

在这里插入图片描述

6.5 SimpleDateFormat格式化和解析日期

在这里插入图片描述
代码示例:

格式化:
将Date类型格式成String类型
在这里插入图片描述
运行结果:
这是方法默认的日期格式,还可以自己定义日期格式,向下看。
在这里插入图片描述
定义日期格式:
在这里插入图片描述
运行结果:
在这里插入图片描述
还是不好看,继续优化:
在这里插入图片描述
运行结果:
这样就看着比较顺眼,具体想怎么改自己定义。
在这里插入图片描述

解析:
将String类型解析成Date类型
字符串的模式和自定义的模式一定要一致,否则会报解析异常。
在这里插入图片描述

6.6 Calendar类的概述

Calendar
Calendar:它为特定瞬间与一组诸如 YEAR(年)、MONTH(月)、DAY_OF_MONTH(日期)、HOUR(时) 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
在这里插入图片描述
在这里插入图片描述
代码示例:
在使用Calendar获取月份的时候,要注意Calendar获取月份是从0开始的,所以要+1。
在这里插入图片描述
运行结果:
在这里插入图片描述

6.7 Calendar类的常用方法

get方法参考上面的代码示例
剩下的两个方法往下看
在这里插入图片描述
代码示例:
add方法:通过add方法我们可以给年份,月,日期,加上或减去时间值。

当前时间
在这里插入图片描述
在这里插入图片描述
运行结果:
计算机年份是2048
在这里插入图片描述
需求:10年后的5天前
如果要增加年份或日期就不需要-号了,直接数字就可以了。
在这里插入图片描述
运行结果:
在这里插入图片描述

set方法
set方法设置当前日历的年月日
月是从0开始的
在这里插入图片描述
运行结果:
Calendar的月是从0开始的,所以这里的12
在这里插入图片描述

发布了50 篇原创文章 · 获赞 13 · 访问量 1843

猜你喜欢

转载自blog.csdn.net/qq_43581078/article/details/104467185