目录
1. 异常处理
1.1 什么是异常
1.2 异常的类型
1.2.1 检查异常
1.2.2 运行时异常
1.3 异常的捕获与处理
1.3.1 try-catch 语句
1.3.2 finally 块
1.3.3 throw 和 throws 关键字
1.4 自定义异常
1.5 异常的最佳实践
2. 字符串
2.1 String 类的概述
2.2 字符串的创建与初始化
2.3 字符串操作方法
1. 拼接与格式化
2. 截取与替换
3. 查找与比较
2.4 StringBuilder 和 StringBuffer 的使用
2.5 字符串的不可变性与效率
2.6 字符串的常量池
2.7 字符串API
1. 字符串创建
2. 字符串长度
3. 字符串比较
4. 字符串查找
5. 字符串操作
6. 字符串分割
7. 字符串格式化
8. 字符串与字符数组的转换
9. 其他常用方法
1. 异常处理
-
1.1 什么是异常
- 在 Java 中,异常是指程序执行过程中发生的非正常情况,这些情况通常会影响程序的正常运行。异常可以是由于编程错误、系统错误或外部条件(如用户输入错误、网络问题等)导致的。Java 提供了一种机制来处理这些异常,以确保程序的健壮性和稳定性。
-
1.2 异常的类型
-
1.2.1 检查异常
- 检查异常是指在编译时需要处理的异常。这类异常通常是可以预见的,例如文件未找到(
FileNotFoundException
)或网络连接失败(IOException
)。编译器会强制要求在代码中使用try-catch
语句捕获这些异常,或者在方法签名中声明throws
该异常。
- 检查异常是指在编译时需要处理的异常。这类异常通常是可以预见的,例如文件未找到(
-
1.2.2 运行时异常
- 运行时异常是指在程序运行期间发生的异常,通常是由程序错误引起的,例如数组下标越界(
ArrayIndexOutOfBoundsException
)或空指针引用(NullPointerException
)。这些异常不需要在编译时显式处理,虽然建议进行捕获以增强程序的健壮性。
- 运行时异常是指在程序运行期间发生的异常,通常是由程序错误引起的,例如数组下标越界(
-
-
1.3 异常的捕获与处理
-
1.3.1 try-catch 语句
try
块中包含可能抛出异常的代码,如果出现异常,程序会跳转到对应的catch
块进行处理。示例如下:-
try {int result = 10 / 0; // 可能抛出 ArithmeticException } catch (ArithmeticException e) {System.out.println("出现了算术异常:" + e.getMessage()); }
-
1.3.2 finally 块
finally
块用于在try
和catch
块之后执行,无论是否发生异常,finally
块中的代码都会被执行,通常用于资源释放等操作。-
try {// 可能抛出异常的代码 } catch (Exception e) {// 异常处理 } finally {// 资源释放操作 }
-
1.3.3 throw 和 throws 关键字
throw
用于显式抛出一个异常对象,可以在方法体内使用,通常用于自定义异常的抛出。throws
用于在方法签名中声明一个或多个异常,表示该方法可能抛出这些异常,调用该方法时需要处理这些异常。
-
-
1.4 自定义异常
- 在 Java 中,用户可以定义自己的异常类,通常通过继承
Exception
或RuntimeException
类来实现。自定义异常可以提供更具体的错误信息和异常类型,使得代码更易于维护和理解。 -
public class MyCustomException extends Exception {public MyCustomException(String message) {super(message);} }
- 在 Java 中,用户可以定义自己的异常类,通常通过继承
-
1.5 异常的最佳实践
- 必须使用特定的异常:捕获具体的异常,而不是通用的
Exception
,这样可以更精确地处理不同类型的错误。-
try {FileReader file = new FileReader("nonexistentfile.txt"); } catch (FileNotFoundException e) {System.out.println("文件未找到,请检查文件路径:" + e.getMessage()); } catch (IOException e) {System.out.println("读取文件时发生错误:" + e.getMessage()); }
-
- 必须记录异常信息:在捕获异常后,记录异常的详细信息,便于调试和追踪问题。
-
import java.util.logging.Logger;public class FileProcessor {private static final Logger logger = Logger.getLogger(FileProcessor.class.getName());public void processFile(String filePath) {try {// 可能抛出 IOExceptionFileReader file = new FileReader(filePath);// 处理文件...} catch (IOException e) {logger.severe("处理文件时发生错误:" + e.getMessage());}} }
-
- 合理使用 finally:使用
finally
块进行资源释放,确保即使发生异常也能正常释放资源。-
public void readFile(String filePath) {FileReader file = null;try {file = new FileReader(filePath);// 处理文件...} catch (IOException e) {System.out.println("文件读取出错:" + e.getMessage());} finally {if (file != null) {try {file.close();} catch (IOException e) {System.out.println("关闭文件时出错:" + e.getMessage());}}} }
-
- 避免吞掉异常:在捕获异常后,不要简单地忽略它,应该采取适当的措施进行处理。
- 文档化异常:在方法文档中说明可能抛出的异常,以帮助调用者了解异常情况。
-
/*** 从指定路径读取文件内容。** @param filePath 文件路径* @throws FileNotFoundException 如果文件未找到* @throws IOException 如果读取文件时发生错误*/ public void readFile(String filePath) throws FileNotFoundException, IOException {FileReader file = new FileReader(filePath);// 处理文件... }
-
- 必须使用特定的异常:捕获具体的异常,而不是通用的
2. 字符串
-
2.1 String 类的概述
- 在 Java 中,
String
类是用来表示字符串的类。字符串是一系列字符的序列,String
对象是不可变的,这意味着一旦创建,字符串的内容就不能被修改。String
类提供了多种方法来操作字符串(只要你能想到的处理基本都能实现)。
- 在 Java 中,
-
2.2 字符串的创建与初始化
- 字面量方式:String str1 = "Hello, World!";
- 使用构造函数:String str2 = new String("Hello, World!");
- 区别:字面量方式会将字符串存储在字符串常量池中,而使用构造函数则会创建一个新的
String
对象。
-
2.3 字符串操作方法
-
1. 拼接与格式化
- 拼接:可以使用
+
运算符或concat()
方法。-
String str1 = "Hello"; String str2 = "World"; String result = str1 + " " + str2; // 使用 + 运算符 String result2 = str1.concat(" ").concat(str2); // 使用 concat 方法
-
- 格式化:可以使用
String.format()
方法。-
String name = "张三"; int age = 30; String formatted = String.format("%s 年龄是 %d 岁", name, age);
-
- 拼接:可以使用
-
2. 截取与替换
- 截取:使用
substring()
方法。-
String str = "Hello, World!"; String subStr = str.substring(7, 12); // "World"
-
- 替换:使用
replace()
方法。-
String str = "Hello, World!"; String replaced = str.replace("World", "Java"); // "Hello, Java!"
-
- 截取:使用
-
3. 查找与比较
- 查找:使用
indexOf()
和lastIndexOf()
方法。-
String str = "Hello, World!"; int index = str.indexOf("World"); // 7
-
- 比较:使用
equals()
和compareTo()
方法。-
String str1 = "Hello"; String str2 = "Hello"; boolean isEqual = str1.equals(str2); // true int comparison = str1.compareTo(str2); // 0,表示相等
-
- 查找:使用
-
-
2.4 StringBuilder 和 StringBuffer 的使用
-
StringBuilder
和StringBuffer
是可变字符串类,适用于需要频繁修改字符串的场景 -
StringBuilder:线程不安全,适用于单线程环境,性能较高。
-
StringBuilder sb = new StringBuilder(); sb.append("Hello"); sb.append(", "); sb.append("World!"); String result = sb.toString(); // "Hello, World!"
-
-
StringBuffer:线程安全,适用于多线程环境。
-
StringBuffer sb = new StringBuffer(); sb.append("Hello"); sb.append(", "); sb.append("World!"); String result = sb.toString(); // "Hello, World!"
-
-
-
2.5 字符串的不可变性与效率
- 字符串的不可变性意味着一旦创建,字符串的内容无法更改。每次对字符串的修改都会生成一个新的
String
对象,这可能导致性能问题,特别是在频繁拼接字符串的场景中。因此,对于大量字符串操作,建议使用StringBuilder
或StringBuffer
,以提高性能并减少内存使用。
- 字符串的不可变性意味着一旦创建,字符串的内容无法更改。每次对字符串的修改都会生成一个新的
-
2.6 字符串的常量池
- Java 使用字符串常量池来优化内存使用。通过字面量创建的字符串会被存储在池中,如果有相同内容的字符串,Java 会重用池中的对象,而不是创建新的
String
对象。
- Java 使用字符串常量池来优化内存使用。通过字面量创建的字符串会被存储在池中,如果有相同内容的字符串,Java 会重用池中的对象,而不是创建新的
-
2.7 字符串API
-
1. 字符串创建
-
String str = "text";:字面量创建字符串。 String str = new String("text");:使用构造函数创建字符串。
-
-
2. 字符串长度
-
int length():返回字符串的长度。
-
-
3. 字符串比较
-
boolean equals(Object obj):比较两个字符串的内容是否相等。 boolean equalsIgnoreCase(String anotherString):比较两个字符串(忽略大小写)是否相等。 int compareTo(String anotherString):按字典顺序比较两个字符串。 int compareToIgnoreCase(String anotherString):按字典顺序比较两个字符串(忽略大小写)。
-
-
4. 字符串查找
-
int indexOf(String str):返回指定子串第一次出现的位置。 int lastIndexOf(String str):返回指定子串最后一次出现的位置。 int indexOf(char ch):返回指定字符第一次出现的位置。 int lastIndexOf(char ch):返回指定字符最后一次出现的位置。 boolean contains(CharSequence sequence):检查字符串是否包含指定的字符序列。 boolean startsWith(String prefix):检查字符串是否以指定前缀开头。 boolean endsWith(String suffix):检查字符串是否以指定后缀结尾。
-
-
5. 字符串操作
-
String substring(int beginIndex):返回从指定索引开始到字符串末尾的子串。 String substring(int beginIndex, int endIndex):返回从指定的开始索引到结束索引的子串。 String concat(String str):将指定字符串连接到当前字符串的末尾。 String replace(char oldChar, char newChar):替换字符串中的字符。 String replace(CharSequence target, CharSequence replacement):替换字符串中的字符序列。 String replaceAll(String regex, String replacement):使用正则表达式替换所有匹配的子串。 String replaceFirst(String regex, String replacement):使用正则表达式替换第一个匹配的子串。 String trim():去除字符串前后的空白字符。 String toLowerCase():将字符串转换为小写。 String toUpperCase():将字符串转换为大写。
-
-
6. 字符串分割
-
String[] split(String regex):根据指定的正则表达式将字符串分割成字符串数组。 String[] split(String regex, int limit):根据指定的正则表达式将字符串分割成字符串数组,限制数组的大小。
-
-
7. 字符串格式化
-
static String format(String format, Object... args):根据指定格式创建字符串。 static String format(Locale locale, String format, Object... args):根据指定区域和格式创建字符串。
-
-
8. 字符串与字符数组的转换
-
char charAt(int index):返回指定索引处的字符。 char[] toCharArray():将字符串转换为字符数组。 String(String value):通过字符数组构造字符串。
-
-
9. 其他常用方法
-
boolean isEmpty():检查字符串是否为空。 String valueOf(int i):将整数转换为字符串。 String.valueOf(Object obj):将对象转换为字符串。 String.valueOf(char[] data):将字符数组转换为字符串。
-
-