day17-常用类

  1. day17-常用类

  2. 和数学相关的三个常用类:
     1):Math:类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数等,都是静态方法,使用不多.
     2):BigDecimal:float和double都不能表示精确的小数,此时使用BigDecimal,用于处理金钱和精度要求高的数据.

     3):BigInteger:表示大整型,如果两个long类型的最大值相运算,结果long再也存储不下,此时使用BigInteger,一般不用.
                                   加,减,乘,除的方法和BigDecimal相同.

  3. 字符序列:把多个字符按照一定得顺序排列起来.
    字符串的分类:
             不可变的字符串:String:当前对象创建完毕之后,该对象的内容(字符序列)是不能改变的,一旦内容改变就是一个新的对象.
             可变的    字符串:StringBuilder/StringBuffer:当对象创建完毕之后,该对象的内容可以发生改变,当内容发生改变的时候,对象保持不变.
    字符串的本质(底层是什么其实就是char[]),char表示一个字符,数组表示同一种类型的多个数据,如何理解char[]:
             String  str = “ABCDEFG”;    //定义一个字符串对象,等价于
             char[] cs = new char[]{'A','B','C','D','E','F','G'};-

    day17-常用类day17-常用类

  4. String对象的创建:
           1):直接赋一个字面量:       String   str1  =  “ABCD”;
           2):通过构造器创建:           String   str2  =  new String(“ABCD”);
    两种方式有什么区别,分别在内存中如何分布?
    String对象的空值:
           1):表示引用为空(null):   String  str 1 = null;      没有初始化,没有分配内存空间.   
           2):内容为空字符串:        String  str2  = “”;         已经初始化,分配内存空间,不过没有内容.
    --------------------------------------------------------------------------------
    判断字符串非空:
          1):引用不能为空(null);2):字符内容不能为空字符串(“”);
    --------------------------------------------------------------------------------
    字符串的比较操作:
          1):使用”==”号:          只能比较引用的内存地址是否相同.
          2):使用equals方法:   在Object类中和”==”号相同,建议子类覆盖equals方法去比较自己的内容.
                                                 String类覆盖equals方法,比较的是字符内容.

  5.  

    常量池:专门存储常量的地方,都指的方法区中.
         编译常量池:  把字节码加载斤JVM的时候,存储的是字节码的相关信息.(不研究)
         运行常量池:  存储常量数据(研究).
    ----------------------------------------------
    面试题1:
    下列代码分别创建了几个String对象.
      String   str1  =  “ABCD”;     最多创建一个String对象,最少不创建String对象.
                                                     如果常量池中,以及存在”ABCD”,那么str1直接引用,此时不创建String对象.
                                                     否则,先在常量池先创建”ABCD”内存空间,再引用.
      String   str2  =  new String(“ABCD”);
                                                    最多创建两个String对象,至少创建一个String对象.
                                                     new关键字:绝对会在堆空间,创建内存区域.  所以至少创建一个String个对象.

    day17-常用类

     

  6. String对象比较:
    1):单独使用""引号创建的字符串都是直接量,编译期就已经确定存储到常量池中;
    2):使用new String("")创建的对象会存储到堆内存中,是运行期才创建;
    3):使用只包含直接量的字符串连接符,如"aa" + "bb"创建的也是直接量,编译期就能确定,已经确定存储到常量池中
    4):使用包含String直接量(无final修饰符)的字符串表达式(如"aa" + s1)创建的对象是运行期才创建的,存储在堆中;
                   通过变量/调用方法去连接字符串,都只能在运行时期才能确定变量的值和方法的返回值,不存在编译优化操作.

    day17-常用类

  7. String类中的常用方法(从API中去找下列方法,并且读):
    1):String的创建和转换:
        byte[] getBytes():把字符串转换为byte数组,每个字符的Unicode值    
        char[] toCharArray():把字符串转换为char数组
        String(byte[] bytes):把byte数组转换为字符串
        String(char[] value):把char数组转换为字符串
    2):获取字符串信息
        int length() 返回此字符串的长度
        char charAt(int index) 返回指定索引处的 char 值
        int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引。
        int lastIndexOf(String str)返回指定子字符串在此字符串中最右边出现处的索引

    3):字符串比较判断
        boolean equals(Object anObject) 将此字符串与指定的对象比较。
        boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写
        boolean contentEquals(CharSequence cs) 将此字符串与指定的 CharSequence 比较

     boolean startsWith(String prefix)   测试此字符串是否以指定的前缀开头。

    4):字符串大小写转换
        String toUpperCase()  把当前字符串转换为大写(谁调用该方法,谁就是当前字符)
        String toLowerCase()  把当前字符串转换为小写
    5):常用
         String substring(int beginIndex,[endIndex])从指定索引处(包括)的字符开始,直到此字符串末尾[不包括]。
        String[] split(str),以str分割字符串
        String trim()返回字符串的副本,忽略前导空白和尾部空白。

  8. String和StringBuilder以及StringBuffer的区别(建议使用StringBuilder):
       StringBuffer和StringBuilder都表示可变的字符串,功能方法都是相同的.
       唯一的区别:
      StringBuffer:  StringBuffer中的方法都使用了synchronized修饰符,表示同步的,在多线程并发的时候可以保证线程安全,保证线程安全的时候,性能(速度)较低.
      StringBuilder:StringBuilder中的方法都没有使用了synchronized修饰符,不安全,但是性能较高.

  9. 使用StringBuilder无参数的构造器,在底层创建了一个长度为16的char数组:
        char[] value   = new  char[16];
    此时该数组只能存储16个字符,如果超过了,得自动扩容.
                自动扩容(创建长度更大的数组,再把之前的数组拷贝到新数组)
     此时性能极低,一般的,我们事先知道大概需要存储多少字符,在构造器中就应该设置
    -----------------------------------------------------
    常用方法:
    append(Object val):表示追加任意类型数据
    StringBuilder deleteCharAt(int index)  :删除字符串中,指定位置的字符

  10. 随机数:随机地生成的任意的一个数(理论上讲具有不可预知性).
    Random类:
    ThreadLocalRandom类:
    UUID类:
    -------------------------------------------------
    Random类用于生产一个伪随机数(通过相同的种子,产生的随机数是相同的)。
    构造器:
    public Random():使用默认的种子(以当前系统时间作为种子)。
    public Random(long seed):根据指定的种子。
    -------------------------------------------------
    ThreadLocalRandom是Java7新增类,是Random类的子类,在多线程并发情况下,ThreadLocalRandom相对于Random可以减少多线程资源竞争,保证了线程的安全性。
     因为构造器是默认访问权限,只能在java.util包中创建对象,故,提供了一个方法ThreadLocalRandom.current()用于返回当前类对象
    UUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随即数来生成UUID.
    我们一般用来表示:随机的唯一的字符串.

    static UUID randomUUID()  

  11. 日期相关类:
    Date类: java.util.Date类,不是java.sql.Date.  类 Date 表示特定的瞬间,精确到毫秒.
    DateFormat/SimpleDateFormat类:
    Calendar类:
    Java8中重新为日期定义了新的API.
    -------------------------------------------------------------
    Date类中的大量方法都已经过时了,过时不代表不存在,依然可以使用,只不过不建议使用,官方建议我们使用Calendar类.

  12. 日期格式化操作:
    ------------------------------------------------------------------------------
    DateFormat:可以完成日期的格式化操作.
                 格式化(format):  Date类型对象------->String类型:    String format(Date date)
                 解析(parse):     String类型时间------>Date类型:    Date(返回值类型) parse(String source)  
    --------------------------------------------------------------------------------
    DateFormar转换的格式是固定的,我想根据自己的风格来做转换.

    SimpleDateFormat类:是DateFormat的子类,支持自定义格式模式.

    day17-常用类

    day17-常用类

    day17-常用类