什么是工具类?很好理解首先它是一个工具能完成某项功能
。
比如螺丝刀它是一个工具,能拧动螺丝。
在Java中工具类就是能完成某项功能的类。
比如定义一个数组工具类
(ArrayTool),要求这个类无需创建对象就可以使用方法,且不可以创建对象,类包含的功能有,该类中没有主方法:
1、数组的最大值
获取
2、数组的最小值
获取
3、数组的两个元素交换
4、数组的遍历
5、数组的反转
(当然这些功能在JDK里面有我们试着学习自己创建一个工具类)
PS :不实例化的原因
也就是不创建对象的原因是:如果要实例化一个工具类,就需要一定的内存空间
,工具类提供的是静态方法,通过类就能调用,所以不必浪费内存去实例化工具类对象。
public class ArrayTool { //这是我们定义的工具类
// 无需创建对象既可使用方法,且不可以创建对象
//方法是静态的
//不可以创建对象,要么是抽象类 要么是将构造方法私有化
private ArrayTool() { //提供一个无参构造器方便我们调用
}
//
// 1、数组的最大值获取
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
//2、数组的最小值获取
public static int getMin(int[] arr) {
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (min > arr[i]) {
min = arr[i];
}
}
return min;
}
//3、数组的两个元素交换
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//4、数组的遍历
public static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//5、数组的反转
public static void reverse(int[] arr) {
for (int i = 0, j = arr.length - 1; i < j; i++, j--) {
swap(arr, i, j);
}
}
}
然后我们写一个测试类(Test)测试一下
public class Test {
public static void main(String[] args) {
//int类型的数组
int[] arr = {2,3,5,1,55}; //我们创建一个数组
System.out.println(ArrayTool.getMax(arr)); //调用我们的最大值输出一下
//输出最大值是55
System.out.println(ArrayTool.getMin(arr)); //调用我们的最小值输出一下
//输出最小值是1
ArrayTool.swap(arr,2,4); //交换第三和第五给元素
ArrayTool.print(arr);//经过交换后遍历这个数组
//输出 2 3 55 1 5
ArrayTool.reverse(arr);
ArrayTool.print(arr);
//输出 5 1 55 2 3
}
}
在实际中我我们创建工具类常常是XXXUtils的命名规则
比如以下是一个时间类(DateUtil),
功能
1、yyyy-MM-dd HH:mm格式转成yyyyMMddHH格式
2、获取指定日期的凌晨
3、时间增加N分钟
4、时间递增N小时
5、获取时间菜单
6、时间转成yyyyMMddHH
7、时间转换为yyyy-MM-dd HH:mm:ss格式
如下就是一个时间转换的一个完整的工具类
package com.bao.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class DateUtil {
/***
* 从yyyy-MM-dd HH:mm格式转成yyyyMMddHH格式
* @param dateStr
* @return
*/
public static String formatStr(String dateStr){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
try {
Date date = simpleDateFormat.parse(dateStr);
simpleDateFormat = new SimpleDateFormat("yyyyMMddHH");
return simpleDateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/***
* 获取指定日期的凌晨
* @return
*/
public static Date toDayStartHour(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date start = calendar.getTime();
return start;
}
/***
* 时间增加N分钟
* @param date
* @param minutes
* @return
*/
public static Date addDateMinutes(Date date,int minutes){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, minutes);// 24小时制
date = calendar.getTime();
return date;
}
/***
* 时间递增N小时
* @param hour
* @return
*/
public static Date addDateHour(Date date,int hour){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR, hour);// 24小时制
date = calendar.getTime();
return date;
}
/***
* 获取时间菜单
* @return
*/
public static List<Date> getDateMenus(){
//定义一个List<Date>集合,存储所有时间段
List<Date> dates = new ArrayList<Date>();
//循环12次
Date date = toDayStartHour(new Date()); //凌晨
for (int i = 0; i <12 ; i++) {
//每次递增2小时,将每次递增的时间存入到List<Date>集合中
dates.add(addDateHour(date,i*2));
}
//判断当前时间属于哪个时间范围
Date now = new Date();
for (Date cdate : dates) {
//开始时间<=当前时间<开始时间+2小时
if(cdate.getTime()<=now.getTime() && now.getTime()<addDateHour(cdate,2).getTime()){
now = cdate;
break;
}
}
//当前需要显示的时间菜单
List<Date> dateMenus = new ArrayList<Date>();
for (int i = 0; i <5 ; i++) {
dateMenus.add(addDateHour(now,i*2));
}
return dateMenus;
}
/***
* 时间转成yyyyMMddHH
* @param date
* @return
*/
public static String date2Str(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHH");
return simpleDateFormat.format(date);
}
/**
* 时间转换为yyyy-MM-dd HH:mm:ss格式
* @param
*/
public static String date2StrFull(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(date);
}
public static void main(String[] args) {
//存储数据结果
List<Date> dateList = new ArrayList<>();
//获取到本日的凌晨时间点
Date startHour = toDayStartHour(new Date());
//循环12次
for(int i=0;i<12;i++){
dateList.add(addDateHour(startHour,i*2));
}
for (Date date : dateList) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println(format);
}
}
}