<黑马程序员> 第五篇:常用类

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

5.1 API
5.1.1 什么是API?

API全名:application(应用) programming(程序) interface(接口)

API是应用程序编程接口 

如果我们想实现一个机器人的功能,有的时候不需要我们自己造一个机器人,我们可以从生产机器人的厂家购买一个,这时我们只需要学会如何操作这个机器人就可以了。

机器人厂商将机器人具体的实现隐藏起来,对外提供操作机器人的按钮,或者遥控器,这些控制机器人向前向后的按钮就是我们说的API

 


5.1.2 Java API

Java API就是sun公司提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。

我们可以通过查帮助文档来了解Java提供的API如何使用

 


5.1.3 Java中的常用API

1. String类

   对字符串进行操作通常我们使用String类,相关的还有StringBuffer和StringBuilder

2. 集合类

   集合是一种容器,用来存取对象(Collection、Map)

3. 包装类

   Java定义了一组包装类对基本数据类型进行了包装(Integer、Double、Boolean)

4. 时间对象

   Java定义了一些类方便用户对时间、日期进行处理(Date、Calendar)

5. 系统类

   Java定义了一些类针对系统进行操作(System、Runtime)

6. IO流

   Java定义了一些类对数据传输进行了封装(输入输出流、File文件对象)

7. Socket

   Java定义了一些类方便用户进行网络编程(Socket、DatagramSocket)

 


5.2 String 类 – 不可修改

String类是一个不可变类。

字符串是一个特殊的对象,字符串一旦初始化就不可以被改变。


5.2.1 String类面试题

1.判断定义为String类型的s1和s2是否相等

      

 String s1 = "abc";

       String s2 = "abc";

       System.out.println(s1 == s2);          

//true 先去常量池里找有没有abc这个对象,如果没有,就创建一个,如果有,就不创建了

       System.out.pritnln(s1.equals(s2));        

//true 因为String重写了Object里的equals方法,比较是对象的内容,只要他们内容一模一样就为true


 

 

2.下面这句话在内存中创建了几个对象?

       String s1 = new String("abc");        

//单独写这句话就是创建两个对象,先在常量池里创建一个,然后将常量池副本拷贝一份给堆内存的对象里

 

3.判断定义为String类型的s1和s2是否相等

     

  String s1 = new String("abc");         

       String s2 = "abc";

       System.out.println(s1 == s2); ?        

//false s1是记录的堆内存的地址值,s2记录的是常量池中的地址值

       System.out.pritnln(s1.equals(s2)); ?

//true 因为String重写了Object里的equals方法,比较是对象的内容,只要他们内容一模一样就为true


 

 

4.判断定义为String类型的s1和s2是否相等

      

 String s1 = "a" + "b" + "c";

       String s2 = "abc";

       System.out.println(s1 == s2); ?        

//true 因为java编译器有常量优化机制,在编译的时候就把"a","b","c"三个常量看成了一个常量"abc"

       System.out.pritnln(s1.equals(s2)); ?   

//true 因为String重写了Object里的equals方法,比较是对象的内容,只要他们内容一模一样就为true


 

 

5.判断定义为String类型的s1和s2是否相等

      

 String s1 = "ab";

       String s2 = "abc";

       System.out.println((s1 + "c") == s2); ?   

//false 字符串与其他的类型用+相连接的时候,其实底层是调用StringBuffer的append方法,相当于在堆内存创建了一StringBuffer对象

       System.out.pritnln((s1 + "c").equals(s2)); ?

//true 因为String重写了Object里的equals方法,比较是对象的内容,只要他们内容一模一样就为true   


 

          


5.2.2 String类的构造函数

1.字节数组

       String(byte[])                        

//用默认的码表编码,编码意思就是编完了我们能看懂

       String(byte[], String)                

//用指定的码表编码

       String(byte[], int, int, String)      

//根据指定索引值和长度,进行默认的码表编码

 

2.字符数组

       String(char[])                        

