关于错误和异常的阶段总结

[size=medium] 当我们查看JDK时,不难发现除了Throwable类中定义了为数不多的方法外,几乎它的所有子类,无论是Error,或者是Exception都很少有方法定义,或方法重写,这间接的说明了一点——方法对于具体的错误或异常类是无关紧要的。我们往往关心的是错误或异常的名字,自己该怎么对自己的程序进行修改,看一下异常名,一目了然![/size]
[size=medium] 下面是一些我的一些实例总结![/size]
[size=medium] 一.Error总结[/size]
[size=medium] 导致错误的原因主要是我们自己的逻辑错误,或原则上的错误导致了一些不可调和的结果![/size]
[size=medium][color=red] 1.栈溢出错误:在堆中不停的创建自身对象,行为就像递归调用没写结束条件一样![/color][/size]
public class ErrorText {
//创建ErrorExampe对象
public static void main(String args []){
ErrorExample error = new ErrorExample();
}
}
class ErrorExample{
private ErrorExample error = new ErrorExample();
//重载构造器
public ErrorExample(){
//System.out.println("hello world!");
}
}

Exception in thread "main" java.lang.StackOverflowError
at net.hailei.exception.ErrorExample.<init>(ErrorText.java:10)
at net.hailei.exception.ErrorExample.<init>(ErrorText.java:10)
at net.hailei.exception.ErrorExample.<init>(ErrorText.java:10)
at net.hailei.exception.ErrorExample.<init>(ErrorText.java:10)

[size=medium] [color=red]2.内存溢出,在一个循环里不停的执行相同操作,而且不释放空间,导致内存溢出错误[/color][/size]
public class ErrorText {
//创建ErrorExampe对象
public static void main(String args []){
StringBuilder sbd = new StringBuilder();
while(true){
sbd.append("Hello World!");
}
}
}

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)

[size=medium]上面两种错误都属于VirtualMachineError(虚拟机崩溃或用尽了它操作的资源),当然错误的类型是数不胜数的,大多数只能在处理特定问题时遇到,不过我们遇到错误的概率还是很小的,大多数情况下,我们都是和异常在打交道![/size]
[size=medium] 二 异常总结[/size]
[size=medium] 异常分为强制异常和运行时异常,运行时异常常常由虚拟机替我们一手包办,而无需你去检测“我是不是传了一个空的引用,我的数组是不是越界啦!”这些由于疏忽难以被我们发现的问题。然而强制异常则要求我们在编译时必须对异常进行处理,至于是抛出异常还是捕获并处理异常就取决于你了![/size]
[size=medium] 下面我们来看看两种方法的执行流程。[/size]
public class ExceptionText {
public static void main(String[] args) throws MyException{
//创建对象,调用方法
ExceptionText et = new ExceptionText();
et.study();
//看看程序是否运行此段代码
System.out.println("程序运行了此段代码!");
}
//要调用的方法
public void study() throws MyException{
throw new MyException();
}
}
class MyException extends Exception{}

Exception in thread "main" net.hailei.exception.MyException
at net.hailei.exception.ExceptionText.study(ExceptionText.java:13)
at net.hailei.exception.ExceptionText.main(ExceptionText.java:7)

public class ExceptionText {
public static void main(String[] args){
//创建对象,调用方法
ExceptionText et = new ExceptionText();
et.study();
//看看程序是否运行此段代码
System.out.println("程序运行了此段代码!");
}
//要调用的方法
public void study(){
try {
throw new MyException();
} catch (MyException e) {
System.out.println("我已经处理了异常!");
e.printStackTrace();
}
}
}
class MyException extends Exception{}

我已经处理了异常!
程序运行了此段代码!
net.hailei.exception.MyException
at net.hailei.exception.ExceptionText.study(ExceptionText.java:14)
at net.hailei.exception.ExceptionText.main(ExceptionText.java:7)

[size=medium] 第一段代码,我并没有处理异常,而是使用thorws与throw关键字抛出异常。通过打印的代码可以得出结论:[color=red]如果在方法内部抛出异常(或是在方法内部调用的其他方法抛出了异常),这个方法将在抛出异常的过程中结束![/color][/size]
[size=medium] 第二段代码,我用try{}块捕获了异常(它内部要很多捕获异常的方法),然后用catch(){}块处理了异常。通过打印的代码可以得出结论:[color=red]当方法中的异常被捕获并得到处理,方法会继续向下运行![/color][/size]
[size=medium][color=red] 关于异常,我还有很多问题没有解决,诸如:具体问题中,在抛出异常与处理异常的选择问题(如何捕获异常,并给人醒目的提醒);异常链的问题;使用finaly进行清理的问题...新的问题常常伴随在你解决问题之后,让人应接不暇![/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值