JavaSE 常用类

Object类

(1)Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。
(2)Object类的构造方法有一个,并且是无参构造
        这其实就是理解当时我们说过,子类构造方法默认访问父类的构造是无参构造
 (3)要掌握的方法:
        A:toString()
            返回对象的字符串表示,默认是由类的全路径+'@'+哈希值的十六进制表示。
            这个表示其实是没有意义的,一般子类都会重写该方法。
        B:equals()
            比较两个对象是否相同。默认情况下,比较的是地址值是否相同。
            而比较地址值是没有意义的,所以,一般子类也会重写该方法。
    (4)要了解的方法:
        A:hashCode() 返回对象的哈希值。不是实际地址值,可以理解为地址值。
        B:getClass() 返回对象的字节码文件对象,反射中我们会详细讲解    
        C:finalize() 用于垃圾回收,在不确定的时间
        D:clone() 可以实现对象的克隆,包括成员变量的数据复制,但是它和两个引用指向同一个对象是有区别的。
    (5)两个注意问题;
        A:直接输出一个对象名称,其实默认调用了该对象的toString()方法。
        B:面试题 

            ==和equals()的区别?
            A:==
                基本类型:比较的是值是否相同
                引用类型:比较的是地址值是否相同
            B:equals()
                只能比较引用类型。默认情况下,比较的是地址值是否相同。
                但是,我们可以根据自己的需要重写该方法。

Scanner类

(1)在JDK5以后出现的用于键盘录入数据的类。
    (2)构造方法:
        A:讲解了System.in这个东西。
            它其实是标准的输入流,对应于键盘录入
        B:构造方法
            InputStream is = System.in;
            
            Scanner(InputStream is)
        C:常用的格式
            Scanner sc = new Scanner(System.in);
    (3)基本方法格式:
        A:hasNextXxx() 判断是否是某种类型的
        B:nextXxx()    返回某种类型的元素
    (4)要掌握的两个方法
        A:public int nextInt()
        B:public String nextLine()
    (5)需要注意的小问题
        A:同一个Scanner对象,先获取数值,再获取字符串会出现一个小问题。
        B:解决方案:
            a:重新定义一个Scanner对象
            b:把所有的数据都用字符串获取,然后再进行相应的转换
            

String类

    (1)多个字符组成的一串数据。
        其实它可以和字符数组进行相互转换。
    (2)构造方法:
        A:public String()
        B:public String(byte[] bytes)
        C:public String(byte[] bytes,int offset,int length)
        D:public String(char[] value)
        E:public String(char[] value,int offset,int count)
        F:public String(String original)
        下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
        G:String s = "hello";
    (3)字符串的特点
        A:字符串一旦被赋值,就不能改变。
            注意:这里指的是字符串的内容不能改变,而不是引用不能改变。
        B:字面值作为字符串对象和通过构造方法创建对象的不同
            String s = new String("hello world");和String s = "hello world"的区别?

 String s="Hello world"; 
先在栈中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"Hello world",如果没有,则将"Hello world"存放进栈,并令s指向“Hello world”,如果已经有”Hello world” 则直接令s指向“Hello world”。

String s=new String("Hello World"); 
用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
    (4)字符串的面试题(看程序写结果)
        A:==和equals()
            String s1 = new String("hello");
            String s2 = new String("hello");
            System.out.println(s1 == s2);// false
            System.out.println(s1.equals(s2));// true

            String s3 = new String("hello");
            String s4 = "hello";
            System.out.println(s3 == s4);// false
            System.out.println(s3.equals(s4));// true

            String s5 = "hello";
            String s6 = "hello";
            System.out.println(s5 == s6);// true
            System.out.println(s5.equals(s6));// true
        B:字符串的拼接
            String s1 = "hello";
            String s2 = "world";
            String s3 = "helloworld";
            System.out.println(s3 == s1 + s2);// false
            System.out.println(s3.equals((s1 + s2)));// true

            System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true
            System.out.println(s3.equals("hello" + "world"));// true
    (5)字符串的功能(自己补齐方法中文意思)
        A:判断功能
            boolean equals(Object obj)                          将此字符串与指定的对象比较

            boolean equalsIgnoreCase(String str)           将此String与另一个String比较,不比较大小写

            boolean contains(String str)                当且仅当此字符串包含指定的char值序列时,返回true
            boolean startsWith(String str)             测试此字符串是否以指定的前缀比较
            boolean endsWith(String str)              测试此字符串是否以指定的后缀比较
            boolean isEmpty()                              当且仅当length()为0时返回true
        B:获取功能
            int length()                                           返回此字符串的长度
            char charAt(int index)                           返回指定索引处的char值
            int indexOf(int ch)                                返回此字符串在此字符串中第一次出现处的索引
            int indexOf(String str)                           返回指定子字符串在此字符串中第一次出现处的索引
            int indexOf(int ch,int fromIndex)          返回此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索
            int indexOf(String str,int fromIndex)     返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始搜索
            String substring(int start)                     

返回一个新的字符串,它是此字符串的一个子字符串

            String substring(int start,int end)

