Java SE 宋红康 days03-高级篇-常用类

1. String 字符串

  String 声明为 final 的,不可被继承

  实现了 Serializable 接口:表示字符串是支持序列化的;实现了 Comparable 接口:表示 String 可以比较大小

  String 内部定义了 final char[ ] value,用于存储字符串数据;

  String 代表不可变的字符序列,简称不可变性

    a. 当字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的 Value 进行赋值; 

    b. 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的 Value 进行赋值;

    c. 当调用 String 的 replace() 方法修改指定字符或字符串时,也需要重新指定内存区域赋值

  注:通过字面量(a = “xxx”)的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池里;

    字符串常量池中是不会存储相同内容的字符串的;

2. String 的实例化方式:

  方式一:通过字面量定义的方式(数据生命在方法区中的字符串常量池中)

  方式二:通过 new + 构造器的方式(实例保存的地址值,是数据在堆空间中开辟空间以后对应的地址值)

3.  面试题:String s = new String("abc");方式创建对象,在内存中创建了几个对象?

  两个:一个是堆空间中 new 结构,另一个是 char[ ]对应常量池中的数据“abc”;

4. 结论:

  a. 常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量;

  b. 只要其中有一个是变量,结果就在堆中;

  c. 如果拼接的结果调用 intern() 方法,返回值就在常量池中;

5. String 与 char[ ]之间的转换

  String ---> char[ ]:调用 String 的 toCharArray()

  char[ ] ---> String:调用 String 的构造器(String str = new String(arr))

6. String 和 byte[ ]之间的转换

  编码:String ---> byte[ ]:调用 String 的 getBytes();字符串 ---> 字节(看得懂 ---> 看不懂的二进制数据)

  解码:byte[ ] ---> String:调用 String 的构造器;编码的逆过程,字节 ---> 字符串

7. java.lang.StringBuffer代表可变的字符序列(StringBuffer类)

  String、StringBuffer、StringBuilder三者异同

    String:不可变字符序列,底层使用 char[ ] 存储;

    StringBuffer:可变字符序列,线程安全,效率低;底层使用 char[ ] 存储;

    StringBuilder:可变字符序列,线程不安全,效率高(不存在多线程,建议使用);底层使用 char[ ] 存储;

  效率:StringBuilder > StringBuffer > String

8. 时间戳(System.currentTimeMillis(),返回当前时间与1970.1.1.00.00.00.000之间以毫秒为单位的时间差)

9. SimpleDataFormate的使用:对日期 Date 类的格式化和解析

10. Calendar日历类(抽象类)的使用

  ① 实例化

    a. 创建其子类(GregorianCalendar)的对象;

    b. 调用其静态方法 getInstance()

  ② 常用方法:set()、add()、getTime()、setTime();

11. LocalDate、LocalTime、LocalDateTime(常用)的使用

  

   

12. Instant:时间线上的一个瞬时点;

  

13. DateTimeFormatter类:格式化或解析日期、时间;

14. Java比较器(排序方式又两种:java.lang.Comparable 自然排序,java.lang.Comparator 定制排序)

  正常情况下,只能用 ==、!=进行比较,但是开发时会对多个对象进行排序,需要比较对象的大小;

  Comparable 接口的使用:

    a. 像 String、包装类等实现类Comparable 接口,重写了CompareTo()方法,给出了比较两个对象的大小;

    b. 重写了CompareTo(obj)规则:

      如果当前对象this大于形参对象obj,则返回正整数;

      如果当前对象this小于形参对象obj,则返回负整数;

      如果当前对象this等于形参对象obj,则返回零。

    c. 对于自定义类来说,如果需要排序,可以让自定义类实现 Comparable 接口,重写 CompareTo(obj) 方法;

     在 CompareTo(obj) 方法中指明如何排序;

  Compartor 接口的使用:

    a. 当元素的类型没有实现 java.lang.Comparable 接口而又不方便修改代码

     或实现了java.lang.Comparable 接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序;

    b. 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:

      如果方法返示 回正整数,则表示o1大于o2;  

      如果返回0,表示相等;

      返回负整数,表示o1小于o2。

  二者比较:

    a. Comparable 接口的方式一旦一定,保证 Comparable 接口实现类的对象在任何位置都可以比较大小;

    b. Compartor 接口属于临时性的比较;

posted @ 2022-10-01 20:37  LinxhzzZ  阅读(20)  评论(0)    收藏  举报