Java常用类库(万字详解)

本文详细介绍了Java中的核心类库,包括数字类(整型、浮点数、大数和随机数)、字符串类(不可变和可变)、时间类(Calendar与java.time包),以及格式化各类对象的方法。此外,还涵盖了字符串格式化和时间格式化的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面
  你们好,我是小庄。很高兴能和你们一起学习Java。如果您对Java感兴趣的话可关注我的动态.
  写博文是一种习惯,在这过程中能够梳理和巩固知识。


一、简介

Java的类库有很多类,而且在不断的扩展,我们不需要把每一个类都掌握,只需要学习Java的核心类即可

那么,Java的核心类有哪些呢?

类库描述
java.io.*提供了通过输出流,对象序列以及文件系统实现的系统输入、输出
java.lang.*Java编程语言的基础类库
java.math.*提供了简明的整数算术以及十进制算术的基本函数
java.text.*包括以一种独立于自然语言的方式处理文本、日期、数字和消息的类和接口
java.time.*提供Java日期,时间类(java8新增的包)
java.util.*包括集合类、时间处理模式、日期时间工具等各类常用的工具包

包名以java开始的包是Java核心包。
包名以javac开始的包是Java扩展包

二、数字相关的类

Java数字类

  • 整型:Short,Int,Long
  • 浮点型:Float,Double
  • 大数类:BigInteger(大整数),BigDecimal(大浮点数)
  • 随机数类:Random
  • 工具类:Math

详细介绍:

1、整型

short ,16位,2个字节,数值范围最小,默认值0

int ,32位,4个字节,默认值为0

long ,64位,8个字节,数值范围最大,默认值0L

2、浮点型

float ,单精度,32位,4个字节,默认值为0.0ff不可省略

double ,双精度,32位,4个字节,默认值为0.0d,d可省略

float和double都不能表示很精确的数字
例如:
图片

3、大数类
这是java类,而不是类型,里面是有方法的

  • BigInteger ,大整数类,普通的整数类型是有范围值的,而BigInteger支持无限大的整数运算
  • BigDecimal ,大浮点类,能够表示更加精确的数字
//valueOf()方法将int类型的数据转换为大数,则大数可以进行计算,int类型的数据不能直接和大数进行计算
BigInteger a=BigInteger.valueOf(20);
//BigInteger不能使用算术运算符(+和*)进行计算
//如果想对BigInteger进行加运算时,如下操作
BigInteger b=BigInteger.valueOf(10);
BigInteger c=a.add(b);//此时,b为其他的BigInteger数据,c=a+b
//如果想对BigInteger进行乘运算时,如下操作
BigInteger d=c.multiply(a);//d=c*a

提示:BigDecimal是对浮点类型进行处理,其他使用的方法和BigInteger一样
举例:BigDecimal f=BigDecimal.valueOf(3.22);
注意:使用大数时,需要导入:import java.math;这个类包

4、Random随机数

方法作用
nextInt()返回一个随机int类型数字
nextInt(int a)返回一个[0 ,a) 之间的随机int类型数字
nextDouble()返回一个[0.0 ,1.0] 之间的double类型数字
ints批量防护随机数数组
Math.random()返回一个[0.0 ,1.0] 之间的double类型数字

5、工具类java.lang.Math

  • abs :绝对值函数
  • log :对数函数
  • max :最大值比较
  • min :最小值比较
  • pow :幂函数
  • round :四舍五入函数
  • floor :向下取整
  • ceil :向上取整
public class MathTest{
	public static void main(String[] args){
		System.out.println(Math.abs(-4));//绝对值,结果为4
		System.out.println(Math.max(-3,-7));//最大值,结果为-3
		System.out.println(Math.min(-3,-7));//最小值,结果为-7
		System.out.println(Math.pow(-4,2));//求幂,表示-4的2次方,结果为16.0
		System.out.println(Math.round(2.5));//四舍五入,最后结果为3
		System.out.println(Math.ceil(2.5));//向上取整,结果为3.0
		System.out.println(Math.floor(2.5));//向下取整,结果为2.0
	}
}

三、字符串相关的类

字符串分为不可变字符串和可变字符串
在实际业务中,我们经常会用到它们

1、不可变字符串
String :不可变,只读

