泛型和Java常用类库4-2(灰常滴重要)
文章目录
一、泛型
即参数化类型,就是把参数在使用时再进行传入。在编译之后Java会进行去泛型化的措施,即你写的泛型其实只是在编译之前有效,编译之后替换为实际的类型。
1.泛型类
2.泛型接口
3.泛型方法
4.泛型限定和通配符
(1)限定
T extends Fruit表示T一定得是Fruit的子类,否则就出错给你看
(2)通配符
通配符就是下面的问号
下面是通配符的上界限定使用,即泛型的类型必修是Fruit的子类
下面是通配符的下界限定使用,即泛型必须是Apple的祖先
二、java.util.Objects
包含一些的静态方法,用来检测一些条件,比如相等,越界,哈希值等,其实就是一个工具类
三、java.lang.Math
用来进行算数运算
Math.round(num),四舍五入
Math.floor(num),返回小于等于参数的最大整数
Math.ceil(num),返回大于等于参数的最小整数
四、java.util.Arrays
对数组进行操作
Arrays.toString(arr),将数组转换为字符串
Arrays.sort(arr),排序,默认升序
Arrays.binarySearch(arr, 元素),二分查找,输出下标
Arrays.copyOf(arr, 新长度),动态扩容
五、java.Math.BigDecimal
精准的算数运算,解决浮点运算的误差问题
六、java.util.Date
获取格林威治历(1970年1月1日0点0点,由于我们是东八区,就是北京时间1970年11月1日早上8点)到现在的毫秒数
Date date = new Date();
date.toString(),获取当前时间
date.getTime(),获取当前的毫秒数
七、java.text.DateFormat
用来格式化日期,这是一个抽象类,不能直接使用,我们使用的是它的子类SimpleDateFormat
八、java.util.Calender
同DateFormat一样是抽象类,用getInstance来获取对象
cl.add(Calender.YEAR, 10),加10年
cl.getTime,获取日历表示的Date对象
cl.getActualMaximum,获取某字段的最大值
月份的范围是0-11
九、java.lang.System
这个大家应该很熟悉了
System.gc(),手动垃圾回收,程序员告诉GC说,GC你该来收垃圾了
十、String(重点)
因为字符串是不可变的,但是可以共享他们。
(1)字符串是存放在字符串常量池中的,字符串常量池存放在方法区中,又称永久代(jdk1.8之后为元空间),非堆区,方法区被所有的线程共享
(2)堆分为新生代、老年代、永久代
新生代:GC的检测非常快,连续检测15次都没有回收掉则进入老年代
老年代:很长时间才检测一次
永久代:就是方法区
(3)怎样理解字符串不可变,其实这是非常可怕的一件事情,下面的代码仅仅拼接一次就产生了2块垃圾,又因为String存放在永久代中,不能被GC回收,那么如果是100次,1000次呢,结果可想而知
(4)所以当进行字符串拼接时我们尽量不能使用String,那应该怎么办呢。这时我们使用另外两个类。
StringBuffer和StringBuilder,前者是线程安全的实现,后者是线程不安全的实现,使用方法类似
使用如下:
StringBuffer sb = new StringBuffer();
sb.append(字符串);
同时sb.toString可以将其转化为字符串