day16

java.lang.String类型:字符串类型
   1、String类型是final修饰,不能被继承的
   2、Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
         简单的说,就是程序中的所有""构成的都是String的对象,只不过他们是字符串常量对象。
         比较特殊的空字符串常量对象:"",它的长度为0
   3、所有的 字符串都是常量;它们的值在创建之后不能更改。
         简单理解就是String对象是不可变的,一旦修改(拼接、截取、替换...)一定会产生新的字符串对象。
   4、因为 String 对象是不可变的,所以可以共享。
         字符串常量对象是共享的,存在字符串的常量池中。
         字符串常量池在JVM内存的哪个部分:
         JDK1.6:方法区
         JDK1.7:堆中单独开辟一块空间用于存储字符串的常量
         JDK1.8:从堆中又挪出来,挪到了“元空间”
   5、字符串对象中如何存储字符串的内容
         内部使用一个char[]数组来存储的
         "hello" -> {'h','e','l','l','o'}
      字符串对象不可变有很多原因:

     (1)value数组是final修饰的,无法创建新的value数组
     (2)String类型中没有提供修改value数组的元素的方法

字符串的比较:
   (1)==比较地址
   (2)equals比较字符串内容

字符串对象的创建:
   1、String str = "hello";
   2、String s2  = new String("hello");

字符串的常用方法系列1:
   (1)int length():返回字符串对象的长度,其实就内部value数组的长度
   (2)String toUpperCase():把当前字符串中的字符转成大写,返回一个新的字符串对象
   (3)String toLowerCase():把当前字符串中的字符转成小写,返回一个新的字符串对象
   (4)字符串比较:boolean equals()  严格区分大小写
      boolean equalsIgnoreCase():不区分大小写
   (5)String trim():去掉前后空格 
   (6)String concat():完全等价于 +
   (7)判断字符串是否为空
      !"".equals(字符串)  非空
       "".equals(字符串)  空字符串

字符串的常用方法系列之二:
 字符串与字符数组之间的转换:
   1、把字符数组 -> 字符串
        String(char[] arr):用整个数组构建字符串
        String(char[] arr, int start, int count):取arr[start]开始的count个字符构造字符串
    2、把字符串转成字符数组:
        char[] toCharArray()
 思想:
    String中用char[] value存
    toCharArray()复制了一个新数组,原因是保证字符串的不可变性
   3、取第几个字符
        charAt(index)

String的常用方法系列三:
   编码与解码
      字符:给人看的
      字节:给机器识别
       所以在开发中,输出到“文件”,在网络中传输,都要把“字符”->"字节"
       如果对方接收到数据,从"文件”中读取,显示给用户看,又得“字节”-“字符”
   编码:把字符-->字节
   解码:把字节-->字符
   编码方式:GB2312,GBK,UTF-8,ISO8859-1
   编码的方法:
   byte[] getBytes():按照平台默认的字符编码
   byte[] getBytes(String charsetName) :按照指定的字符编码方式进行编码
   解码的方法:
   String(byte[] data):按照平台默认的字符编码
   String(byte[] data,String charsetName):按照指定的字符编码方式进行解码
   GBK:一个汉字对应2个字节
   UTF-8:一般一个汉字对应3个字节
   ASCII码表中的字符是在任意字符集中都兼容的,这些个只占1个字节

String的常用方法系列之四:
    判断字符串是否以xx开头,结尾
    boolean startsWith(xx)
    boolean endsWith(xx)

String的常用方法系列之五:
   在字符串中查找:
    (1)boolean contains(str):是否包含
    (2)int indexOf(str):如果存在就返回从左到右第一次出现的下标,否则返回-1
    (3)int lastIndexOf(str):如果存在就返回最后一次出现的下标,否则返回-1

字符串的常用方法系列六:
    字符串的截取
    substring(起始下标)   [起始下标,最后]
    substring(起始下标,结束下标) [起始下标,结束下标)

几个和正则相关的String方法:
   正则:不是Java的概念,在js等其他语言都有正则。
   正则表达式的目的是为了按照某个格式要求去匹配字符串
   1、boolean  matches(正则):判断当前字符串是否满足某种正则(规则)
   2、String replaceAll(正则,新值):把当前字符串中的复合这个“正则”部分替换为“新值”
   3、String replaceFirst(正则,新值):把当前字符串中的找到的第一个复合这个“正则”部分替换为“新值”
   4、String[] split(正则):按照要求进行拆分
 和正则无关的替换方法:
   (1)String replace(char oldChar, char newChar) :注意形参是char
   (2)String replace(CharSequence target, CharSequence replacement) :形参是字符虚列,就是字符串

java.lang.String:对象不可变,一旦变就会有新对象
   字符串的兄弟类:可变字符序列
   java.lang.StringBuffer:线程安全的可变字符序列。旧的。效率相对低。
   java.lang.StringBuilder:线程不安全的可变字符序列。新的JDK1.5。效率更高
   StringBuffer和StringBuilder的API是完全兼容,即方法签名一样,不一定的是一个适用于单线程,一个在适用于多线程。
   StringBuffer和StringBuilder对象的创建必须通过new,和String的可以直接等于"xxx"不同
   StringBuffer和StringBuilder的方法:
   (1)append(xx):直接在value中修改,如果value长度不够了,会重写扩容为原来的2倍+2。默认的value长度为16
   (2)insert(int offset, xx):即在字符串缓冲区的[offset]开始插入xx。如果value长度不够,也会扩容。
   (3)delete(int start, int end):删除[start,end)
            deleteCharAt(int index):删除指定位置的字符
   (4)reverse() 
   (5)String toString()

系统类java.lang.System:
   常量对象有三个
   (1)System.out:打印普通信息  PrintStream
   (2)System.err:打印错误信息  PrintStream
   (3)System.in:默认情况下,代表键盘输入 InputStream
    其他的方法:
   (1)System.currentTimeMillis():当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
   (2)System.arraycopy(src, srcPos, dest, destPos, length):
            如果src和dest是不同的数组,表示复制,从srt的[srcPos]开始,一共复制length个到dest的[destPos]开始存。
            如果src和dest是同一个数组,表示移动元素:
            如果srcPos > destPos:左移              一般用于删除
            如果srcPos < destPos:右移  一般用于插入
     (3)System.gc():表示通知垃圾回收器来回收垃圾,但不是立马响应,但是只要调用了,一定会来。
         开发是不建议手动调用gc()方法,因为垃圾回收算法已经很好了。
   (4)System.exit(0):0表示正常退出
            System.exit(1):1表示异常退出
   (5)Properties getProperties() :获取系统属性 
             ....
            String中内部用final char[] value;
            StringBuffer和StringBuilder的内部用:char[] toStringCache;

ava.util.Calendar:日历类型
    它的子类:GregorianCalendar
    方法:
   (1) Calendar getInstance()
   (2)get(常量名)

DK1.8之前:
 java.util.Date:
     类 Date 表示特定的瞬间,精确到毫秒。
     (1)new Date():获取系统时间
     (2)new Date(毫秒值):把毫秒转时间
     (3)long getTime():把时间转毫秒

日期时间的格式化:
    1、把指定格式字符串转成日期时间对象
    2、把日期时间对象转成指定格式字符串
          java.text.DateFormat
          java.text.SimpleDateFormat 
     (1)Date parse(字符串)
     (2)String  format(Date的日期对象)

posted @ 2019-10-04 09:51  zzz222zzz  阅读(490)  评论(0编辑  收藏  举报