//将字符数组转成字符串

       String(char[], int, int)          

//根据指定索引值和个数,进行转成字符串

 


5.2.3 String类的常用方法
5.2.3.1  判断

1.1 boolean equals(Object);               

//String类重写了Object类中的equals方法,比较两个对象的内容,如果内容一模一样就返回true

1.2 boolean equalsIgnoreCase(string); 

//比较两个对象的内容,忽略大小写

1.3 boolean contains(string);             

//判断调用此方法的字符串是否包含传入的字符串,如果包含就返回true

 1.4 boolean startsWith(string);           

//判断调用此方法的字符串是否以传入的字符串开头

1.5 boolean endsWith(string);           

//判断调用此方法的字符串是否以传入的字符串结尾 

1.6 boolean isEmpty();                          

//判断字符串里是否有内容,依赖的字符串的长度,如果长度为零就返回true

 


5.2.3.2  获取
       2.1 int length();                             

//获取字符串的长度

2.2 char charAt(index);

 //通过传入的角标值获取对应的字符,如果传入的角标不存在,会抛出StringIndexOutOfBoundsException 

2.3 int indexOf(int ch);                   

//通过传入的字符或字符对应的int值,获取对应的角标,如果传入的不存在就返回-1

int idnexOf(int ch,fromIndex);        

//通过传入的字符或字符对应的int值,并指定索引的角标开始位置 

2.4 int indexOf(string str);                 

//通过传入的字符串,返回字符串中第一个字符的角标位置

int idnexOf(string str,fromIndex);

//通过传入的字符串,指定索引的开始位置 

2.5 int lastIndexOf(ch);                  

//通过传入的字符或字符对应的int值,从后向前遍历,找到在后面第一次出现的位置

int lastIndexOf(ch,fromIndex):      

//通过传入的字符或字符对应的int值,指定从后面哪个位置开始索引 

2.6 int lastIndexOf(string);                

//通过传入的字符串,从后面向前遍历,找到在后面第一次出现的字符串的位置,返回

int lastIndexOf(string,fromIndex):   

//通过传入的字符串,从指定位置后面向前遍历,在指定位置向前的第一个出现字符串的位置 

2.7 String substring(start);           

//截取子串,从传入的角标位置开始,一直到length()

String substring(start,end);             

//截取子串,包含头不包含尾

          


5.2.3.3  转换

3.1 byte[] getBytes();                           

//用默认编码变解码,让计算机看懂 

3.2 char[] toCharArray();                 

//将字符串转换成字符数组

3.3 static String copyValueOf(char[]);   

//将传入的字符数组转换成字符串

static String copyValueOf(char[] data, int offset, int count);

//将传入的字符数组转换字符串,从offset开始,转换count个字符成字符串 

3.4 static String valueOf(char[]);       

//将传入的字符数组转换成字符串

static String valueOf(char[] data, int offset, int count);

//将传入的字符数组转换字符串,从offset开始,转换count个字符成字符串 

3.5 static String valueOf(int);             

//将一个int数转换成字符串

static String valueOf(double);

static String valueOf(boolean); 

3.6 static String valueOf(object);         

//传入一个对象,和对象调用toString方法一样和object.toString():结果是一样的。 

3.7 String toLowerCase():                 

//将字符串转换成小写         

String toUpperCase():                   

//将字符串转换成大写 

3.8 "abc".concat("kk");                          

//将传入的字符串和调用的字符相连接,和+的结果一样,但是比+速度快

              


5.2.3.4  替换

4.1 String replace(oldChar,newChar);

// 替换,新的字符替换已有字符,如果oldChar不存在,返回原来的那个字符串

4.2 String replace(string,string);

//新的字符串替换已有的字符串,如果oldString不存在,返回原来的那个字符串

          


5.2.3.5  切割

String[] split(regex);

例:

String s = "金三胖 郭美美 李天一";

String[] arr = s.split(" ");

// 通过regex(正则表达是)切割,切割后生成字符串       


 


