关于java工具类的理解 为啥java要提出个工具类的概念,按照面向对象的思想为啥不直接把工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java工具类的理解 为啥java要提出个工具类的概念,按照面向对象的思想为啥不直接把工具相关的知识,希望对你有一定的参考价值。

关于java工具类的理解 为什么java要提出个工具类的概念,按照面向对象的思想为什么不直接把工具类写成是需要实例化去用的类?为什么要将方法和变量都写成静态的?这样有什么好处?

工具类其实就是对于String,Collection,IO等常用类的功能的扩展。比如IO读写文件。其实大多数时候我希望有一个文件路径,然后调个方法就直接得到文件内容(字符串或者字节数组形式)。

如果没有工具类,那么你每个读文件的地方都有一段重复的代码。所以,你肯定会被这个功能提取出来。那么,你提取出来放哪儿呀?要知道这个功能可是在任何类都能调用的。所以,我们就放在FileUtil里面了。

这样,你以后读取文件时,你就找FileUtil的read方法,直接调用即可。

为什么要将方法和变量都写成静态的。因为,这些方法我只是想调用一下,不需要牵扯工具类中的任何属性和变量,所以,我就没有必要实例化了(new)。既然不需要实例化了,那么就用静态就行了。
参考技术A 工具类,顾名思义,工具嘛,哪里用哪里调咯,你如果是非static的,你调用的时候还要去new一下,这new一下是要消耗内存的。

用static修饰的都是属于类成员,类成员可以直接调用的,不是用static修饰的,必须使用类的对象去调用,你觉得哪个简单一些?
参考技术B 1、首先明确他是根据java自带的对象和方法开发出来的工具

2、可以用来查询java相关的独享和方法

3、有点是方便使用和查询

4、java常用的工具类例如有Object类、Character类、String类

JAVA 日期工具类的总结

  一般,在项目中,我们会会经常使用到日期的各种方式的处理,在各个业务逻辑操作中,都需要相关的日期操作,因此,实现项目中的日期工具类的提出,还是十分重要的,下面,就项目中常用到的日期的相关操作方式,做了一个小的工具类,方便项目使用,也方便以后的复用和查询.下面见代码:

/**
 * 
 * 〈一句话功能简述〉<br>
 * 〈功能详细描述〉 日期工具类
 * 
 * @author 12061799
 * @see [相关类/方法](可选)
 * @since [产品/模块版本] (可选)
 */
public class DateUtil {

    // 日期格式 年.
    public static final String YEAR_FORMAT = "yyyy";

    // 默认日期格式.
    public static final String DEFALT_DATE_FORMAT = "yyyy-MM-dd";

    // 默认时间格式.带时分秒
    public static final String DEFUALT_TIMESTAMPE_FORMAT = "yyyy-MM-dd hh:mm:ss sss";

    // 时间格式yyyyMMddHHmmssSSS.
    public static final String DATE_FORMATE_YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";

    // 时间格式yyyy-MM-dd HH:mm:ss.
    public static final String DATE_FORMATE_YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss";

    // 时间格式yyMMdd.
    public static final String DATE_FORMATE_YYMMDD = "yyMMdd";

    // 时间格式DATE_FORMATE_YYYYMMDD.
    public static final String DATE_FORMATE_YYYYMMDD = "yyyyMMdd";

    // 时间格式yyyyMMddHHmmssSSS.
    public static final String DATE_FORMATE_YYMMDDHHMMSS = "yyMMddHHmmss";

    /**
     * private constructor
     */
    private DateUtil() {

    }

    /**
     * 取得现在时间.
     * 
     * @return 现在时间
     */
    public static String getCurrentSqlTimestampString() {
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(DEFUALT_TIMESTAMPE_FORMAT);
        return sdf.format(today);
    }

    /**
     * 取得指定格式的时间格式字符串
     * 
     * @return 现在时间
     */
    public static String getDateStringByFormat(String format) {
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(today);
    }

    /**
     * 将传入的时间转换为指定时间格式字符串.
     * 
     * @param time 传入时间
     * @param dateFormat 时间格式
     * @return 时间字符串
     */
    public static String formatTimeStamp(Timestamp time, String dateFormat) {
        if (time == null) {
            return "";
        }

        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        return sdf.format(time);
    }

    /**
     * 取得现在时间.
     * 
     * @return 现在时间
     */
    public static Timestamp getCurrentSqlTimestamp() {
        return new Timestamp(System.currentTimeMillis());
    }

    /**
     * 取得今天日期字符串.
     * 
     * @return 今天日期字符串
     */
    public static String getCurrentDay() {
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(DEFALT_DATE_FORMAT);
        return sdf.format(today);
    }

