目录

JavaSE API


JavaSE API

1 java.lang.Object

1.1 它是所有类型的根父类

1.2 一个类如果没有显式声明它的父类,这个类的直接父类就是Object

1.3 理解

  • (1)Object类的所有方法,在所有对象中都有,包括数组对象
  • (2)Object类的变量可以接受任意类型的对象 Object类型的形参可以接受任意类型的对象作为实参 Object[]类型的数组可以接受任意类型的对象作为它的元素
  • (3)所有对象创建时,都会调用Object的无参构造

1.4 方法

  • (1)无参构造

    • Object()

      • 所有对象创建时,都会调用Object的无参构造
  • (2)protected Object clone() throws CloneNotSupportedException

    • 如果子类要支持克隆,子类需要实现Cloneable接口,否则报CloneNotSupportedException
  • (3)public boolean equals(Object obj)

    • 指示其他某个对象obj是否与此对象this“相等”。
    • Object中的equals,等价于“==”比较,比较的是对象的地址
    • 如果子类需要比较的是属性的内容,那么一定要重写这个方法
  • (4)public int hashCode()

    • 在Object中默认这个方法返回的是 和“地址”相关的值

    • 如果重写了equals,那么必须重写hashCode方法,而且参与equals比较的属性,一定要参与hashCode的计算

    • 它俩的关系:

      • 两个对象的equals()返回true,两个对象的hashCode值?一定相等 两个对象的hashCode值不相等,两个对象equals方法结果?一定不相等 两个对象的hashCode值相等,两个对象equals方法结果?不一定相等
  • (5)public final Class getClass()

    • 返回某个对象的运行时类型,而不是编译时类型
  • (6)protected void finalize() throws Throwable

    • 当这个对象被垃圾回收机制回收之前调用,而且只会调用一次
  • (7)public String toString()

    • 在Object中默认返回的是 这个对象的运行是类型@这个对象的hash值的十六进制表现形式
    • 子类完全可以重写
  • (8)剩下的notify,notifyAll和wait在多线程中使用

2 包装类

java.lang

2.1 装箱与拆箱

  • 装箱

    • JDK1.5之前手动装箱

      • Integer i = new Integer(整数);
    • JDK1.5之后自动装箱

      • Ineteger i = 整数;
  • 拆箱

    • JDK1.5之前手动拆箱

      • Integer i = new Integer(整数); int num = i.intValue();
    • JDK1.5之后自动拆箱

      • Integer i = new Integer(整数); int num = i;
  • 原则:只能是对应的包装类和基本数据类型之间进行转换

2.2 对应的关系

  • byte

    • Byte
  • short

    • Short
  • int

    • Integer
  • long

    • Long
  • char

    • Character
  • float

    • Float
  • double

    • Double
  • boolean

    • Boolean

2.3 其他方法

  • 字符串与基本数据类型的转换

    • public static int parseInt(String s)throws NumberFormatException

      • 如果包含字母等非数字字符,会报错
    • public static int parseInt(String s, int radix)throws NumberFormatException

      • 可以包含字母,但是要在基数范围内
      • 例如基数radix是20,可以包含的范围是0-9,a,b,c,d,e,f,g,h,i,j
    • public static Integer valueOf(String s)throws NumberFormatException

    • public static Integer valueOf(String s, int radix) throws NumberFormatException

  • 像Integer中

    • public static String toBinaryString(int i)

      • 二进制形式
    • public static String toOctalString(int i)

      • 八进制形式
    • public static String toHexString(int i)

      • 十六进制形式
  • 像Character中

    • public static char toLowerCase(char ch)

      • 转小写
    • public static char toUpperCase(char ch)

      • 转大写

2.4 包装类对象的缓存问题(常量对象)

  • Byte,Short,Integer,Long

    • -128~127
  • Float,Double

    • 没有缓存
  • Character

    • 0~127
  • Boolean

    • true
    • false

3 java.lang.String