方法作用
length()返回字符串的长度
isEmpty()返回字符串是否为空,如果为true,则length()为0
charAt(int index)返回 char指定索引处的值
compareTo(String anonter)按字典顺序比较两个字符串
concat(String str)将指定的字符串连接到该字符串的末尾
contains(CharSequence s)当且仅当此字符串包含指定的char值序列时才返回true
indexOf(int ch)返回指定字符第一次出现的字符串内的索引
indexOf(int ch, int fromIndex)返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索
trim()返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。
split(String regex)将此字符串分割并用数组存储
substring(int beginIndex, int endIndex)从开始下标到结束下标的截取
public class MathTest {
	public static void main(String[] args) {
			String s="12;34;56;78;9";
			String s2="12;45";
			System.out.println(s.length());//获取长度,13
			System.out.println(s.charAt(4));//从零开始,第五个位置为4
			System.out.println(s.isEmpty());//不为空,返回false
			System.out.println(s.compareTo(s2));//返回-1,表示前面的字符串小。返回0,说明相等。返回1,说明前面的字符串大
			System.out.println(s.concat(s2));//把后面的字符串,连接到前面字符串的末尾
			System.out.println(s.contains(s2));//前面字符串是否包含后面的字符串,返回flase或true
			System.out.println(s.indexOf(";"));//返回第一次出现的该字符串的下标,这里返回2
			System.out.println(s.indexOf("8", 2));//从下标为2开始找,找到则返回下标的值,否则返回-1
			System.out.println(s.trim());//去掉字符串前后的空格,中间空格不管
			String[] array=s.split(";");//字符串分割
			for(String a:array) {
				System.out.println(a);
			}
			System.out.println(s.substring(2,5));//从下标2到下标5的截取
	}
}

2、可变字符串

  • StringBuffer(字符串的加减,同步,性能好)
  • StringBuilder(字符串的加减,不同步,性能更好)

在对字符串频繁的插入和删除操作时,一般都是用可变字符串提高性能

方法作用
append(String s)将指定的字符串附加到此字符序列
delete(int start, int end)删除此序列的子字符串中的字符

StringBuffer和StringBuilder都是一个类,使用要实例化才能使用

//StringBuilder使用一样,唯一不同的是同步问题,这个涉及到多线程的知识
public class MathTest {
	public static void main(String[] args) {
			StringBuffer s=new StringBuffer();
			s.append("12");
			s.append(34);
			System.out.println(s);//最后输出结果是1234,会自动将int转为字符串存储
			System.out.println(s.delete(0, 2));//最后输出结果是34
			System.out.println(s.append("1"));//最后输出为341
	}
}

四、时间相关类

时间相关类/类库有:

  1、java.util.Date包(已经废弃,不推荐使用,本篇不对该类进行讲解)
  2、java.sql.Date包(数据库时间对应的类,不常用)
  3、Calendar类(目前程序最常用,抽象类)
  4、java.time包(java8新的API)

我们对第三第四点内容进行讲解

1、Calendar

Calendar的使用

//方式一,使用getInstance()方法进行实例化,实际上是实现了GregorianCalendar子类
Calendar ca=Calendar.getInstance();

//方式二,通过子类进行实例化,使用到简单工厂模式,暂时简单了解即可
Calendar ca=new GregorianCalendar();

Calendar的方法

方法作用
get(Field)获取时间中每个属性的值,月份是0-11,所以一般使用同时要加一操作
getTime()返回相应的Date对象
getTimeInMillis()返回自1970.1.1以来的毫秒数
set(Field)设置时间字段
add(field,amount)根据指定字段增加/减少时间
roll(field,amount)根据指定字段增加/减少时间,但不影响上一级的时间段
import java.util.Calendar;