    /**
     * 取得今天日期+时间字符串.
     * 
     * @return 今天日期字符串 YYYY-MM-dd HH:mm:ss
     */
    public static String getCurrentDayTime() {
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMATE_YYYYMMDDHHMMSS);
        return sdf.format(today);
    }

    /**
     * 将传入的时间转换为默认时间格式字符串.
     * 
     * @param time 传入时间
     * @return 时间字符串
     */
    public static String formatTimeStampDefualt(Timestamp time) {
        if (time == null) {
            return "";
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DEFUALT_TIMESTAMPE_FORMAT);
        return sdf.format(time);
    }

    /**
     * 将传入日期转换为默认格式字符串.
     * 
     * @param date 传入日期
     * @return 日期字符串
     */
    public static String formatDateDefault(Date date) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DEFALT_DATE_FORMAT);
        return sdf.format(date);
    }

    /**
     * 功能描述: 根据指定的格式化规则返回当前日期
     * 
     * @param string
     * @return [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static String getCurrentDate(String formater) {
        SimpleDateFormat format = new SimpleDateFormat(formater);
        return format.format(new Date());
    }

    /**
     * 将传入日期转换为指定格式字符串.
     * 
     * @param date 传入日期
     * @param dateFormat 时间格式
     * @return 日期字符串
     */
    public static String formatDateByDateFormate(Date date, String dateFormat) {
        if (date == null) {
            return null;
        }

        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        return sdf.format(date);
    }

    /**
     * 取得当前年 .
     * 
     * @return 当前年
     */
    public static String getCurrentYear() {
        Date today = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(YEAR_FORMAT);
        return sdf.format(today);
    }

    public static Date formatDate(String date) throws ParseException {
        DateFormat df = new SimpleDateFormat(DEFALT_DATE_FORMAT);
        return df.parse(date);
    }

    /**
     * 
     * 功能描述: <br>
     * 计算距今天指定天数的日期
     * 
     * @param days
     * @return
     * @since 20130630
     */
    public static String getDateAfterDays(int days) {
        Calendar date = Calendar.getInstance();// today
        date.add(Calendar.DATE, days);
        SimpleDateFormat simpleDate = new SimpleDateFormat(DEFALT_DATE_FORMAT);
        return simpleDate.format(date.getTime());
    }

    /**
     * 在指定的日期的前几天或后几天
     * 
     * @param source 源日期(yyyy-MM-dd)
     * @param days 指定的天数,正负皆可
     * @return
     * @throws ParseException
     */
    public static String addDays(String source, int days) {
        Date date = null;
        try {
            date = formatDate(source);
        } catch (ParseException e) {
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, days);
        SimpleDateFormat dateFormat = new SimpleDateFormat(DEFALT_DATE_FORMAT);
        return dateFormat.format(calendar.getTime());
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉校验正确的日期格式
     * 
     * @param str
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static boolean isValidDate(String str, String format) {
        boolean convertSuccess = true;
        // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
        SimpleDateFormat sf = new SimpleDateFormat(format);
        try {
            // 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
            sf.setLenient(false);
            sf.parse(str);
        } catch (ParseException e) {
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            convertSuccess = false;
        }
        return convertSuccess;
    }

    /**
     * 
     * 功能描述: <br>
     * 〈功能详细描述〉计算时间相隔的天数
     *
     * @param beginDateStr
     * @param endDateStr
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public static long getDaySub(String beginDateStr, String endDateStr) {
        long day = 0;
        SimpleDateFormat format = new SimpleDateFormat(DateUtil.DEFALT_DATE_FORMAT);
        Date beginDate;
        Date endDate;
        try {
            beginDate = format.parse(beginDateStr);
            endDate = format.parse(endDateStr);
            day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
        } catch (ParseException e) {
            throw new RuntimeException("传入日期参数有误!",e);
        }
        return day;
    }
}

工具类中的方法,一般都是定义成共有的静态防范,方便其他的业务的注入工具类,调用类的方法.注意:

1,首先定义了一系列的日期格式字符串,方便获取任意的格式的时间字符串

2,定义了一些操作方法,方便获取时间信息,以及一些计算操作,

3.静态的方法,直接使用类名调用即可,非常适用项目中的实时调用.

以上是关于关于java工具类的理解 为啥java要提出个工具类的概念,按照面向对象的思想为啥不直接把工具的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 日期工具类的总结

Java千问25:关于Java类的构造方法,看这一篇就够了!

Java关于画图工具常用颜色预留区的颜色添加

关于Spring-Data-Jpa的一些理解

Java泛型

Java泛型