3.1 字符串类型的特点

  • 1、不能被继承

    • 因为String是final修饰的类
  • 2、字符串对象是常量对象,一旦创建就不能修改,一旦修改就是新对象

  • 3、因为字符串对象是常量对象,那么可以共享,字符串常量对象是在常量池中

    • 常量池在哪里

      • JDK1.6,方法区
      • JDK1.7,堆
      • JDK1.8,元空间
  • 4、任何字符串字面量都是String的对象

  • 5、字符串底层使用字符数组存储

  • 6、字符数组是private final修饰符

3.2 拼接和比较

  • 1、创建对象的个数

    • String str1 = “hello”; String str2 = “hello”;

      • 一个,在常量池
    • String str1 = new String(“hello”); String str2 = new String(“hello”);

      • 三个

        • 一个在常量池
        • 两个在堆中
  • 2、拼接和比较

    • 原则:+两边都是常量,结果也是常量,+两边有一个是变量,结果就不是常量,在堆中,如果结果使用了intern(),那么是常量

      @Test

      public void test3(){

        String str1 = "hello";
      
        String str2 = "java";
      
        String str3 = "hellojava";
      
        String str4 = "hello" + "java";//常量与常量拼接,还是常量
      
        String str5 = "hello" + str2;//常量与变量拼接,结果在堆中
      
        String str6 = str1 + str2;//变量与变量拼接,结果也在堆中
      
      
      
        System.out.println("str3 == str4  " + (str3 == str4));//true
      
        System.out.println("str3 == str5  " + (str3 == str5));//false
      
        System.out.println("str3 == str6  " + (str3 == str6));//false
      
      
      
        final String str7 = "hello";
      
        final String str8 = "java";
      
        String str9 = str7 + str8;//常量与常量拼接
      
        System.out.println("str3 == str9   " + (str3 == str9));//true
      
      
      
        String str10 = (str1 + str2).intern();//intern()的结果放常量池
      
        System.out.println(str3 == str10);//true
      

      }

3.3 常用的方法

  • 1、基本方法

    • (1)int length()

      • 返回字符串的长度,即字符的个数
    • (2)字符串的比较

      • boolean equals(String other)

        • this和other进行内容比较
        • 对Object的equals进行重写
        • 严格区分大小写
      • boolean equalsIgnoreCase(String anotherString)

        • this和anotherString进行内容比较
        • 不区分大小写
      • 自然排序

        • public int compareTo(String anotherString)

          • 如果是ASCII范围内,按照ASCII值的顺序
      • 定制排序

        • java.text.Collator

            String str3 = "中国";//Z
          
            String str4 = "美国";//M
          
          
          
            //如果想要按照字典顺序
          
            //找定制排序,实现了java.util.Comparator接口,重写int compare(String s1,String s2)
          
            //java.text.Collator
          
            Collator c = Collator.getInstance();
          
            int result = c.compare(str3, str4);
          
            System.out.println(result);//中 > 美
          
    • (3)去掉前后空格

      • String trim()
    • (4)转大小写

      • String toUpperCase()
      • public String toLowerCase()
    • (5)是否是空字符串

      • 方式一

        • “".equals(字符串)
      • 方式二

        • isEmpty()
  • 2、和字节相关

    • 编码:把字符串转成字节数组

      • byte[] getBytes()

        • 平台默认编码方式进行编码
      • byte[] getBytes(字符编码方式)

        • 按照指定的编码方式
    • 解码:把字节数组转成字符串

      • new String(byte[])
      • new String(byte[],int offset, int length)
      • new String(byte[], 字符解码方式)
      • ….
    • 乱码

      • (1)编码方式与解码方式不一致
      • (2)缺字节
  • 3、和字符相关

    • 把字符串转字符数组

      • char[] toCharArray()
    • 把字符数组转字符串

      • new String(char[])
      • new String(char[],int offset, int count )
      • ….
    • 取指定位置的字符

      • char charAt(index)
  • 4、是否以xx开头和结尾

    • boolean startsWith(xx)
    • boolean endsWith(xx)
  • 5、字符串截取

    • String subString(int start)

      • 从[start,最后]
    • String subString(int start, int end)

      • 从[start,end)
  • 6、拆分

    • String[] split(支持正则)
  • 7、查找

    • 是否包含

      • boolean contains(子串)
    • 查找索引位置

      • int indexOf(xxx)

        • 如果存在返回索引
        • 如果不存在返回-1
      • int lastIndexOf(xx)

  • 8、替换

    • String replace(目标子串, 新子串)

    • String replaceAll(目标子串, 新子串)

      • 支持正则
    • String replaceFirst(目标子串, 新子串)

