[Java]新手必看5个常见数据类型错误及解决方案
### 1. 空指针异常(NullPointerException)
错误场景:当尝试调用一个空对象的属性或方法时触发。
```java
String str = null;
System.out.println(str.length()); // 抛出NullPointerException
```
解决方案:
- 使用前检查对象是否为空:
```java
if (str != null) {
System.out.println(str.length());
}
```
- 使用`Optional`类避免空值操作:
```java
Optional optionalStr = Optional.ofNullable(str);
optionalStr.ifPresent(s -> System.out.println(s.length()));
```
---
### 2. 类型转换异常(ClassCastException)
错误场景:强制将对象转换为不兼容的类型时发生。
```java
Object obj = Hello;
Integer num = (Integer) obj; // 抛出ClassCastException
```
解决方案:
- 使用`instanceof`进行类型检查:
```java
if (obj instanceof Integer) {
Integer num = (Integer) obj;
}
```
- 通过泛型规范类型:
```java
List list = new ArrayList<>();
// 泛型确保类型安全
```
---
### 3. 数组越界异常(ArrayIndexOutOfBoundsException)
错误场景:访问数组时索引超出有效范围。
```java
int[] arr = {1, 2, 3};
System.out.println(arr[5]); // 抛出ArrayIndexOutOfBoundsException
```
解决方案:
- 检查索引是否在有效范围内:
```java
int index = 5;
if (index >= 0 && index < arr.length) {
System.out.println(arr[index]);
}
```
- 使用增强型for循环避免索引操作:
```java
for (int num : arr) {
System.out.println(num);
}
```
---
### 4. 数字格式化异常(NumberFormatException)
错误场景:将非数字字符串转换为数值类型时触发。
```java
String str = abc;
int num = Integer.parseInt(str); // 抛出NumberFormatException
```
解决方案:
- 捕获异常并处理:
```java
try {
int num = Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println(字符串格式错误!);
}
```
- 使用正则表达式验证:
```java
if (str.matches(-?\d+)) {
int num = Integer.parseInt(str);
}
```
---
### 5. 集合操作异常(ConcurrentModificationException)
错误场景:在遍历集合时修改其结构(如删除元素)。
```java
List list = new ArrayList<>();
list.add(A);
for (String s : list) {
list.remove(s); // 抛出ConcurrentModificationException
}
```
解决方案:
- 使用迭代器的`remove()`方法:
```java
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
iterator.remove(); // 安全删除
}
```
- 使用`CopyOnWriteArrayList`等线程安全集合:
```java
List safeList = new CopyOnWriteArrayList<>(list);
for (String s : safeList) {
safeList.remove(s);
}
```
更多推荐


所有评论(0)