返回一个新字符串,它是此字符串的一个子字符串。

        C:转换功能
            byte[] getBytes()

使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

            char[] toCharArray()

 将此字符串转换为一个新的字符数组。

            static String valueOf(char[] chs)

  返回 char 数组参数的字符串表示形式。

            static String valueOf(int i)

 返回 int 参数的字符串表示形式。

            String toLowerCase()

使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

            String toUpperCase()

使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

            String concat(String str)

将指定字符串连接到此字符串的结尾。

        D:其他功能
            a:替换功能 
                String replace(char old,char new)

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

                String replace(String old,String new)

返回一个新的字符串,它是通过用 newString 替换此字符串中出现的所有 oldString 得到的。

            b:去空格功能
                String trim()

返回字符串的副本,忽略前导空白和尾部空白。

            c:按字典比较功能
                int compareTo(String str)

          按字典顺序比较两个字符串。

                int compareToIgnoreCase(String str) 

         按字典顺序比较两个字符串,不考虑大小写。

 

StringBuffer类

    (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了     一个字符串缓冲区类。StringBuffer供我们使用。
    (2)StringBuffer的构造方法

 A:StringBuffer()  

B:StringBuffer(int size)
C:StringBuffer(String str)
    (3)StringBuffer的常见功能(自己补齐方法的声明和方法的解释)
        A:添加功能                  

 StringBuffer append()
        B:删除功能

delete(int start, int end)
deleteCharAt(int index)

        C:替换功能

replace(int start, int end, String str)

        D:反转功能

reverse()

        E:截取功能(注意这个返回值)

String   substring(int start)
String   substring(int start, int end)

(4)StringBuffer的练习
        A:String和StringBuffer相互转换
            String -- StringBuffer
                构造方法
            StringBuffer -- String
                toString()方法
        B:字符串的拼接
        C:把字符串反转
        D:判断一个字符串是否对称
    (5)面试题
        小细节:
            StringBuffer:同步的,数据安全,效率低。
            StringBuilder:不同步的,数据不安全,效率高。
        A:String,StringBuffer,StringBuilder的区别

1.可变与不可变

  String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。

    private final char value[];

  StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。

    char[] value;

2.是否多线程安全

  String中的对象是不可变的,也就可以理解为常量,显然线程安全

  AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。

  StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。看如下源码:

复制代码

1 public synchronized StringBuffer reverse() {
2     super.reverse();
3     return this;
4 }
5 
6 public int indexOf(String str) {
7     return indexOf(str, 0);        //存在 public synchronized int indexOf(String str, int fromIndex) 方法
8 }

复制代码

  StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

 3.StringBuilder与StringBuffer共同点

  StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。

  抽象类与接口的其中一个区别是:抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重复写已经存在的方法;而接口中只是对方法的申明和常量的定义。

  StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer会在方法上加synchronized关键字,进行同步。

  最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。


        B:StringBuffer和数组的区别?

数组是一种数据类型,一旦数组初始化完成,数组在内存中所占的空间就被固定下来,因此数组的长度不可改变,即使把某个数组元素的数据清空,它所占的空间依然被保留,依然属于该数组,数组的长度依然不变。

StringBuffer的对象代表一个字符序列可变的字符串,可以调用StringBuffer提供的方法来改变这个字符串。而且只能存放字符串,但是数组可以存放的类型就不限于字符串了。

    (6)注意的问题:
        String作为形式参数,StringBuffer作为形式参数

 

Integer类

 (1)为了让基本类型的数据进行更多的操作,Java就为每种基本类型提供了对应的包装类类型
        byte         Byte
        short        Short
        int            Integer
        long        Long
        float        Float
        double        Double
        char        Character
        boolean        Boolean
    (2)Integer的构造方法
        A:Integer i = new Integer(100);
        B:Integer i = new Integer("100");
            注意:这里的字符串必须是由数字字符组成
    (3)String和int的相互转换
        A:String -- int
            Integer.parseInt("100");
        B:int -- String
            String.valueOf(100);
    (4)其他的功能(了解)
        进制转换

static StringtoBinaryString(int i)
          以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。
static StringtoHexString(int i)
          以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。
static StringtoOctalString(int i)
          以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。

   (5)JDK5的新特性
        自动装箱    基本类型--引用类型
        自动拆箱    引用类型--基本类型
        
        把下面的这个代码理解即可:
            Integer i = 100;
            i += 200;
    (6)面试题
        -128到127之间的数据缓冲池问题

        在进行自动拆装箱时,编译器会使用Integer.valueof()来创建Integer实例。

4:Character(了解)
    (1)Character构造方法    
        Character ch = new Character('a');
    (2)要掌握的方法:(自己补齐)
        A:判断给定的字符是否是大写
        B:判断给定的字符是否是小写
        C:判断给定的字符是否是数字字符
        D:把给定的字符转成大写
        E:把给定的字符转成小写
    (3)案例:
        统计字符串中大写,小写及数字字符出现的次数




转载于:https://my.oschina.net/u/3611296/blog/1489834

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值