常用类库
一. 泛型
1. 泛型在类中的使用
public class Person<T>{
private T data;
}
Person<String> p = new Person<>
2. 泛型在接口中的使用
实现接口时,可以选择指定泛型类型,也可以选择不指定
指定类型:
public class Interface implements IntercaceName<String> {
private String text;
}
不指定类型:
public class Interface1<T> implements IntercaceName<T> {
private T text;
}
3. 泛型在方法中的使用
private static <T> 返回值类型 方法名(T a) {}
4. 泛型限定和通配符
4.1 泛型限定
在使用泛型时, 可以指定泛型的限定区域,例如: 必须是某某类的子类或 某某接口的实现类,格式:
<T extends 类或接口1 & 接口2>
例子:
interface Fruit{}
class Apple inplements Fruit{}
class Plate<T extends Fruit>{
T data;
}
表明在使用时的类型必须是Fruit的子类
Plate<Apple> p = new Plate<>();
4.2 泛型中的通配符
(1)<? extends Parent> 指定了泛型类型的上届
interface Fruit{}
class Apple inplements Fruit{}
class Plate<T>{
T data;
}
Plate<? extends Fruit> p = new Plate<Apple>();
(2)<? super Child> 指定了泛型类型的下届
interface Fruit{}
class Apple inplements Fruit{}
class Plate<T>{
T data;
}
Plate<? super Apple> p = new Plate<Fruit>();
(3)<?> 指定了没有限制的泛型类型
4.3 作用
(1)提高代码复用率
(2)泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
4.4 注意
(1)在编译之后程序会采取去泛型化的措施。
(2)也就是说Java中的泛型,只在编译阶段有效。
(3)在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
二. 常用类
1. java.util.Objects
1.1 equals
String s1 = null;
String s2 = "123";
System.out.println(s1.equals(s2));
此时会引起空指针异常
System.out.println(Objects.equals(s1,s2));
此时就不会引起空指针异常
1.2 isNull和nonNull
用于判断为空和非空。
1.3 requireNonNull
用于检查是否为空,空返回异常,非空返回值,当外部传来一个参数我们要求不为空时使用。
2. java.util.Math
(1)绝对值
Math.abs(-100);
(2)最大值和最小值
Math.min(100,200);
Math.max(100,200);
(3) 四舍五入
Math.round(100.5);,结果为101
Math.round(-100.5);,结果为-100
四舍五入:舍去的话结果值会比原值小,入的话会比原值大
(4)小于等于参数的最大整数 和 大于等于参数的最小整数
Math.floor(3.5); 结果为3
Math.floor(-3.5); 结果为-4
Math.ceil(3.5); 结果为4
Math.ceil(-3.5); 结果为-3
3. java.util.Arrays
int[] arr = {8,7,9,1,2,3,4,5};
(1)打印数组
Arrays.toString(arr);
(2)排序
Arrays.sort(arr);
Arrays.paralleSort(arr);,升序排序
(3)二分查找
Arrays.binarySearch(arr,6);
指定下标的值
Arrays.binarySearch(arr,2,7,2);
指定范围的下标的值
(4)动态扩容
Arrays.copyOf(arr,15);
(5)赋值
Arrays.fill(arr,0);,Arrays.fill(arr,int from, int to, 0)
将指定数组的值全部填为0,和将范围里的数组的值填为0
(6)查找并返回两个数组之间第一个不匹配的索引,未找到返回-1
Arrays.mismatch(arr1,arr2)
4. java.util.BigDecimal
实现精确运算
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
(1)加法运算
BigDecimal b3 = b1.add(b2);
(2)减法运算
BigDecimal b3 = b1.subtract(b2);
(3)乘法运算
BigDecimal b3 = b1.multiple(b2);
(4)除法运算
BigDecimal b3 = b1.divide(b2);
(5)值的类型
例子:b3.doubleValue();
(6)小数点左右移动
b3.movePointLeft(int n);
b3.movePointRight(int n);
5. java.util.Date
Date date = new Date();
(1) toString
date.toString();
获取当前的日期和时间
(2)getTime
date.getTime();
获取当前的毫秒数,可用于计算时间差。
6. java.util.DateFormat
子类:SimpleDateFormat
y : 年 ,M : 月 ,d : 日 ,H : 时 ,m : 分 ,s : 秒
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
String text = format.format(new Date());
System.out.println(text);
// 将时间转换成毫秒数,格式与创建时的的模板一致
Date date = format.parse("1998-12-12 12:12 12");
// 计算生活的天数
System.out.println((new Date().getTime-date)/(1000*60*60*24));
7. java.util.Calendar
Calendar cl = Calendar.getInstance();
(1)cl.set(Calendar.YEAR,2021); 将年份设置为2021
(2)int year = cl.get(Calendar.YEAR); 获取年份
int day = cl.get(Calendar.DAY_OF_YEAR); 今天是今年的第几天
(3)月份是0-11,每个星期是从星期天开始,cl.add((字段),(数值))
cl.add(YEAR,1); 当前年份加1
(4)int m = cl.getActualMaximum(字段); 获取某字段的最大值
例如:int m = cl.getActualMaximum(Calendar.DAY_OF_MONTH);当前月份的天数
(5)获取日历时间,表示Date对象
Date d = cl.getTime();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?