黑马程序员全套Java教程_Java基础教程_API(十四)
1、API
1.1 API概述
- API(Application Programming Interface):应用程序编程接口。
- 比如说,编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等各种命令。机器人厂商一定会提供一些用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人厂商给应用程序编程的接口,大家把这些类称为API。
- Java API:指的就是JDK中提供的各种功能的Java类。这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用,我们可以通过帮助文档来学习这些API如何使用。
1.2 如何使用帮助文档
- 1、在索引的搜索框内输入想要查找的类。
- 2、看类在哪个包下。
- 3、看类的描述。
- 4、看构造方法
- 5、看成员方法。
2、String
2.1 String概述
- String类在java.lang包下,所以使用的时候不需要导包。
- String类代表字符串Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例,也就是说,Java程序中所有的双引号字符串,都是String类的对象。
- 字符串的特点:
(1)字符串不可变,它们的值在创建后不能被修改。
(2)虽然Sting的值是不可变的,但是它们可以被共享。
(3)字符串效果上相当于字符数组(char[])(JDK8以前是字符数组,JDK9以后是字节数组),但是底层原理是字节数组(byte[])。
2.2 String构造方法
方法名 | 说明 |
---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
推荐使用直接赋值的方式构建字符串对象
2.3 String对象在内存中的特点
- 1、通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同。
char[] chs = {"a","b","c"};
String s1 = new String(chs);
String s2 = new String(chs);
上面代码中,JVM会先创建一个字符数组,然后每一次new的时候都会有一个新的地址,只不过s1和s2参考的字符串内容是相同的。
- 2、以""方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。
String s3 = "abc";
String s4 = "abc";
在上面代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考。第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象。
- 在内存中的变化:
面试题:下列Java代码中的变量a、b、c分别在内存的()存储区存放
class A{
private String a = "aa";
public boolean methodB(){
String b = "bb";
final String c = "cc";
}
}
- 堆区,栈区,栈区。首先要知道栈内存和堆内存,栈内存存储局部变量(局部变量是定义在方法中的变量,使用完毕,立即消失);而堆内存存储new出来的对象,对象初始化时,会为存储空间添加默认值,每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收(参照笔记十——方法)。a是类中的成员变量,存放在堆区;b、c都是方法中的局部变量,存放在栈区。
2.4 字符串的比较
- 使用“==”做比较:
(1)基本类型:比较的是数据值是否相同。
(2)引用类型:比较的是地址值是否相同。 - 字符串是对象,它比较内容是否相同,是通过==equals()==方法来实现的:这个方法的声明为public boolean equals(Object anObject),将字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串。
2.5 通过帮助文档查看String中的方法
方法名 | 说明 |
---|
public boolean equals(Object anObject) | 比较字符串的内容,严格区分大小写(用户名和密码) |
public char charAt(int index) | 返回值指定索引 |
public int length() | 返回字符串长度 |
面试题:统计字符次数
- 键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数(不考虑其他字符)。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String line = sc.nextLine();
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
for (int i=0; i<line.length();i++){
char ch = line.charAt(i);
if (ch>='a' && ch<='z'){
smallCount++;
}else if(ch>='A' && ch<='Z'){
bigCount++;
}else if(ch>='0' && ch<='9'){
numberCount++;
}
}
System.out.println(smallCount);
System.out.println(bigCount);
System.out.println(numberCount);
}
面试题:数组没有length()方法?String没有length()方法?
- 数组没有length方法,有length的属性,String有length()方法。JavaScript中,获取字符串长度是通过length属性得到的,这一点容易和Java混淆。
3、StringBuilder
3.1 StringBulider概述
如上图,如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题?答案是肯定的,我们可以通过Java提供的StringBuilder类来解决这个问题。
- StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器。这里的可变指的是StringBuilder对象中内容是可变的。
- String和StringBuilder的区别:String内容是不可变的,StringBuilder内容是可变的。
3.2 StringBuilder构造方法
方法名 | 说明 |
---|
public StringBulider() | 创建一个空白可变字符串对象,不含有任何内容 |
public StringBulider(str) | 根据字符串的内容,来创建可变字符串对象 |
3.3 StringBuilder的添加和反转方法
方法名 | 说明 |
---|
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
3.4 StringBuilder和String互相转换
- 1、StringBuilder转换为String
public String toString():通过toString()就可以实现把StringBuilder转换为String。 - 2、String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder。
案例:拼接字符串
- 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成字符串返回,调用该方法,并在控制台输出结果。例如,数组int[] arr = {1,2,3},执行方法后的输出结果为:[1,2,3]
public static void main(String[] args) {
int[] arr = {1,2,3};
System.out.println(con2(arr));
}
private static String con2(int[] arr){
StringBuilder str = new StringBuilder();
str.append("[");
for (int i=0; i<arr.length; i++){
str.append(arr[i]);
if (i != arr.length-1){
str.append(",");
}
}
str.append("]");
return str.toString();
}
案例:字符串反转
- 案例:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果。例如,键盘录入abc,输出结果cba。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = sc.nextLine();
System.out.println(myReverse(str));
}
private static String myReverse(String str){
return new StringBuilder(str).reverse().toString();
}
3.5 通过帮助文档查看StringBuilder中的方法
方法名 | 说明 |
---|
public StringBuilder append(任意类型) | 添加数据,并返回对象本身 |
public StringBuilder reverse() | 返回相反的字符序列 |
public String toString() | 通过toString()就可以实现把StringBuilder转换为String |