Java 常用工具类

一、时间类 Date

在这里插入图片描述

1、java.util.Calendar(日历类)

Calendar类是一个抽象基类,主要用于日期之间的各种计算

2、java.util.Date

java.util.Date日期格式为:年月日时分秒
java.sql.Date日期格式为:年月日
java.sql.Time日期格式为:时分秒
java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒)

构造函数

(1)public Date()

分配 Date 对象并初始化此对象,以表示分配它系统的时间(精确到毫秒)。

Date d = new Date();
System.out.print(d);  // Wed May 12 22:19:11 CST 2021

(2)public Date(long date)

分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。

Date d=new Date(1000000000000L);
System.out.println(d);      //  Sun Sep 09 09:46:40 CST 2001

(3)public Date(int year, int month, int date)

分配 Date 对象并初始化此对象,以表示由 year、month 和 date 参数指定的一天的开始时间(本地时间晚上 12 时)。
注:Date 类中年份的参数应该是实际需要代表的年份减去1900,月份的参数是实际需要代表的月份减去1以后的值,日的参数应该是实际需要代表的日。如107代表2007,是减去1900得到的数;0代表1月,1代表2月,这里月份是0-11的数字,依此类推;1表示天数,数字范围1-31。

Date d=new Date(121,4,12);
System.out.println(d);      // Wed May 12 00:00:00 CST 2021

(4)public Date(int year, int month, int date, int h, int min, int sec)

分配 Date 对象并初始化此对象,以表示本地时区中由 year、month、date、h、 min 和 sec 参数指定的瞬间。

Date d=new Date(121,4,12,22,30,35);
System.out.println(d);    //   Wed May 12 22:30:35 CST 2021

(5)public Date(String s)

分配 Date 对象并初始化此对象,以表示字符串 s 指出的日期和时间。

Date d=new Date("Wed May 12 22:30:35 CST 2021");
System.out.println(d);    // Wed May 12 22:30:35 CST 2021

3、java.text.DateFormat

它允许进行日期格式化(日期 -> 文本)、分析(文本 -> 日期)和规范化。
它的子类 SimpleDateFormat 类是一个格式化Date 以及解析日期字符串的工具,可以实现 String 到 Date,Date 到String的 互转

(1)Date—> String(format方法)

format方法:将日期类型(java.util.Date)数据格式化为字符串(java.lang.String)

Date d = new Date();
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
String timeStr = ft.format(d);
System.out.println(timeStr);    // 2021-05-12 10:45:10

(2)String—> Date(parse方法)

parse方法:将字符串类型(java.lang.String)解析为日期类型(java.util.Date)

String time = "2021-05-12 22:35:45";
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
Date d = ft.parse(time);
System.out.println(d);    // Wed May 12 22:35:45 CST 2021

二、System 类

System 类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员方法和成员变量都是static(静态)的,所以也可以很方便的调用他。

1、成员变量

(1)in

代表标准输入流(键盘输入)

//标准输入流
public final static InputStream in;

(2)out

代表标准标准输出流(显示器)

//标准输出流
public final static PrintStream out;

(3)err

代表标准错误输出流(显示器)

//标准错误流
public final static PrintStream err;

2、成员方法

(1)getProperty()

获取系统属性。常用的有:
在这里插入图片描述

(2) getenv(String name)

该方法用来根据环境变量的名字获取环境变量。

(3)gc()

java垃圾回收器,这个方法不需要我们去调用,jvm发现系统有未使用的对象,会自己进行执行。通常会有两种情况下会调用gc:当jvm内存不足时会调用;当cpu空闲的时候调用。

(4)exit(int status)

退出虚拟机。exit(int)方法是终止当前正在运行的java虚拟机,参数是状态码。

①该方法用于退出jvm,如果参数是0表示正常退出jvm,非0表示异常退出jvm
退出jvm后,后面的代码就不会执行。无论传0还是传1,Jvm都会退出。
③注意:0或者非0的数据都可以退出Jvm,对于用户而言没有任何区别,对于windows是有作用的,因为如果传非0对于windows而言是异常终止的,如果是正版的操作系统,对于异常退出的软件,需要把这些异常退出的软件信息做成报告发送给微软,微软就可以针对这些问题对系统做出一些修改。
④我们程序员的编程习惯是:如果在try块中退出Jvm,try块里面是没有异常的代码,所以try块中要传0,如果是在catch块里面退出Jvm,我们习惯于用非0退出

三、Scanner 类

