JavaSE API

JavaSE API

排序

java.lang.Comparable

java.lang.Comparator

java.lang.Object

它是所有类型的根父类

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

理解

  (1)Object类的所有方法,在所有对象中都有,包括数组对象

  (2)Object类的变量可以接受任意类型的对象
    Object类型的形参可以接受任意类型的对象作为实参
    Object[]类型的数组可以接受任意类型的对象作为它的元素

  (3)所有对象创建时,都会调用Object的无参构造

方法

  (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在多线程中使用

包装类 java.lang

装箱与拆箱

  装箱

    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;

  原则:只能是对应的包装类和基本数据类型之间进行转换

对应的关系

  byte  Byte

  short  Short

  int  Integer

  long  Long

  char  Character

  float  Float

  double  Double

  boolean  Boolean

其他方法

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

  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)  转大写

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

  Byte,Short,Integer,Long  -128~127

  Float,Double  没有缓存

  Character  0~127

  Boolean  true or false

Java.lang.String

字符串类型的特点

  1、不能被继承

    因为String是final修饰的类

  2、字符串对象是常量对象,一旦创建就不能修改,一旦修改就是新对象

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

    常量池在哪里

      JDK1.6,方法区

      JDK1.7,堆

      JDK1.8,元空间

  4、任何字符串字面量都是String的对象

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

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

拼接和比较

  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
    }

常用的方法

  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.Collato

        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(目标子串, 新子串)

java.lang.StringBuffer和java.lang.StringBuilder

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

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

和String的区别

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

    String一旦涉及修改就产生新的String对象

    StringBuilder和StringBuffer不会产生新的StringBuilder和StringBufffer对象

  (2)赋值的方式

    只有String支持,String str  = "xxx";

  (3)拼接

    String支持+  每一次拼接产生新对象,浪费空间和时间

    append  不会产生新对象

常用的方法

  (1)拼接

    append(xx)

    支持连写  sBuilder.append(xx).append(yyy).append(zzz)...

  (2)插入

    insert(index,xx)

  (3)删除

    delete(start, end)

  (4)替换

    setCharAt(index, char)

  (5)反转

    reverse()

 

posted @ 2023-03-02 15:11  LuckySnail  阅读(29)  评论(0)    收藏  举报