5.2.3.6  去除字符串两空格

String trim();

// 去除字符串前导和尾部空格

//注意转义

 

          


5.2.3.7  比较

String str = "ab";

String str1 = "bc";

int num = str.compareTo(str1);

//-1, 记忆为:首个不同,前面的减后面的。

//按照字典顺序(按照码表对应值比较),如果前面的是大的,返回正数(前面对应的码表值减去后面对应的码表值)

//如果后面的是大的,返回负数(前面对应的码表值减去后面对应的码表值)

//如果前后相等,返回零。

//前面是一个字母,后面是3个和前面一样的字母,那么返回负数,是前面的长度减去后面的长度。

 

 


5.3 StringBuffer 类 – 可修改 – 线程安全
5.3.1 概述

1.   字符串的组成原理就是通过该类实现的。

2.   StringBuffer:可以对字符串内容进行增删。

3.   StringBuffer:字符串缓冲区,用于存储数据,所以它也称之为容器.

4.   很多方法与String相同。

5.   StingBuffer是可变长度的。

 
5.3.2 缓冲区

1.   可以添加基本数据和引用数据。添加数据完毕,其实底层都是将其转成字符串进行使用。通过toString方法转成字符串。

2.   该容器和数组不一样,数组是固定长度的,而且只能添加同一类型。而StringBuffer长度是可变的,可以添加不同类型。类型一致的数据,可以使用数组,也可以StringBuffer。

但是数组添加元素,可以保证数据的类型不变。而StringBuffer添加完数据,全变成字符串。

3.   StringBuffer可以对字符串进行修改,而String不行。

 
5.3.3 StringBuffer 特有方法

1.   添加

1.1          StringBuffer append(int x);                       

//创建一个StringBuffer容器,向里面添加元素,如果里面没有直接添加,如果里面有,在已有的元素尾部添加。 

1.2          StringBuffer insert(int index,String str);    

//在制定的角标位置添加。        

注意:

StringBuffer append(int x);可以将基本数据类型和引用类型数据添加到缓冲区,将数据添加到缓冲区的末尾,数据追加,其实底层是把所有的数据类型转换成了字符存储到缓冲区 

没有添加short,byte,的方法也就是说如果你添加的是byte或short会自动提升为int 

这个方法返回的还是原来的缓冲区对象,举例调制鸡尾酒

  

2.   删除

2.1          StringBuffer delete(int start, int end);

//包含头,不包含尾。

2.2          StringBuffer delete(0,sb.length);

// 清空缓冲区

2.3          StringBuffer deleteCharAt(int index);

//根据指定的角标删除对应的字符

 

3.   修改

3.1          StringBuffer replace(int start,int end,string);    

//替换,指定要被替换的头角标和尾角标,(包含头,不包含尾),用传入的字符串替换。

3.2          void setCharAt(int index ,char);                              

//修改指定角标位置的字符

3.3          StringBuffer reverse();

//将缓冲区的字符反转                                          

3.4          void setLength(int len);

//设置缓冲区的长度,也可以理解为截取                                    

 

4.   查找

4.1          int indexOf(str);

//根据传入的字符串查从前面找,如果找到则返回字符串中第一个字符的角标位置,如果找不到则返回-1.

4.2          int lastIndexOf(str);

//根据传入的字符串查从后面找,如果找到则返回字符串中第一个字符的角标位置,如果找不到则返回-1.

 

 


5.3.4 String、StringBuffer、StringBuilder

1.   对于String来说,相对于其他两者来说是慢很多的,并且产生比较多的垃圾,这是很多好的程序都不想得到的结果。因为产生垃圾之后,GC会在一定的条件情况下出来进行垃圾清理,从而拖慢速度。

2.   StringBuffer 字符串变量(线程安全)

3.   StringBuilder 字符串变量(非线程安全)jdk1.5的新特性  

在开发中建议使用StringBuilder,因为没有加同步,所以运算速度较快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值