java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。

创建 Scanner 对象的基本语法:

Scanner s = new Scanner(System.in);

1、读入字符串

通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据

(1)使用 next 方法:

import java.util.Scanner; 

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据

        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        scan.close();
    }
}

执行以上程序输出结果为:
在这里插入图片描述
(2)使用 nextLine 方法:

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据

        // nextLine方式接收字符串
        System.out.println("nextLine方式接收:");
        // 判断是否还有输入
        if (scan.hasNextLine()) {
            String str2 = scan.nextLine();
            System.out.println("输入的数据为:" + str2);
        }
        scan.close();
    }
}

执行以上程序输出结果为:
在这里插入图片描述
next() 与 nextLine() 区别

next():

1)一定要读取到有效字符后才可以结束输入。
2)对输入有效字符之前遇到的空白,next() 方法会自动将其去掉
3)只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
4)next() 不能得到带有空格的字符串

nextLine():

1)以 Enter 为结束符,也就是说 nextLine() 方法返回的是输入回车之前的所有字符。
2)可以得到带有空格的字符串

2、输入数字

如果要输入 int 或 float 类型的数据,在 Scanner 类中也有支持,但是在输入之前最好先使用 hasNextXxx() 方法进行验证,再使用 nextXxx() 来读取。

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据
        int i = 0;
        float f = 0.0f;
        System.out.print("输入整数:");
        if (scan.hasNextInt()) {
            // 判断输入的是否是整数
            i = scan.nextInt();
            // 接收整数
            System.out.println("整数数据:" + i);
        } else {
            // 输入错误的信息
            System.out.println("输入的不是整数!");
        }
        System.out.print("输入小数:");
        if (scan.hasNextFloat()) {
            // 判断输入的是否是小数
            f = scan.nextFloat();
            // 接收小数
            System.out.println("小数数据:" + f);
        } else {
            // 输入错误的信息
            System.out.println("输入的不是小数!");
        }
        scan.close();
    }
}

执行以上程序输出结果为:
在这里插入图片描述
以下实例我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:

import java.util.Scanner;

class ScannerDemo {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        double sum = 0;
        int m = 0;

        while (scan.hasNextDouble()) {
            double x = scan.nextDouble();
            m = m + 1;
            sum = sum + x;
        }

        System.out.println(m + "个数的和为" + sum);
        System.out.println(m + "个数的平均值是" + (sum / m));
        scan.close();
    }
}

执行以上程序输出结果为:
在这里插入图片描述

三、Number 类

在这里插入图片描述
数据的基本数据类型有byte、int、short、long、double、float、boolean、char 等8种。但在实际的开发当中,我们有时候会遇到需要使用数字对象,而不是数据类型的情况。为解决这个问题,java为每一种数据类型,提供了相对应的类,即包装类,对应的包装类型也有八种:Byte、Integer、Short、Long、Double、Float、Boolean、Character。

包装类型都是用final声明,不可以被继承重写

当数据类型需要被当做对象使用时,编译器会将数据类型装换为对应的包装类,这个过程被称为装箱;而当包装类对象被当做数据类型使用时,编译器会将包装类转换为对应的数据类型,这个过程被称为拆箱。

Number类是java.lang包下的一个抽象类,提供了将包装类型拆箱成基本类型的方法,所有基本数据类型(除 boolean 和 char)的包装类型都继承了该抽象类,并且是final声明不可继承改变。

public class Test{
 
   public static void main(String[] args){
      Integer x = 5;
      x =  x + 10;
      System.out.println(x); //结果是 15。当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。
   }
}

Number 的常用方法

toString()	//以字符串形式返回值。
abs()	//返回参数的绝对值。 random()	//返回一个随机数。 
ceil()	//对整形变量向左取整,返回类型为double型。
floor()	//对整型变量向右取整。返回类型为double类型。 
rint()	//返回与参数最接近的整数。返回类型为double。
round()	//返回一个最接近的int、long型值。 
min()	//返回两个参数中的最小值。
max()	//返回两个参数中的最大值。

四、Math 类

Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用

在这里插入图片描述 在这里插入图片描述

五、格式化

Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。Format 定义了编程接口,用于将语言环境敏感的对象格式化为 String(使用 format 方法)和将 String 重新解析为对象(使用 parseObject 方法)
在这里插入图片描述

Java 平台为格式化日期、消息和数字分别提供了三个特殊的 Format 的子类:DateFormat、MessageFormat 和 NumberFormat。具体的子类必须实现三个方法:

