JavaSE学习笔记-----第九章 常用类

字符串相关的类:
String的使用:使用一对"“引起来表示
1.String声明为final的,不可继承
2.String实现了Serializable接口,表示字符串是支持序列化的。
实现了Copareable接口,表示String可以比较大小。
3.String内部定义了final char[] value用来存储字符串数据
4.String代表不可变的字符序列。简称 不可变性
体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value赋值
2.当对现有的字符串进行链接操作时,需要重写指定内存区域赋值,不能使用原有的value赋值
3.当调用String的replace()方法修改字符或字符串时,需要重写指定内存区域赋值,不能使用原有的value赋值
5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中,字符串常量池中不会存储相同的字符串
String实例化方式:
方式一:通过字面量定义的方式
方式二:通过new+构造器的方式
面试题:String s = new String(“abc”);方式创建对象,在内存中创建了几个对象?
两个;一个是堆空间中new结构,另一个是char[]对应的常量池中的"abc”
结论:String的不同拼接操作
1.常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量
2.只要其中有一个是变量,结果就在堆中;
3.如果拼接的结果调用intern()方法,返回值就在常量池中。
String的常用方法:
JavaSE学习笔记-----第九章 常用类_第1张图片
JavaSE学习笔记-----第九章 常用类_第2张图片
JavaSE学习笔记-----第九章 常用类_第3张图片

    String与char[]之间的转换:
            String--->char[]  toCharArray()
            char[]---->String  字符串的构造器
    String与byte[]之间的转换:
            String --->byte[]   调用String 的getBytes()方式,可以指定字符集
            byte[]---->String    调用String的构造器
                        编码:  字符串--->字节
                        解码:  字节---->字符串
            说明:解码时,要求解码使用的字符集必须与编码使用的字符集一致,否则出现乱码

StringBuffer和StringBuilder的使用:
String、StringBuffer、StringBuilder三者的异同? String:不可变的字符序列,底层使用char[]数组 StringBuffer:可变的字符序列;线程安全的,效率偏低(多线程) char[]
StringBuilder:可变的字符序列 线程不安全的,效率高 JDK5.0新增 (非多线程) char[]
源码分析:
String str = new String();//new char[0]
String str1 = new String(“abc”);//new char[3]{‘a’,‘b’,‘c’};
StringBuffer sb1 = new StringBuffer();//new char[16] 底层创建了一个长度为16的char[]
sb1.append(‘a’);//value[0] = ‘a’
StringBuffer sb2 = new StringBuffer(“abc”);//char[] value = new char[“abc”.length()+16];
问题一:System.out.println(sb2.length())//3
问题二:扩容问题:如果添加的数据底层数组盛不下了,那就需要扩容底层的数组,默认情况下,扩容为原来的2倍+2
将原有数据复制到新数组中。
指导意义:开发中建议使用StringBuffer(int capaticy)或者StringBuilder(int capaticy)
StringBuffer的常用方法:
增:append() 删:delete() 改replace() setCharAt() 查:charAt() 插:insert() 长度:length() 遍历 for+charAt()
效率:StringBuilder>StringBuffer>String
JDK8之前的日期时间API
System中currentTimeMillis() 此方式适用于计算时间差
java.util.Date类 子类 java.sql.Date类
1.两个构造器的使用:
Date():创建了一个对应当前时间的对象
Date(long date) 创建指定毫秒数的Date对象
2.两个方法的使用
toString() 显示当前的年、月、日、时、分、秒
getTime() 获取当前Date对象的毫秒数(时间戳)
3.java.sql.Date对应着数据库中日期对象
实例化:Date(long date)
将util.Date—>sql.Date
java.sql.Date date = new java.sql.Date(new java.util.Date().getTime);
SimpleDateFormat类的使用:是对Date类的格式化解析 1.两个操作:
①格式化: 日期—>字符串 format()
②解析:格式化的逆过程 字符串—>日期 parse()
2.SimpleDateFormat的实例化
使用默认构造器
使用带pattern的构造器 yyyy-MM-dd hh:mm:ss
Calendar的使用:抽象类
1.实例化
方式一:创建其子类(GregorianCalendar)的对象
方式二:调用其静态方法 getInstance();
Calendar calendat = Calendar.getInstance();
2.常用方法
get()、set()、add()
getTime() 日历类–>Date()
setTime() Date—>日历类
JDK8新增日期时间API
LocalDate、LocalTime、LocalDateTime的使用: 类似Calendar类
实例化:调用now()方法,获取当前的日期 、时间、日期+时间
of()方法:设置指定的年、月、日、时、分、秒,没有偏移量
getXxx()方法 获取相关属性
withXxx()方法 设置相关属性
plusXxx() 增加相关属性
minusXxx() 减去相关属性
体现了不可变性
Instant类的使用 瞬时 类似于java.util.Date类
实例化:now()方法 获取本初子午线对应的标准时间
atOffset(ZoneOffset.ofHours(8)) 添加时间的偏移量
toEpochMilli() 获取对应的毫秒数
ofEpochMilli() 根据毫秒数创建对象
DateTimeFormat类的使用:格式化或解析日期时间,类似于SimpleDateFormat
JavaSE学习笔记-----第九章 常用类_第4张图片

其他API:
JavaSE学习笔记-----第九章 常用类_第5张图片

Java比较器的使用:
一、说明 Java中的对象,正常情况下,只能进行比较==或!=。不能使用>或者<的。
但是在开发场景中我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
如何实现?使用两个接口中的任意一个 Comparable或Comparator
二、Comparable接口的使用 自然排序
1.像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象的大小(从小到大排序)
2.重写compareTo(obj)对象的规则:
如果当前对象this大于形参对象obj,返回正整数
如果当前对象this小于形参对象obj,返回负整数
如果当前对象this等于形参对象obj,返回0
3.对于自定义类来说,需要排序,要实现Comparable接口重写compareTo()方法
三、Comparator接口 定制排序
1.背景:当元素的类型没有实现java.lang.Comparable 接口又不方便修改代码,或者实现了java.lang.Comparable接口的
排序规则不适合当前的操作,考虑Comparator接口
2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小
Comparable接口与Comparator的试用对比:
Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小
Comparator接口属于临时性的比较
其他相关类:System、Math、BigInteger、BigDecimal

你可能感兴趣的:(JavaSE学习笔记,java,字符串,编程语言)