二十一、Java工具类的创建

二十一、Java工具类的创建

什么是工具类?很好理解首先它是一个工具能完成某项功能。

比如螺丝刀它是一个工具,能拧动螺丝。

在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 getDateMenus(){

//定义一个List集合,存储所有时间段

List dates = new ArrayList();

//循环12次

Date date = toDayStartHour(new Date()); //凌晨

for (int i = 0; i <12 ; i++) {

//每次递增2小时,将每次递增的时间存入到List集合中

dates.add(addDateHour(date,i*2));

}

//判断当前时间属于哪个时间范围

Date now = new Date();

for (Date cdate : dates) {

//开始时间<=当前时间<开始时间+2小时

if(cdate.getTime()<=now.getTime() && now.getTime()

now = cdate;

break;

}

}

//当前需要显示的时间菜单

List dateMenus = new ArrayList();

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 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);

}

}

}

相关数据

训练用 SoundSport 无线耳机
生殖器疱疹康复后多久复查?查什么
「诺」字笔顺详解,动画演示,字帖下载

友情链接