常用类库
不要求很多思想上的东西 要求很熟悉
泛型
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)
使用
泛型类:
定义一个泛型类: public class ClassName<T>{ private T date; public T getData(){ return data; } public void setData(T data){ this.data = data; } }
泛型接口
public interface IntercaceName<T>{ T getData(); } 实现接口时,可以选择指定泛型类型,也可以选择不指定,如下: 指定类型: public class Interface1 implments IntercaceName<String>{ private String text; @Override public String gerData(){ return text; } } 不指定类型 public class Interface1 implments IntercaceName<T>{ private T data; @Override public String gerData(){ return data; } }
泛型方法
private static <T> T 方法名(T a, T b){}
泛型限制类型
1. 在使用泛型时,可以指定泛型的限定区域 -例如:必须是某某类的子类或某某接口的实现类,格式 <T extends 类或接口1 & 接口2>
泛型中的统配符?
类型通配符是使用?代替方法具体的类型实参 1 <? extends Parent> 指定了泛型类型的上届 2 <? super Child> 指定了泛型类型的下届 3 <?> 制定了没有限制的泛型类型
作用
1.提高代码复用率 2.泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
注意
在编译之后程序会采取去泛型化的措施。 也就是说java中的泛型,只会在编译阶段有效。 在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段
Objects
在jdk7版本添加的一个工具类,可以用来进行我们常用的一些检查操作
方法:
Math
常用的: Math.abs() : 返回绝对值 Math.max() : 返回最大值 Math.min() : 返回最小值 Math.round() : 返回四舍五入的值 △:Math.round(-100.5) ---> -100 四舍五入 入 向前进一位 Math.floor() : 返回小于等于这个参数的最大整数 Math.floor(3.5)-->3.0 Math.floor(-3.5)--> -4.0 Math.ceil() : 返回大于等于这个参数的最大整数 Math.ceil(3.5)-->4.0 Math.ceil(-3.5)--> -3.0 全部方法去API查看
Arrays
常用的: Arrays.toString() : 返回指定数组内容的字符串表示形式。 Arrays.sort([] a) : 将指定的数组按升序排序。 Arrays.sort([] a , int fromIndex, int toIndex) : 按升序对数组的指定范围进行排序。 Arrays.copyOfRange([] , int from, int to) : 将指定数组的指定范围复制到新数组中。 Arrays.copyOf([],int newLength) : 使用默认值复制指定的数组,截断或填充(如有必要),以使副本具有指定的长度。 (扩容的方法) Arrays.binarySearch([] , int key) : 使用二进制搜索算法在指定的字符数组中搜索指定的值。 Arrays.binarySearch([] a, int fromIndex, int toIndex, byte key) : 使用二进制搜索算法搜索指定值的指定字节数组的范围。
Big Decimal类
概念
通过在控制台运行0.1+0.2,会发现float和double 的运算误差 由于float类型和double类型在运算时会有误差,为了实现精确运算则需要借助java.math.BigDecimal类加以描述
常用构造方法
public BigDecimal(String val){ }
常用方法
下述所有的运算方法,不会影响参与运算的数据本身,运算的结果会被封装为一个新的BigDecimal对象,这个对象会通过return返回出去。 1.public BigDecimal add (BigDecimal augend) : 加法运算 2.public BigDecimal subtract (BigDecimal augend) : 减法运算 3.public BigDecimal multiply (BigDecimal augend) : 乘法运算 4.public BigDecimal divide (BigDecimal augend) : 除法运算
Date
构造方法: Date(); 分配 Date对象并对其进行初始化,使其表示分配时间,测量 Date到毫秒。 当前时间 Date(long date); 分配 Date对象并初始化它以表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。 表示时刻的,能用的 就只有 Data.getTime(); 返回的是毫秒数(获取时间戳)
-
-
boolean
after(Date when)
测试此日期是否在指定日期之后。 boolean
before(Date when)
测试此日期是否在指定日期之前。 Object
clone()
返回此对象的副本。 int
compareTo(Date anotherDate)
比较两个日期的订购。 boolean
equals(Object obj)
比较两个相等的日期。 static Date
from(Instant instant)
从 Instant
对象获得Date
的实例。void setTime(long time) 将此 Date
对象设置为表示格林尼治标准时间1970年1月1日00:00:00之后的time
毫秒的时间点。long getTime() 返回自此 Date
对象表示的1970年1月1日00:00:00 GMT以来的毫秒数。
-
DateFormat
DateFormat是一个抽象类。使用时要先创建他的子类对象SimpleFormat 常用方法: 先要 SimpleDateFormat format = new SimpleDateFormat("(日期格式) yyyy-MM-dd HH:mm:ss") format:将date对象 转换为字符串(格式与new SimpleDateFormat时所定义的格式一样) format.format(new Date()); parse:将定义好格式的日期字符串,转换成date对象 format.parse("日期字符串");
Calendar
常用方法就三个 get() set() add() getActualMaximum(); 获取某字段的最大值 是一个抽象类 但他提供了一个方法来创建对象 getInstance() 解决了Date不能国际化的问题 Calendar c1 = Calendar.getInstance(); 他把年月日时分秒的信息都储存在了一个数组里 fields[] 获取方法: //注意:年份是从0--11 0代表一月 11代表12月 c1.get(Calender.Year) ..... 设置方法: c1.set(Calender.Year,2020) 年份变为2020 可以进行年月日的计算 c1.add(Calender.Year,1) 年份加1
System
获取时间戳: currentTimeMillis(); arraycopy (Object src, int srcPos, Object dest, int destPos, int length);将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。
String
字符串拼接 能避免就避免 会产生很多内存垃圾 如果需要拼接,不应该使用String类 应该用StringBuffer 和 StringBilder Buffer和Builder主要是用来字符串拼接 String字符串是不可变的:为什么? 因为String使用char[]存放的 而字符串数组确定之后无法改变,所以String确定后也无法改变 内容相同的String 公用一个地址值 使用字符串常量池进行缓存 字符串常量池在方法区里 方法区就是加载我们内存代码的区域 注意:上面这一点是用在直接赋值的String上的,但是通过new方法来创建String对象的,两个对象的地址值肯定不相同,因为new 是在内存中开辟新空间来存放对象的 什么是新生代、老年代、永久代 新生代:刚创建的对象都在新生代里面 gc机制不一样 运行很快 过一会就问要不要回收 如果一个对象经过15次垃圾回收都 没有被回收就从新生代挪到老年代里去 老年代:会过很久才问要不要回收 永久代:不会被垃圾回收,类、方法、常量 String的每一次字符串创建都会去永久代里面找,找到相同的内容就共用一个地 址找不到就把字符串缓存到永久代里 jdk1.7之前:运行时常量池(包括字符串常量池)是存放在方法区 , 此时hotspot虚拟机对方法区的实现为永久代 jdk1.7:字符串常量池 被移到了堆中 运行时常量池剩下的东西还在方法区内 也就是hotspot中的永久代 jdk1.8:hotspot移除了永久代 用元空间(Metaspace)取而代之 但 字符串常量池还在堆里,运行时常量池还在方法区,只不过 方法区的实现由永久代变成了元空间