4 java.lang.StringBuffer和java.lang.StringBuilder

4.1 StringBuffer是JDK1.0就有,是线程安全的

4.2 StringBuilder是JDK1.5引入,是线程不安全

4.3 和String的区别

  • (1)String对象是常量对象,是不能修改的,StringBuffer和StringBuilder是字符串缓冲区,可变字符序列,可以修改的

    • String一旦涉及修改就产生新的String对象
    • StringBuilder和StringBuffer不会产生新的StringBuilder和StringBufffer对象
  • (2)赋值的方式

    • 只有String支持,String str = “xxx”;
  • (3)拼接

    • String支持+

      • 每一次拼接产生新对象,浪费空间和时间
    • append

      • 不会产生新对象

4.4 常用的方法

  • (1)拼接

    • append(xx)

    • 支持连写

      • sBuilder.append(xx).append(yyy).append(zzz)…
  • (2)插入

    • insert(index,xx)
  • (3)删除

    • delete(start, end)
  • (4)替换

    • setCharAt(index, char)
  • (5)反转

    • reverse()
  • ….

5 JDK1.8之前日期时间

5.1 java.util.Date

  • (1)两个构造器

    • new Date()

      • 获取当前系统日期时间
    • new Date(long 毫秒)

      • 根据毫秒数获取日期时间对象
  • (2)把某个日期时间对象转成毫秒数

    • long getTime()

5.2 java.lang.System

  • long System.currentTimeMillis()

5.3 java.util.Calendar

  • (1)获取实例对象

    • Calendar.getInstance()

      • 获取平台默认
    • Calendar.getInstance(时区,语言环境)

  • (2)get(常量字段)

    • YEAR
    • MONTH
    • ….

5.4 java.text.DateFormat及其java.text.SimpleDateFormat

  • (1)构造器

    • SimpleDateFormat sf = new SimpleDateFormat(“模式”);
  • (2)把日期转成字符串

    • public final String format(Date date)
  • (3)把字符串转成日期

    • public Date parse(String source)

6 JDK1.8日期时间

6.1 相关的包

6.2 本地日期时间

  • java.time.LocalDate
  • java.time.LocalTme
  • java.time.LocalDateTime
  • 对应旧版本java.util.Calendar
  • 方法列表

6.3 日期时间格式化

  • java.time.format.DateTimeFormatter

    • format

      • 把日期时间对象转字符串
    • parse

      • 把字符串转日期时间对象
  • 三种形式获取DateTimeFormatter对象

    • 标准格式的常量对象

      • LocalDate date = LocalDate.now(); System.out.println(date.format(DateTimeFormatter.ISO_DATE));
      • DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE; String format = formatter.format(LocalDate.now());
    • Style

      • DateTimeFormatter dt = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL); String string = dt.format(LocalDate.now());

        • FormatStyle.FULL

          • 日期
        • FormatStyle.LONG

          • 日期时间
          • 日期
          • 时间
        • FormatStyle.MEDIUM

          • 日期
          • 日期时间
          • 时间
        • FormatStyle.SHORT

          • 日期
          • 日期时间
          • 时间
    • 自定义格式

      • DateTimeFormatter op = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”); System.out.println(op.format(LocalDateTime.now()));

6.4 日期的间隔

  • Period

6.5 时间的间隔

  • Duration

7 java.lang.Math

8 排序

8.1 java.lang.Comparable

8.2 java.lang.Comparator