java.lang.NumberFormatEx
ception: For input string:
"xxxxx"
Number 数字
Format 格式
数字格式异常,该异常通常出现在我们使用包装类将一
个字符串解析为对应的基本类型时引发。
上述代码中由于line的字符串内容是"123.123".而这个数
字是不能通过包装类Integer解析为一个整数因此出现该
异常。注:非数字的字符出在解析时也会出现该异常。
解决办法:
确保解析的字符串正确表达了基本类型可以保存的值
String line = "123.123";//小数不能转换为整数!
int d = Integer.parseInt(line);//抛出异常
NumberFormatException
System.out.println(d);
String line = "123";
int d = Integer.parseInt(line);
System.out.println(d);//123
java.lang.StringIndexOutOf
BoundsException
index 索引,下标
Bounds 边界
OutOfBounds 超出了边界
字符串下标越界异常。该异常通常出现在String对应的
方法中,当我们指定的下标小于0或者大于等于字符串的
长度时会抛出该异常。
解决办法:
指定下标时的范围应当在>=0并且<=字符串的长度。
java.io.InvalidClassExceptio
n
Invalid 无效的
Class 类
String str = "thinking in java";
char c = str.charAt(20);//出现异常
System.out.println(c);
无效的类异常,该异常出现在使用
java.io.ObjectInputStream在进行对象反序列化时在
readObject()方法中抛出。这通常是因为反序列化的对
象版本号与该对象所属类现有的版本号不一致导致的。
可以通过在类上使用常量:
来固定版本号,这样序列化的对象就可以进行反序列化
了。
JAVA建议我们实现Serializable接口的类主动定义序列化
版本号,若不定义编译器会在编译时
根据当前类结构生成版本号,但弊端是只要这个类内容发
生了改变,那么再次编译时版本号就会改变,直接的后果就
是之前序列化的对象都无法再进行反序列化.
如果自行定义版本号,那么可以在改变类内容的同时不改
变版本号,这样一来,反序列化以前的
对象时对象输入流会采取兼容模式,即:当前类的属性在反
序列化的对象中还存在的则直接还原,不存在的就是用该
属性的默认值
出现该异常的解决办法:
1. 首先使用上述常量固定版本号
2. 重新序列化对象(将对象通过ObjectOutputStream重
新序列化并写出)
3. 再进行反序列化即可
static final long serialVersionUID = 1L;
需要注意,之前没有定义序列化版本号时序列化后的对
象都无法再反序列化回来,所以若写入了文件,可将之
前的那些文件都删除,避免读取即可。
java.io.NotSerializableExcep
tion
NotSerializable 不能序列化
不能序列化异常,该异常通常出现在我们使用
java.io.ObjectOutputStream进行对象序列化(调用
writeObject)时。原因时序列化的对象所属的类没有实现
java.io.Serializable接口导致
出现该异常的解决办法:
将序列化的类实现该接口即可
java.io.UnsupportedEncodin
gException
Unsupported 不支持的
Encoding字符集
不支持的字符集异常,该异常通常出现在使用字符串形
式指定字符集名字时,犹豫字符集名字拼写错误导致。
例如
评论0