APl类库:API(Application Programming Interface,应用程序编程接口)就是一些已写好、可供直接调用的功能(在Java语言中,这些功能以类的形式封装) 举例:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等 JDK类库划分:按照包结构划分(不同功能的类划分在不同的包中) |
包 | 功能 |
---|---|
java.lang | 基础类(字符串、多线程等),使用频率高,不需要import |
java.util | 工具类(集合、随机数产生器、日历等) |
java.io | 文件操作、输入/输出 |
java.net | 网络操作 |
java.math | 数学运算相关操作 |
java.security | 安全相关操作 |
java.sql | |
java.text | 处理文字、日期、数字、信息的格式 |
文档注释
形式:/**
开始,以*/
结束
位置:加在类和方法的开头
作用:1. 说明作者,时间,版本,要实现功能的详细描述等信息
2. 通过javadoc工具,可以轻松的将此注释转换为HTML文档说明
3. 专门用于生成供API使用者进行参考的文档资料
java.lang.String:用final修饰,不能被继承 特性:字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值 编码方式:Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码 String常量池:字符串常量池(String Constant Pool)是Java中的一个特殊存储区域,用于存储字符串常量 作用:提高字符串的重复利用率,节省内存空间,并提高程序的执行效率 Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串;对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象。 内存编码及长度:String在内存中采用Unicode编码,每个字符占用两个字节;任何一个字符(无论中文还是英文)都算1个字符长度,占用两个字节 |
length()
:返回字符串的长度
String str = "Hello, World!";
int length = str.length();
// 13
trim()
:去除字符串两端的空格
String str = " Hello, World! ";
String trimmedStr = str.trim();
// "Hello, World!"
indexOf(String str)
:返回指定字符串在原字符串中第一次出现的索引位置
String str = "Hello, World!";
int index = str.indexOf("World");
// 7
字符串“
+
”操作
① 字符串拼接产生新的字符串对象:每次进行字符串拼接时,都会创建一个新的字符串对象(Java中字符串是不可变的)
② 字符串常量池:Java中的字符串常量池是一块特殊的内存区域,用于存储字符串字面量
作用:(避免创建多个内容相同的字符串对象)当创建一个字符串字面量时,如果字符串常量池中已经存在相同内容的字符串,就会返回已存在的字符串对象的引用,而不会创建新的对象
注意:合理地使用字符串的重用机制(只要字符串存在于常量池中,就无法被垃圾回收)
代码演示 ▶⯈⮞
String s1 = "2023java";
// s2重用s1
String s2 = "2023java";
// 字符串为引用类型(在创建对象时,先在字符串常量池中先去查找是否存在:存在则直接使用,不存在再创建)
System.out.println("地址值相同:" + (s1 == s2));
// 不推荐使用new String()创建,不会重用字符串
String s3 = new String("2023java");
System.out.println("地址值不同:" + (s1 == s3));
// 字符串的拼接(字面量与变量:重新创建字符串对象)不会存入字符串常量池(此时的s1属于重新创建的对象)
s1 = s1 + "! ";
System.out.println("s1不再和s2使用同一个地址:" + (s1 == s2));
// 字符串的拼接(字面量与字面量拼接)
String s4 = "2023" + "java";
System.out.println("地址值相同:" + (s4 == s2));
trim()
:去除字符串两端的空格
String str = " Hello, World! ";
String trimmedStr = str.trim();
// "Hello, World!"
charAt(int index)
:返回字符串中指定索引位置的字符
String str = "Hello, World!";
char ch = str.charAt(7);
// 'W'
代码演示 ▶⯈⮞
package string;
public class ChatAt {
public static void main(String[] args) {
// 回文检测
String line = "上海自来水来自海上";
// 方法1:利用判断标志=============================================================================================
boolean check = true;
for (int i = 0; i < line.length() - 1; i++) {
char c1 = line.charAt(i);
char c2 = line.charAt(line.length() - 1 - i);
if (c1 != c2) {
System.out.println("不是回文!");
check = false;
break;
// return;
}
}
if (check) {
System.out.println(line + " 是回文");
}
// 方法2:来自语言的魅力===========================================================================================
String lines = "上自来水来自海上";
for (int i = 0; i < line.length() - 1; i++) {
char c1 = lines.charAt(i);
char c2 = lines.charAt(lines.length() - 1 - i);
if (c1 != c2) {
// 语言的魅力
System.out.print("不");
break;
}
}
System.out.println("是回文");
}
}
substring(int beginIndex, int endIndex)
:返回字符串中指定索引范围内的子字符串
String str = "Hello, World!";
String subStr = str.substring(7, 12);
// "World"
代码演示 ▶⯈⮞
package string;
public class SubString {
public static void main(String[] args) {
String baidu = "https://www.baidu.com";
String csdn = "https://mp.csdn.net";
System.out.println("百度:" + baidu);
System.out.println("CSDN:" + csdn);
// 名称截取
System.out.println("获取名称:" + getName(baidu));
System.out.println("获取名称:" + getName(csdn));
}
public static String getName(String name) {
// 从“.”之后开始截取(截取的位置)
int start = name.indexOf(".") + 1;
// 从开始位置找到“.”(结束位置)
int end = name.indexOf(".", start);
return name.substring(start, end);
}
}
toLowerCase()
:将字符串转换为小写形式
toUpperCase()
:将字符串转换为大写形式
String str = "Hello, World!";
String lowerCaseStr = str.toLowerCase();
// "hello, world!"
String str = "Hello, World!";
String upperCaseStr = str.toUpperCase();
// "HELLO, WORLD!"
equals(Object anotherObject)
:比较字符串与指定对象是否相等(比较字符串内容)
String str1 = "Hello";
String str2 = "hello";
boolean isEqual = str1.equals(str2);
// false
代码演示 ▶⯈⮞
package string;
public class UpperLower {
public static void main(String[] args) {
String code = "3Klmd23";
System.out.println("将字母全部转化为小写:" + code.toLowerCase());
String input = "3klMD23";
System.out.println("将字母全部转化为大写:" + code.toUpperCase());
// 字符串比较
if (code.equals(input)){
System.out.println("验证一致!");
}
// 字符串忽略大小写比较
if (code.equalsIgnoreCase(input)) {
System.out.println("验证码输入正确!");
} else {
System.out.println("输入错误");
}
}
}
split(String regex)
:根据指定正则表达式将字符串分割成字符串数组
String str = "Hello,World!";
String[] arr = str.split(",");
// ["Hello", "World!"]
replace(CharSequence target, CharSequence replacement)
:使用新字符串替换原字符串中的目标字符串
String str = "Hello, World!";
String replacedStr = str.replace("World", "Java");
// "Hello, Java!"
String的特性:String是不可变对象(内容不可变),改变时要创建新对象(因此不适合频繁修改内容) String的缺点:频繁修改内容会导致大量的String对象被创建,导致性能降低,增大内部开销 StringBuilder:用于动态地构建字符串(专门用于修改字符串内容的工具类内部维护一个可变的char数组,修改字符串性能好) String常量池:字符串常量池(String Constant Pool)是Java中的一个特殊存储区域,用于存储字符串常量 |
StringBuilder常见API
length()
:返回StringBuilder对象中字符序列的长度
append(String str)
:将指定的字符串追加到当前StringBuilder对象的末尾
delete(int start, int end)
:删除从指定起始位置到结束位置之间的字符
replace(int start, int end, String str)
:替换从指定起始位置到结束位置之间的字符为给定的字符串
insert(int offset, String str)
:在指定位置插入字符串
reverse()
:反转StringBuilder对象中的字符顺序
toString()
:将StringBuilder对象转换为String类型
链式调用:StringBuilder的方法返回的是自身的引用,可以使用链式调用来简化
StringBuffer是线程安全的(可并发处理,性能差),StringBuilder非线程安全(不可并发,性能好)
package string;
public class StringBuilds {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
int length = builder.length();
System.out.println("长度:" + length);
System.out.println("内容:" + builder);
StringBuilder string = new StringBuilder("你好Java");
// append追加操作(支持多种数据类型的追加)
string.append(",Hello World");
System.out.println("拼接后的内容:" + string);
// replace替换操作(将指定内容替换为给定内容)
string.replace(7, 18, "你好世界!");
System.out.println("替换后的内容:" + string);
// delete删除
string.delete(0,2);
System.out.println("删除后的内容:" + string);
// insert插入(在指定位置插入给定内容)
string.insert(4, "的世界");
System.out.println("插入后的内容:" + string);
// reverse字符串反转
string.reverse();
System.out.println("反转后的内容:" + string);
// 获取修改后的字符串StringBuilder只是一个字符串拼接方法
String line = string.toString();
System.out.println("最终获取的内容:" + line);
// 支持链式编程
String builders = new StringBuilder("你好").append("我叫").insert(2, "!").append("XX").toString();
System.out.println("内容:" + builders);
}
}