public class CalendarTest {
	public static void main(String[] args) {
		//实例化Calendar对象
		Calendar ca=Calendar.getInstance();
		//获取年
		int year=ca.get(Calendar.YEAR);
		//获取月,需要后面加1操作
		int monday = ca.get(Calendar.MONDAY)+1;
		//获取日
		int date=ca.get(Calendar.DATE);
		//获取时
		int hour=ca.get(Calendar.HOUR);
		//获取分
		int minute=ca.get(Calendar.MINUTE);
		//获取秒
		int second=ca.get(Calendar.SECOND);
		//获取Date对象,返回月 日 时:分:秒 年
		System.out.println(ca.getTime());
		//返回自1979.1.1以来的毫秒数
		System.out.println(ca.getTimeInMillis());
		//设置方法一,set(f,value)设置时间字段对应的值,f为时间字段,value为值
		ca.set(Calendar.YEAR, 2022);//自定义时间为2022年
		//查看设置的时间字段是否生效,此时变为2022年
		System.out.println(ca.get(Calendar.YEAR));
		//设置方法二,设置年月份,注意:11表示实际月份(12)-1
		ca.set(2022, 11, 15);
		//获取Date对象查看结果
		System.out.println(ca.getTime());
		//对月份加一操作,月份变化同时年份也变成了2023年
		ca.add(Calendar.MONDAY, +1);
		//查看结果
		System.out.println(ca.getTime());
		//重新设置为2022年12月15号
		ca.set(2022, 11, 15);
		//对月份加一操作,月份变化,而年份并没有变化。还是2022年
		ca.roll(Calendar.MONDAY, +1);
		//查看结果
		System.out.println(ca.getTime());
	}
}

Calendar小结:
  1、先实例化Calender才能使用,实例化方式有两种
  2、Calendar中的add方法调用会影响到其他字段
  3、Calendar中的roll方法只影响自身,不会影响其他字段
  4、Calendar的月份字段是0-11月,获取时需要加1操作。设置时,默认是实际月份减一

2、java.time包

java.time包的主要类

类包表示内容
LocalDate日期类
LocalTime时间类
LocalDateTimeLocalDate+LocalTime(日期+时间)
Instant时间戳

LocalDate常用的方法