format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
formatToCharacterIterator(Object obj)
parseObject(String source, ParsePosition pos)

1、DateFormat

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。 SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

(1)日期和时间模式
在这里插入图片描述
(2)同步

日期格式是不同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的。

2、NumberFormat

NumberFormat 是所有数值格式的抽象基类。此类提供格式化和解析数值的接口。NumberFormat 还提供了一些方法来确定哪些语言环境具有数值格式,以及它们的名称是什么。

(1)DecimalFormat

DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。该类设计有各种功能,使其能够解析和格式化任意语言环境中的数,包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数,包括整数 (123)、定点数 (123.4)、科学记数法表示的数 (1.23E4)、百分数 (12%) 和金额 ($123)。所有这些内容都可以本地化。

① 特殊模式字符

模式中的很多字符都是按字面解释的;在解析期间对其进行匹配,在格式化期间则不经改变地输出。
在这里插入图片描述
② 舍入

DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。默认情况下,它使用 RoundingMode.HALF_EVEN。

③ 同步

DecimalFormat 通常不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问某个格式,则必须保持外部同步

示例

import java.text.DecimalFormat;

public class DecimalFormatTest {
	public static void main(String[] args) {
		/* 整数位和小数位 */
		DecimalFormat format = new DecimalFormat("00000.00");
		System.out.println(format.format(6789.8765));// 06789.88

		/* 整数位分组 */
		DecimalFormat format1 = new DecimalFormat(",####.##");
		System.out.println(format1.format(123456789.9876543));// 1,2345,6789.99

		/* 百分数或千分数 */
		DecimalFormat format2 = new DecimalFormat("#0.00%");
		System.out.println(format2.format(0.008888));// 0.89%
		DecimalFormat format3 = new DecimalFormat("#0.00\u2030");
		System.out.println(format3.format(0.008888));// 8.89‰

		/* 科学计数法 */
		DecimalFormat format4 = new DecimalFormat("0.##E0");
		System.out.println(format4.format(123456789));// 1.23E8

		/* 货币 */
		DecimalFormat format5 = new DecimalFormat("\u00A4#0.##");
		System.out.println(format5.format(0.3456));// ¥0.35

		/* 解析数字 */
		DecimalFormat format6 = new DecimalFormat(",#");
		System.out.println(format6.parse("1,234,567.89$999"));// 1234567.89
	}
}

(2)ChoiceFormat

ChoiceFormat 允许将格式应用到某个范围的数。它通常用于在 MessageFormat 中处理复数。

Choice 格式不是同步的。建议为每个线程创建单独的格式实例。如果多个线程并发访问一个格式,则它必须保持外部同步

3、MessageFormat

MessageFormat 提供了以与语言无关方式生成连接消息的方式。使用此方法构造向终端用户显示的消息。
MessageFormat 获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置

示例:

 int fileCount = 1273;
 String diskName = "MyDisk";
 // 获取一组对象
 Object[] testArgs = {new Long(fileCount), diskName};
// 传入一个 pattern 来格式化输出形式
 MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0} file(s).");
 System.out.println(form.format(testArgs));

输出:The disk “MyDisk” contains 1,273 file(s).

注意:消息格式不是同步的。建议为每个线程创建独立的格式实例。如果多个线程同时访问一个格式,则它必须是外部同步的

六、随机数类

1、Random 类

Random 的对象能够产生随机数,他可以产生随机整数、随机float、随机double,随机long。

Random r = new Random();
int number = r.nextInt(n);  // 生成[0 ~ n-1) 的随机整数
int number = r.nextLong();  // 生成随机 long 整数
float f = r.nextFloat() ;   // 生成 [0,1.0) 的随机 float 浮点数
double d1 = r.nextDouble();   // 生成 [0,1.0) 的随机 double 浮点数
double d2 = r.nextDouble() * 5;  // 生成 [0,5.0) 的随机 double 浮点数
boolean b = r.nextBoolean();  // 生成一个随机的boolean值,生成true和false的值几率相等

2、Math 类的 random() 方法

Math 类的 random() 方法返回的数值是[0.0,1.0)的 double 型数值,可以对其进行运算和类型转换获得需要的随机数。

获得某个范围的特定类型的随机数:( 数据类型 )( 最小值 + Math.random() * ( 最大值 - 最小值 + 1 ) )

int a = (int)(30 + Math.random() * 71)  // 生成[30,100]的随机整数

七、枚举类

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值