Java基础(八),什么是API、String、StringBuilder、ArrayList详解!!又来更新了!

    科技2025-11-11  10

    本章内容主要为面向对象的封装和访问修饰符以及构造方法,希望大家可以仔细阅读。本贴为持续更新贴!内容附带大量图文和练习,供大家学习时参考。 更多资料和内容尽在: 码牛云课堂Java霸牛老师(微信):mnykt8080; ​ 码牛云Java技术交流QQ群:1142264605;

    1.API

    1.1 API概述

    什么是API

    ​ API (Application Programming Interface) :应用程序编程接口

    java中的API

    ​ 提前定义好的一些java类。

    1.2 API文档

    使用

    双击打开帮助文档 点击索引,输入框输入要查看的类 先看在哪个包下 在看构造方法 在看方法

    2.String类

    2.1 String类概述

    String是不可变类,一旦创建一个String对象后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销

    毁掉。

    2.2 String类的构造方法

    常用的构造方法

    方法名说明public String()创建一个包含0个字符序列的String对象(并不是返回null)public String(char[] chs)根据字符数组的内容,来创建字符串对象public String(byte[] bys)根据字节数组的内容,来创建字符串对象String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc

    示例代码

    package com.mnyketang; /* String是不可变类,一旦创建一个String对象后,包含在这个对象中的字符序列是不可改变的, 直至这个对象被销毁掉。 构造方法 public String() 创建一个包含0个字符序列的String对象(并不是返回null) public String(char[] chs) 根据字符数组的内容,来创建字符串对象 public String(byte[] bys) 根据字节数组的内容,来创建字符串对象 String s = "abc"; 直接赋值的方式创建字符串对象,内容就是abc */ public class Demo01 { public static void main(String[] args) { //public String() 创建一个包含0个字符序列的String对象(并不是返回null) String s1 = new String(); System.out.println(s1); // public String(char[] chs) 根据字符数组的内容,来创建字符串对象 char[] c = {'a','b','c'}; String s2 = new String(c); System.out.println(s2);//abc // public String(byte[] bys) 根据字节数组的内容,来创建字符串对象 byte[] d = {65,66,67}; String s3 = new String(d); System.out.println(s3);//ABC //String s = "abc"; 直接赋值的方式创建字符串对象,内容就是abc String s4 = "abc"; System.out.println(s4);//abc } }

    2.4 创建字符串对象两种方式的区别

    通过构造方法创建 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

    直接赋值方式创建

    只要字符序列相同(顺序和大小写),JVM 都只会建立一个 String 对象,并在字符串池中维护

    package com.mnyketang; /* 创建字符串对象两种方式的区别 通过构造方法创建 通过new创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同 直接赋值方式创建 只要字符序列相同(顺序和大小写),JVM 都只会建立一个 String对象,并在字符串池中维护 */ public class Demo02 { public static void main(String[] args) { char[] a = {'a','b','c'}; //s1是引用类型变量 保存的是地址值 String s1 = new String(a); System.out.println(s1); byte[] b = {97,98,99}; String s2 = new String(b); System.out.println(s2); System.out.println(s1 == s2);//比较的是s1和s2地址值是否相同 false String s3 = "ABC"; String s4 = "ABC"; System.out.println(s3 == s4);//true } }

    2.5 String类常用方法

    package com.mnyketang; /* 常用方法 public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写 public char charAt(int index) 返回指定索引处的char值,字符串的索引也是从0开始的 public int length() 返回该字符串的长度 public String substring(int beginIndex) 截取字符串 public String substring(int beginIndex, int endIndex) 截取字符串 public int compareTo(String anotherString) 按字典顺序进行大小比较 public String concat(String str) 将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。 public int indexOf(String str) 查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。 public String toLowerCase() 转小写 public String toUpperCase() 转大写 public String replace(char oldChar, char newChar) 字符串替换 */ public class Demo03 { public static void main(String[] args) { method09(); } /* public String replace(char oldChar, char newChar) 字符串替换 */ private static void method09() { String s = "你是sb,你是sb"; System.out.println(s.replace("sb","**")); } /* public String toLowerCase() 转小写 public String toUpperCase() 转大写 */ private static void method08() { String s = "hello"; System.out.println(s.toUpperCase());//HELLO String s1 = "WORLD"; System.out.println(s1.toLowerCase());//world } /* public int indexOf(String str) 查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1。 */ private static void method07() { String s = "helloWorld"; System.out.println(s.indexOf("o"));//4 System.out.println(s.indexOf("p"));//-1 } /* public String concat(String str) 将参数中的字符串str连接到当前字符串的后面,效果等价于"+"。 */ private static void method06() { String s = "hello"; System.out.println(s.concat("world")); } /* public int compareTo(String anotherString) 按字典顺序进行大小比较 按照字符对应的编码值进行比较的 返回值为int类型 正数:当前调用的字符串大于参数字符串 负数:当前调用字符串小于参数字符串 0:当前调用字符串等于参数字符串 */ private static void method05() { String s1 = "abcdd"; String s2 = "bb"; System.out.println(s1.compareTo(s2)); } /* public String substring(int beginIndex) 截取字符串 public String substring(int beginIndex, int endIndex) 截取字符串 含头不含尾 */ private static void method04() { String s = "java python"; System.out.println(s.substring(5));//python System.out.println(s.substring(0,4));//java } /* public int length() 返回该字符串的长度 */ private static void method03() { String s = "java is good"; System.out.println(s.length());//12 } /* public char charAt(int index) 返回指定索引处的char值,字符串的索引也是从0开始的 */ private static void method02() { String s = "ilovejava"; System.out.println(s.charAt(2));//o } /* public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写 */ private static void method01() { //== 如果是基本类型比较就是指比较 int a = 10; int b = 10; System.out.println(a == b);//true //== 如果是引用类型比较的是地址值 String s = new String(); char[] c = {'a','b','c'}; String s1 = new String(c); String s2 = "abc"; System.out.println(s == s1);//false System.out.println(s1 == s2);//false //想比较字符串的内容此时需要使用 public boolean equals(String s) System.out.println(s1.equals(s2));//true } }

    2.6 String类练习

    2.6.1 统计字符次数案例

    需求

    ​ 键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)

    代码

    package com.mnyketang; import java.util.Scanner; /* 键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数。 思路: 1:键盘获取输入的字符串 2:定义三个变量保存每种类型字符出现次数 3:遍历字符串,得到每一个字符 4:用if格式3进行判断,属于那种类型对应变量进行加1 大写字母:ch>='A' && ch<='Z' 小写字母: ch>='a' && ch<='z' 数字: ch>='0' && ch<='9' 5:打印输出三个变量的值 */ public class Demo04 { public static void main(String[] args) { //1:键盘获取输入的字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String str = sc.next(); //2:定义三个变量保存每种类型字符出现次数 int bigCount = 0; int smallCount = 0; int numCount = 0; //3:遍历字符串,得到每一个字符 for (int i = 0; i < str.length();i++){ char c = str.charAt(i); //4:用if格式3进行判断,属于那种类型对应变量进行加1 if( c >= 'A' && c <= 'Z' ){ bigCount++; }else if(c >= 'a' && c <= 'z'){ smallCount++; }else { numCount++; } } //5:打印输出三个变量的值 System.out.println("大写字符次数为" + bigCount); System.out.println("小写字符次数为" + smallCount); System.out.println("数字字符次数为" + numCount); } }

    2.6.2 字符串反转案例

    需求

    ​ 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果

    ​ 例如,键盘录入 abc,输出结果 cba

    代码

    package com.mnyketang; import java.util.Scanner; /* 需求 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果 例如,键盘录入 abc,输出结果 cba 思路: 1:通过Scanner获取键盘录入字符串 2:定义一个方法,返回值类型为String,参数为String 3:在方法中倒着遍历字符串,获取每一个字符在拼接为一个新的字符串返回 4:调用方法接受反转后的字符串 5:输出结果 */ public class Demo05 { public static void main(String[] args) { //1:通过Scanner获取键盘录入字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String str = sc.next(); //4:调用方法接受反转后的字符串 String reverseStr = reverse(str); //5:输出结果 System.out.println(reverseStr); } //2:定义一个方法,返回值类型为String,参数为String /* 方法参数:String 方法返回值:String */ public static String reverse(String s) { //3:在方法中倒着遍历字符串,获取每一个字符在拼接为一个新的字符串返回 String str = ""; for (int i = s.length() - 1; i > 0; i--) { //har c = s.charAt(i); str += s.charAt(i); } return str; } }

    3.StringBuilder类

    3.1 StringBuilder类概述

    ​ StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中

    的内容是可变的

    3.2 StringBuilder类和String类的区别

    String类:内容是不可变的

    StringBuilder类:内容是可变的

    3.3 StringBuilder类的构造方法

    常用的构造方法

    方法名说明public StringBuilder()创建一个空白可变字符串对象,不含有任何内容public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

    示例代码

    package com.mnyketang; /* StringBuilder类概述 StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中 的内容是可变的 StringBuilder类和String类的区别 String类:内容是不可变的 StringBuilder类:内容是可变的 StringBuilder类的构造方法 public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容 public StringBuilder(String str) 根据字符串的内容,来创建可变字符串对象 */ public class Demo06 { public static void main(String[] args) { /*String s = "a";//"a" String c = s + "c";//"c" System.out.println(c);//"ac"*/ //public StringBuilder() StringBuilder sb = new StringBuilder(); System.out.println(sb); //public StringBuilder(String str) StringBuilder sb1 = new StringBuilder("java"); System.out.println(sb1);//java } }

    3.4 StringBuilder类常用方法

    添加和反转方法

    方法名说明public StringBuilder append(CharSequence s)添加数据,并返回对象本身public StringBuilder reverse()返回相反的字符序列

    示例代码

    package com.mnyketang; /* public StringBuilder append(CharSequence s)添加数据,并返回对象本身 public StringBuilder reverse() 返回相反的字符序列 */ public class Demo07 { public static void main(String[] args) { StringBuilder sb = new StringBuilder("hello"); //不管调用多少次append方法只会产生一个对象 sb.append("world").append("java").append("python").append(100); System.out.println(sb);//helloworld sb.reverse(); System.out.println(sb); } }

    3.5 StringBuilder和String相互转换

    StringBuilder转换为String

    ​ public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String

    String转换为StringBuilder

    ​ public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder

    示例代码

    package com.mnyketang; /* StringBuilder转换为String public String toString():通过 toString() 就可以实现把 StringBuilder 转换为String String转换为StringBuilder public StringBuilder(String s):通过构造方法就可以实现把 String 转换为StringBuilder */ public class Demo08 { public static void main(String[] args) { // StringBuilder转换为String StringBuilder sb = new StringBuilder("hello"); //String s = sb; 不能直接赋值给String对象 //public String toString(): String s = sb.toString(); System.out.println(s); //String转换为StringBuilder String str = "world"; StringBuilder sb2 = new StringBuilder(str); System.out.println(sb2); } }

    3.6 StringBuilder实现字符串反转

    需求

    ​ 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果

    ​ 例如,键盘录入abc,输出结果 cba

    代码

    package com.mnyketang; import java.util.Scanner; /* 需求 定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果 例如,键盘录入abc,输出结果 cba 思路: 1:使用Scanner获取键盘录入字符串 2:定义一个方法,实现字符串反转。返回值类型 String,参数 String 3:在方法中用StringBuilder实现字符串的反转,并把结果转成String返回 4:调用方法接受返回字符串 5:输出结果 */ public class Demo09 { public static void main(String[] args) { //1:使用Scanner获取键盘录入字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入字符串"); String str = sc.next(); //4:调用方法接受返回字符串 String reverseStr = reverse(str); //5:输出结果 System.out.println(reverseStr); } // 2:定义一个方法,实现字符串反转。返回值类型 String,参数 String public static String reverse(String s){ StringBuilder sb = new StringBuilder(s); return sb.reverse().toString(); } }

    4.ArrayList

    4.1 ArrayList类概述

    什么是集合

    ​ 提供一种存储空间可变的容器,存储的数据容量可以发生改变

    ArrayList集合的特点 ​ 底层是数组实现的,集合大小是可以变化

    泛型的使用

    ​ 用于约束集合中存储元素的数据类型

    package cn.itcast.day07.demo04; import java.util.ArrayList; /* 数组的长度不可以发生改变。 但是ArrayList集合的长度是可以随意变化的。 对于ArrayList来说,有一个尖括号<E>代表泛型。 泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。 注意:泛型只能是引用类型,不能是基本类型。 注意事项: 对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。 如果内容是空,得到的是空的中括号:[] */ public class Demo02ArrayList { public static void main(String[] args) { // 创建了一个ArrayList集合,集合的名称是list,里面装的全都是String字符串类型的数据 // 备注:从JDK 1.7+开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写的。 ArrayList<String> list = new ArrayList<>(); System.out.println(list); // [] // 向集合当中添加一些数据,需要用到add方法。 list.add("赵丽颖"); System.out.println(list); // [赵丽颖] list.add("迪丽热巴"); list.add("古力娜扎"); list.add("玛尔扎哈"); System.out.println(list); // [赵丽颖, 迪丽热巴, 古力娜扎, 玛尔扎哈] // list.add(100); // 错误写法!因为创建的时候尖括号泛型已经说了是字符串,添加进去的元素就必须都是字符串才行 } }

    4.2 ArrayList类常用方法

    4.2.1 构造方法

    方法名说明public ArrayList()创建一个空的集合对象

    4.2.2 成员方法

    方法名说明public boolean remove(Object o)删除指定的元素,返回删除是否成功public E remove(int index)删除指定索引处的元素,返回被删除的元素public E set(int index,E element)修改指定索引处的元素,返回被修改的元素public E get(int index)返回指定索引处的元素public int size()返回集合中的元素的个数public boolean add(E e)将指定的元素追加到此集合的末尾public void add(int index,E element)在此集合中的指定位置插入指定的元素 package com.mnyketang; import java.util.ArrayList; /* 什么是集合 提供一种存储空间可变的容器,存储的数据容量可以发生改变 ArrayList集合的特点 底层是数组实现的,集合大小是可以变化 构造方法 public ArrayList()创建一个空的集合对象 常用方法 public boolean remove(Object o) 删除指定的元素,返回删除是否成功 public E remove(int index) 删除指定索引处的元素,返回被删除的元素 public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素 public E get(int index) 返回指定索引处的元素 public int size() 返回集合中的元素的个数 public boolean add(E e) 将指定的元素追加到此集合的末尾 public void add(int index,E element) 在此集合中的指定位置插入指定的元素 */ public class Demo10 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); //增 /* public boolean add(E e) 将指定的元素追加到此集合的末尾 public void add(int index,E element) 在此集合中的指定位置插入指定的元素 */ //对ArrayList来说 添加元素返回的都是true list.add("令狐冲"); list.add("田伯光"); list.add("风清扬"); System.out.println(list);//[令狐冲, 田伯光, 风清扬] list.add(0,"岳不群"); System.out.println(list);//[岳不群, 令狐冲, 田伯光, 风清扬] /* 删 public boolean remove(Object o) 删除指定的元素,返回删除是否成功 public E remove(int index) 删除指定索引处的元素,返回被删除的元素 */ list.remove("岳不群"); System.out.println(list);//[令狐冲, 田伯光, 风清扬] list.remove(1); System.out.println(list);//[令狐冲, 风清扬] //list.remove(10);//IndexOutOfBoundsException /* 查 public E get(int index) 返回指定索引处的元素 public int size() 返回集合中的元素的个数 */ String s = list.get(1); System.out.println(s); System.out.println(list.size());//2 /* 改 public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素 */ String s1 = list.set(0, "田伯光"); System.out.println(s1);//令狐冲 System.out.println(list);//[田伯光, 风清扬] } }

    4.3 ArrayList存储字符串并遍历

    需求:

    ​ 创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合

    代码

    package com.mnyketang; import java.util.ArrayList; /* ArrayList存储字符串并遍历 需求 创建一个存储字符串的集合,存储3个字符串元素,使用程序实现在控制台遍历该集合 */ public class Demo11 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("java"); list.add("python"); list.add("go"); /* System.out.println(list.get(0)); System.out.println(list.get(1)); System.out.println(list.get(2));*/ for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }

    4.4 ArrayList存储学生对象

    需求

    创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

    学生的姓名和年龄来自于键盘录入

    代码

    package com.mnyketang; import java.util.ArrayList; import java.util.Scanner; /* 需求 创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合 学生的姓名和年龄来自于键盘录入 思路: 1:定义标准学生类 2:创建ArrayList对象 3:通过Scanner获取键盘录入的学生信息 4:将输入的学生信息封装到一个学生对象中 5:将学生对象添加到集合中 6:遍历集合 */ public class Demo12 { public static void main(String[] args) { //2:创建ArrayList对象 ArrayList<Student> list = new ArrayList<>(); addStudent(list); addStudent(list); addStudent(list); // 6:遍历集合 for (int i = 0; i < list.size(); i++) { Student s = list.get(i);//获取对象的引用 System.out.println(s.getName() + " -- " + s.getAge()); } } public static void addStudent(ArrayList<Student> list) { // 3:通过Scanner获取键盘录入的学生信息 Scanner sc = new Scanner(System.in); System.out.println("请输入姓名"); String name = sc.next(); System.out.println("请输入年龄"); String age = sc.next(); // 4:将输入的学生信息封装到一个学生对象中 Student s = new Student();//s报存的是对象在内存中的地址 s.setName(name); s.setAge(age); // 5:将学生对象添加到集合中 list.add(s);//是对象的引用存放在集合中了 } }

    ​ 码牛云课堂Java技术指导霸牛老师(微信):mnykt8080;

    ​ 或者加入:

    ​ 码牛云Java技术交流QQ群:1142264605;

    ​ 获得后续资料,持续关注码牛云吧各位亲,下次更新我们不见不散!

    Processed: 0.011, SQL: 8