方法作用
now()从默认时区的系统时钟获取当前日期 :年-月-日
getYear()获取年份字段
getMonth()使用 Month枚举获取月份字段。
of(int year, int month, int day从一年,一个月和一天获得一个 LocalDate的实例
ofYearDay(int year, int day)返回这一年中的第day天的具体年月日
import java.time.LocalDate;
import java.time.Month;

public class LocalDate {
	public static void main(String[] args) {
		//当前时间,比如:2021-07-15
		LocalDate today=LocalDate.now();
		//根据指定时间创建LocalDate,错误时间会报异常
		LocalDate firstDay=LocalDate.of(2022, Month.JANUARY, 1);
		//根据年份的指定天数,返回具体年月份
		LocalDate day=LocalDate.ofYearDay(2021, 100);
		//获取当前年份
		System.out.println(today.getYear());
		//获取当前的月份
		System.out.println(today.getMonth());
	}
}

LocalTime常用的方法

方法作用
now()从默认时区的系统时钟获取当前的时间:时:分:秒.纳秒
getHour()获取当前小时
getMinute()获取当前分钟
getSecond()获取当前秒数
getNano()获取当前纳秒数
of()设置当前时间的时分,或者时分秒,或者时分秒纳秒
import java.time.LocalTime;

public class LocalTimeTest {
	public static void main(String[] args) {
		//当前时间,时:分:秒.纳秒
		LocalTime totime=LocalTime.now();
		//根据指定时间创建LocalTime,错误时间会报异常
		LocalTime time=LocalTime.of(23, 23);
		System.out.println(totime);
		//获取当前小时
		System.out.println(totime.getHour());
		//获取当前分钟
		System.out.println(totime.getMinute());
		//获取当前秒数
		System.out.println(totime.getSecond());
		//获取当前纳秒
		System.out.println(totime.getNano());
	}
}

LocalDateTime的常用方法

方法作用
now()从默认时区的系统时钟获取当前的日期时间
of()设置当前的日期和时间
getDayOfMonth()获取当前的时间是这个月的第几天
getDayOfWeek()获取当前的时间是星期几,返回枚举类型
getDayOfYear()获得日期在这一年的第几天
import java.time.LocalDateTime;

public class  LocalDateTimeTest{
	public static void main(String[] args) {
		//当前时间,时:分:秒.纳秒
		LocalDateTime todatetime=LocalDateTime.now();
		//根据指定时间创建LocalTime,错误时间会报异常
		LocalDateTime dateTime=LocalDateTime.of(2022,04,12,23, 23);
		System.out.println(todatetime);
		//显示2022-04-12T23:23
		System.out.println(dateTime);
		//获取当前的的时间是这一年第几天
		System.out.println(todatetime.getDayOfYear());
		//获取当前小时
		System.out.println(todatetime.getHour());
		//获取当前分钟
		System.out.println(todatetime.getMinute());
		//获取当前秒数
		System.out.println(todatetime.getSecond());
		//获取当前纳秒
		System.out.println(todatetime.getNano());
	}
}

五、格式化类

我们格式化的讲解主要针对前面讲到的数字、字符串和时间这三个对象。

java.text包的java.text.Format的子类

NumberFormat :数字格式化,抽象类
   -DecimalFormat

MessageFormat :字符串格式化

DateFormat :时间/日期格式化 抽象类
  -SimpleDateFormat

java.time.format包下

DateTimeFormatter :时间/日期格式化

1、数字格式化

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class  Test{
	public static void main(String[] args) {
		//实例化对象
		NumberFormat nf=NumberFormat.getInstance();
		//设置一个数字
		double d=123456789.12345;
		//区别:0表示有且只能有几位,如果内容没有,则用0补充
		DecimalFormat df1 = new DecimalFormat("00.00");
		DecimalFormat df2=new DecimalFormat("##.##");
		DecimalFormat df3=new DecimalFormat("#.#%");
		System.out.println(df1.format(0.006));//输出00.01
		System.out.println(df2.format(0.006));//输出0.01
		System.out.println(df3.format(0.0006));//输出0.1%
		
		//设置最大小数点个数
		nf.setMaximumFractionDigits(2);
		System.out.println(nf.format(d));//输出123,456,789.12
	}
}

小结:
0#的共同点和区别
  共同点:0和#都表示占位符,都采取四舍五入的方式
  区别:0表示有且只能有几位,如果内容没有,则用0补充;而#表示最多有几位

2、字符串格式化

支持多个参数-值对位复制文本
支持变量的自定义格式

import java.text.MessageFormat;
import java.util.Date;

public class  MessageTest{
	public static void main(String[] args) {
		//多个参数-值对位复制文本
		String message="{0} {1} {2} {3}";
		String[] array= {"I","love","you","!"};
		//捆绑
		String love=MessageFormat.format(message, array);
		System.out.println(love);
		
		//变量的自定义格式
		 int planet = 7;
		 String event = "a disturbance in the Force";
		 //下面的0,1,2表示第几个元素,后面的参数位置
		 //planet在第0位,new Date()在第1位,event则是第2位
		 String result = MessageFormat.format("At {1,time} on {1,date}, "
		 		+ "there was {2} on planet {0,number,integer}.",
		 		planet, new Date(), event);
		 System.out.println(result);
	}
}

3、时间格式化

DateFormat的使用

方法作用
SimpleDateFormat(String pattern)设置格式化模板
parse()将字符串格式化为时间
format()将时间格式化为字符串
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class  DateFormatTest{
	public static void main(String[] args){
		//设置一个时间字符串
		String strDate="2021-07-15 20:41:30.666";
		//设置时间格式化模板
		String p="yyyy-MM-dd HH:mm:ss.sss";
		//实例化模板
		SimpleDateFormat spdate=new SimpleDateFormat(p);	
		try {
		//使用parse()方法,返回对象为Date
			Date d = spdate.parse(strDate);
			//打印结果
			System.out.println(d);
			//使用format()将时间对象转换为字符串
			String s = spdate.format(d);
			//打印结果
			System.out.println(s);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

DateTimeFormatter的使用

方法作用
ofPattern(String patte)设置格式化模板
parse()将字符串格式化为时间
format()将时间格式化为字符串
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class  DateTimeFormatterTest{
	public static void main(String[] args){
		//设置一个时间字符串
		String strDate="2021-07-15";
		//设置时间格式化模板
		DateTimeFormatter dfm=DateTimeFormatter.ofPattern("yyyy-MM-dd");
		//设置模板二
		DateTimeFormatter dfm2=DateTimeFormatter.ofPattern("yyyy年MM月dd日");
		//使用parse格式化对象
		LocalDate local=LocalDate.parse(strDate, dfm);
		//打印结果
		System.out.println(local);
		//使用format()将时间对象转换为字符串,使用模板二
		String s=local.format(dfm2);
		//打印结果
		System.out.println(s);
	}
}

上一篇Java异常和异常处理

下一篇Java集合和工具类

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值