常用类
     学一个类,先搞清楚继承关系,再看源码
     
     包装类Wrapper
         jdk5之前是手动装箱拆箱
         jdk5及之后是自动装箱拆箱(调用valueOf方法(自动默认)/创建对象的构造方法,XXXvalue方法)
             直接赋值就是自动拆装箱,编译器会自动补全 调用valueOf的方法  在对象数组里,与jvm字节码的后直接跟小值无关
             自动拆装箱是与自身的包装类有关的,不是随便就可以:比如object o=true是不行的
         继承关系
             父类是Numbeer(Boolean与character不是,父类是object)
             实现了Comparable接口(可比较的),Serializable接口(代表可以串行化,就可以网络传输)
         源码:
             valueOf源码可以看到是从一个cache数组中直接取,或创建一个对象【面试题重点,类加载时,-128-127数组就创建赋值好了】
         
         常用方法:
             Integer.MIN_VALUE返回最小值
             Integer.MAX_VALUE返回最大值
             
             Character.isDgit(字符)            判断是不是数字
             Character.isLetter(字符)        判断是不是字符
             Character.isUpperCase(字符)        判断是不是大写
             Character.isLowerCase(字符)        判断是不是小写
             Character.ToUpperCase(字符)        转为大写
             Character.ToLowerCase(字符)        转为小写
             Character.isWriteSpace(字符)    判断是不是空格
             
         包装类-》String
             1 +“”
             2 包装类的toString方法(基本练习自动转包装类,包装类点toString方法)
             3 String类的valueOf方法(静态方法,参数接收对象)
         String-》包装类
             1 包装类的parseXXX方法            此方法是把string的每一个char取出判断是不是数字,然后转为int
             2 直接new,参数传String
             
     String
         字符串字符采用Unicode编码,也就是char,占2字节(不论是字母还是汉字)
         继承关系
             父类是object    
             实现了Comparable接口,Serializable接口,charSequence接口
         源码:
             构造器参数:空参,字符串常量,char数组(可有索引),byte数组(网络编程)        
             String 是final类,不能被继承
             源码看到底层是char/byte数组(value[])
                 value[]是final,一旦创建不能修改(地址不能修改(字符串对象不能改,否则不是一个了),而不里面的字符不能修改)
         创建方式:
             1 直接赋值
                 先看常量池中有没有,有,引用直接指向,没有,常量池创建后,引用指向,最终,引用都是指向常量池
             2 构造器创建  【相当于 用String对象包了一层】
                 先在堆中创建空间,【引用指向堆】(堆中的空间有value属性,其查看常量池,有value直接指向,没有,常量池创建指向)
             但是注意:String类的equals方法是比较value数组的,所以为真(注意equals到底是object还是string)
                         ==就是比较地址了,是false
                         调用intern方法时,如果对象equals()方法 常量池中某对象,返回值是常量池地址,
                             否则,将其加入常量池,返回常量池地址
         字符串相加【面试题】
             string常量相加
                 常量池常量对象有编译器优化的
             string变量相加
                 创建一个空的StringBuilder对象-》调用其append方法到最后-》调用toString方法(new一个String对象返回)
                     所以相加返回的相对于是new构造器创建的对象string,堆中value指向常量池 
         常用方法:
             equals方法            不忽略
             equalsIgnoreCase    忽略大小写
             length    方法        返回长度int
             indexOf    方法        返回字符/字符串的最先索引  源码是KMP
             lastIndexOf方法        返回字符/字符串的最后索引  源码是KMP
             subString            截取字符串,返回string    左闭右开
             trim                去前后空格,返回string
             ChatAt                获取索引字符,不能用Str[index]获取
             
             toUpperCase            转大写
             toLowerCase            转小写
             concat                拼接,就是+号
             replace                返回值是替换字符串,替换所有,对于其本身没有影响
             split                返回字符串数组,对于地址符等特殊字符,字符串分割时,需要加入转义符\
             compareTo            一个个字符比,返回前-后的ASCII码,前者大,返回正数,后者大,返回负数;
                                     比到没得比,返回 让前面字符串总长度-后面字符串总长度
             toCharArray            转为字符数组
             format                格式化字符串 : %s表示字符串   %c字符    %d整型      %.2f浮点型,保留小数点后2位(四舍五入)
                                     返回格式好的字符串,第一个参数是带占位符的string,后面变量替换占位符
                                     (c语言形式:但是c语言不是四舍五入)
     StringBuffer
         代表可变的字符序列,buffer代表缓冲区
         java.lang.StringBuffer
         是一个容器,线程安全
         继承关系:
             父类是AbstractStringBuffer,父类实现了charSequence接口,Appendable接口,再父类是object类
             实现了Serializable接口,charSequence接口
         源码:
             其父类AbstractStringBuffer中有value[]属性,不是final类型,存放字符串内容,不是final,是存放在堆中的
             stringBuffer是final类
             构造器参数:空参,字符串(此构造器指定容量是当前字符串长度+16),指定缓冲区容量(默认16)
                 构造器的参数不能是null,会抛空指针异常
             
         常用方法:
             append                            增,追加,返回的还是stringBuffer,【追加的如果是null,则会置null字符串(不会抛异常)】
             delete(start,end)            删,返回的还是stringBuffer,左闭右开
             replace(start,end,string)    改,左闭右开
             indexOf                            查第一次出现的索引
             insert(start,string)            插,在索引位置插入,后面往后移            应用:3位数字插入逗号(先找小数点,往前3位插,循环处理)
             length                            获取长度
         string与stringBuffer
             string是字符串常量,里面值不能改,每次string类更新其实是改地址,效率低(value[]是fianl的)
             stringBuffer保存的是字符串变量,里面的值可以修改,每次是更新内容,不用每次不用改地址,效率高(value[]在堆中)
                 只有value指向的数组(也在堆中)不够,才更新地址(扩大,拷贝,更新)
             相互转换:
                 string-》stringBuffer
                     stringBuffer构造器
                     stringBuffer的append方法
                 stringBuffer-》string
                     stringBuffer的toString方法
                     使用String构造器
             string类效率较低,复用常量池,复用率很高,如果对string做大量修改,用buffer或builder
             stringbuilder与stringBuffer提高效率:配置文件string表示常量的值
     StringBuilder
         【stringBuffer的替代】,但是所有方法都不是线程安全的(不保证同步),效率最高
             【单线程】使用,优先使用此类,因为比stringBuffer快
         是final类
         主要操作append与insert方法,可以重载这些方法,接收任意类型数据
         继承关系:与stringBuffer一样
             父类是AbstractStringBuilder,父类实现了charSequence接口,Appendable接口,再父类是object类
             实现了Serializable接口,charSequence接口
     Math
         数学运算的static方法
         abs            绝对值
         pow            求幂
         ceil        向上取整
         floor        向下取整
         round        四舍五入
         sqrt        求开方,负数是NAN
         random        求随机数    [0,1)随机小数   多敲,搞清楚【a,b】随机数写法
         max            两数最大
         min            两数最小
     
     Arrays
         static方法,管理和操作数组(比如排序和搜索)/包装类数组/引用类型数组
         Arrays有静态内部类arraylist,NaturalOrder,LagacyMergeSort
         
         toString方法,返回数组的字符串形式
         sort方法(自然排序和定制排序),数组是引用类型,排序会直接影响到参数
             定制排序要传递comparator接口参数 源码程序调用程序员实现的方法,拿到返回值,根据正负,决定 二叉树排序逻辑
         binarySearch 通过二分搜索 进行查找,要求必须排好序
         copyOf(arr,int x)拷贝原数组前x个元素到新数组,如果负数,抛异常,如果长度大于原数组,补null
         fill(arr,int x)数组元素的填充(使用后面数,替换原来所有数)
         equals(arr,arr)元素完全一样,返回真
         asList将一组值转换为list,编译类型是List,运行类型是arraylist(静态内部类)
         
     System
         exit退出当前程序,参数代表状态,0代表正常退出
         arraycopy复制数组元素,一般是底层调用才用 (我们一般用的arrays.copyOf就是用的它)  
                     参数5个,原数组,原数组起始位置,目的数组,目的数组起始位置,长度,出错报异常
         gc垃圾回收
         currentTimeMills返回当前时间毫秒数
         println方法,默认调用toString方法
         
     BigInteger,BigDecimal
         底层就是将其当作字符串处理,再转为对象
         保存比较大的整数(long存不下),保存精度高的浮点型(小数过多)
         构造器参数是字符串数字
         在对于bigInteger/bigDecimal  +,-,*,/有专门方法,不能用符号,
             bigDecimal的除法可能抛异常(精度太高,可能除不尽)--》在除法方法多传一个BigDecimal的静态变量作为精度(保留分子精度)
         
     Date,Calendar,localDate 3代发展
         jdk1.0
         Date构造器无参/毫秒值    getTime方法获得毫秒值
         SimpleDateFormat格式化  构造器传字符串   format方法/parse方法(parse有异常的)
         
         jdk1.1
         Calendar是抽象类,getInstance静态方法获取对象并且提供大量方法和字段给我们使用
         没有专门格式化方法。要自己组合
         线程不安全,还不能处理闰秒(每2天,多1秒)
         
         jdk8
         localDate,localTime,localDateTime
             日期     时分秒        都有
             now方法获取当前对象,getXXX(VALUE)方法获取字段,
             检测是否是闰年等,加/减一个时间(890天后等)得到新日期等各种方法
         DateTimeFormater格式化类似simpleDateFormat
         Instant时间戳类,now方法可以获取当前时间,可以与Date相互转换兼容
    比较器
     comparable接口是给类实现的
         里面的compareTo方法 有1参数,表示自己this与其他自己的比较o  方法返回值是int
         将比较逻辑的正负值与返回值的正负值有所关联就行
     comparator接口是当参数的
         里面的compare方法主要   接口当作参数时,匿名内部类重写的方法 ,有2参数,表示自己与其他自己(o1,o2) 
         方法返回值是int