1.1 常用API
API全名
application(应用) programming(程序) interface(接口)
API是应用程序编程接口
Java API
Java API就是sun公司提供给我们使用的类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。
源代码
在JDK中有src.zip文件,这个文件夹是所有Java类的源文件。可以在其中查看相对应的类的源码。
我们可以通过查帮助文档来了解Java提供的API如何使用
1.2 Object类
Object类是Java语言中的根类,即所有类的父类。其所有方法子类都可以使用。其中的toString、equals是非常常用的方法。
1.2.1 toString方法
当调用System.out.println()方法时,实际上是调用被打印者的toString方法,返回字符串,再将字符串打印的过程。
但是Object类的toString方法返回的为对象地址值,即对象的类型+@+哈希值(地址值)。所以我们需要重写User类的该方法,让该方法返回的是一个User对象的具体信息,而不是其地址值。
1.2.2 equals方法
由于引用类型不能像基本类型一样使用==运算符来进行运算判断,所以判断两个对象是否”相同”使用的是equals方法。
Object类的equals方法比较的为对象地址值,所以我们需要重新定义两个对象的比较规则,比如字符串就是重写了equals方法才比较的为内容,否则比较的也为地址值。再比如本例中,我们可以将姓名相同的User判断为相同的User。这时根据规则重写equals方法即可。(如果有别的需求则按照别的需求来重写equals方法!)
注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象特有数据时,一定要进行类型转换,在转换之前必须进行类型判断。
1.2.3 其他方法
public final Class<?> getClass() //返回对象数据类型
public int hashCode() //返回对象哈希值(地址值)(常作为识别不同对象的依据)
protected void finalize() throws Throwable //垃圾回收器调用,执行清除资源
1.3 String类
1.3.1 字符串概念
字符串是日常开发过程中最常用的。代表一个字符序列,其底层为字符数组。
我们之前认为的一些高深莫测的问题其实都是通过字符串的拼写来完成的,比如在浏览器发送一个HTTP请求,实际就是发送一个符合规定格式的字符串。
我们需要更为熟练地应用String类的方法。
1.3.2 字符串的特殊性
字符串是特殊的引用类型,表现在字符串是常量,每一个字符串的值都是无法被改变的(请一定区分开是对象内容改变还是变量指向的地址值改变),存在于内存当中的特殊区域——常量池。
当使用字面值常量来表示字符串时,字符串一旦生成,在常量池中是不可变的,那么不管有多少个引用,只要他们指向的字符串值相同,即就是这些引用指向同一片内存区域。
//演示字符串可以共享
String str1 = "itcast";
String str2 = "itcast";
System.out.println(str1==str2);
输出的结果为true,就说明str1的引用和str2的引用指向的同一片内存区域。
注意:但是,如果使用new关键字创建对象,不使用字面值常量,则其仍为堆内存中普通的对象,各自有各自的地址。
1.3.3 常见方法
构造方法:
public String() //创建空字符串
publicString(byte[] bytes) //将字节数组转为字符串
publicString(char[] value) //将字符数组转为字符串
普通方法(带√的方法为难题常用方法):
public String toUpperCase() //小写转大写
public String toLowerCase() //大写转小写
public intlength() //获取长度
public booleancontains(CharSequence s) //判断调用方法字符串是否包含参数字符串
注意:这里使用到了多态,CharSequence 是String的接口
public String substring(int start) //截取从start索引开始到最后的子字符串
√public String substring(int start,int end) //截取指定位置的子字符串
public String trim() //去除字符串两端空白
√public char[] toCharArray() //字符串与字符数组的转变
√public char charAt(int index) //根据索引查找内容
√public int indexOf(int ch) //根据内容查找索引
public String replace(char oldChar,char newChar) //替换字符
√public boolean endsWith(String suffix)
public boolean startsWith(String prefix)
//以指定内容开头或结尾
完成以下练习:
1:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]
2:查找指定文章中共出现多少个字母a。如果以a开头,则删除开头的a,最后将其全部转换为e。
1.4 StringBuffer类
1.4.1 概念
字符串是不可变的,所以每拼写一次字符串均会产生新的对象,而字符串缓冲区是一个可变的字符串临时存储区域。在该区域内存储、拼写需要的字符串,当需要真正的字符串时,再将存储区内的字符串取出,这样全部过程只有一个字符串缓冲区对象,更为高效。
同步安全问题会在多线程的学习后了解。
StringBuffer是线程同步的(安全的),StringBuilder是不同步的(不安全的),二者方法完全一致。
线程同步操作需要消耗更多的系统资源,所以更慢,而在日常开发过程中,同一个字符串的操作通常不会涉及多线程问题,所以在不考虑安全问题的情况下,尽量使用速度更快的StringBuilder。
1.4.2 常见方法
public StringBuilder append(Xxx xxx) //向字符串缓冲区中添加字符串
public String toString() //将缓冲区内内容返回
//其他删除、修改、插入等方法可自行查询API
1.4.3 链式调用:
在StringBuilder的方法中,有许多方法的返回值都是该类型本身,如append方法。这时,阅读API后发现,其实返回值就是其本身,这时我们可以继续调用append方法,依次类推,这种调用方法叫做链式调用。
如:
StringBuilder sb = new StringBuilder();
sb.append(“aaa”) .append(“bbb”).append(“ccc”) .append(“ddd”) ;
String data = sb.toString(); //data的结果为aaabbbcccddd