java程序报错总结

一、程序的错误类型

程序的错误可以抽象分为三类:语法错误、运行错误。逻辑错误

语法错误:编程中输入不符合语法的规则,程序编译不通过,程序不能运行起来。又称为编译错误。分为三种:致命错误、错误和警告。

Eg:表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不匹配

运行错误:程序运行过程出现的错误,此类错误有特定的发生条件,因此能够准确的定位错误代码。

Eg:除法运算时除数为0、数组下标越界、文件打不开、磁盘空间不够、数据库连接错误。

逻辑错误:程序运行后,没有得到预期结果。

Eg:使用了不正确的变量,指令的次序错误、循环的条件不正确、程序设计的算法考虑不周全。

二、java的异常处理(错误处理)

程序的错误就是通常的异常,也叫Exception。

对于运行错误,Java语言中代表异常时,使用一个专门的类来代表一种特定的异常情况,在系统中传递的异常情况就是该类的对象,所有代表异常的类组成的体系就是Java语言中的异常类体系。

1、java异常类

Java的异常是一个对象,所有的异常都直接或间接地继承Throwable类。

Throwable------Error 错误子类

-------Exception 非运行时异常类

-------RuntimeException 运行时异常类

Java API中专门设计了java.lang.Throwable类,只有该类子类的对象才可以在系统的异常传递体系中进行。该类的两个子类分别是:

Error类

该类代表错误,指程序无法恢复的异常情况。对于所有的错误类型以及其子类,都不要求程序进行处理。常见的Error类例如内存溢出StackOverflowError等。

Excption类

该类代表异常,指程序有可能恢复的异常情况。该类就是整个Java语言异常体系中的父类。使用该类,可以代表所有异常的情况。

根据是否是程序自身导致的异常,将所有异常类分为两种:

1、RuntimeException及其所有子类

该类异常属于程序运行时异常,也就是程序自身的问题导致产生的异常,例如数组下标越界异常ArrayIndexOutOfBoundsException等。

该类异常在语法上不强制程序员必须处理,即使不处理这样的异常也不会发生语法错误。

2、其他Exception子类

该类异常属于程序外部的问题引起的异常,也就是程序运行时某些外部问题导致产生的异常,例如文件不存在异常FileNotFoundException等。

该类异常在语法上强制程序员必须进行处理,如果不处理会发生语法错误。

2、常见的error类

异常类名 用途

LinkageError 动态链接失败

VirtualMachineError 虚拟机错误

AWTError AWT错误

3、常见运行时异常类

异常类名 用途

ArithmeticException 数学运算异常,比如除数为零的异常

IndexOutOfBoundsException 下标越界异常,比如集合、数组等

ArrayIndexOutOfBoundsException 访问数组元素的下标越界异常

StringIndexOutOfBoundsException 字符串下标越界异常

ClassCaseException 类强制转换异常

NullPointerException 当程序试图访问一个空数组中的元素,或访问一个空对象中的方法或变量时产生的异常。

4、java的异常处理机制描述如下:

把生成异常对象并把它提交给运行时系统的过程称为抛出(throw)一个异常。

系统在方法的调用栈中查找,从产生异常的方法开始进行回溯,沿着被调用的顺序往前寻找,直到找到包含相应的异常处理方法为止。这过程称为捕获(catch)一个异常。

如该异常未进行成功捕获,则程序将终止运行。

5、异常捕获和处理

格式:

Try {

正常程序段,可能抛出异常;

}

Catch(异常类1  异常变量){

捕捉异常类1有关的处理程序段;

}

Catch(异常类2  异常变量){

捕捉异常类2有关的处理程序段;

}

············

Finally{

一定会运行的程序代码;

}

Try块——捕获异常

Catch——处理异常:Catch包括两个参数:一个是类名,指出捕获的异常类型,必须是Throwable类的子类;一个是参数名,用来引用被捕获的对象。Catch块所捕获的对象并不需要与它的参数类型精确匹配,它可以捕获参数中指出的异常类的对象及其所有子类的对象。

Finally块——最终处理

注意:

1、一个try、catch、finally块之间不能插入任何其它代码。

2、Catch可以有多个,try和finally只能有一个。

3、Try后面必须要跟catch、finally其中的一个,因此try、catch、finally语句只能省略catch、finally中的一个。

4、定义多个catch可精确定位java异常,越特殊的异常越在前面处理,越普遍的异常越在后面处理。

异常类常用方法

Void String getMessage()

返回异常对象的一个简短描述

Void String toString()

获取异常对象的详细信息

Void printStack Trace()

在控制台上打印异常对象和它的追踪信息

Eg:

Public classTryCatchDemo{

Public static void main(String args[]) {

try {

int a=8,b=0;

int c=a/b;

System.out.print(c);

}

//AirthmeticException是异常类的名称,e是引用的参数名称

catch(AirthmeticException e) {

System.out.printIn(“发生的异常简短描述是:”+e.getMessage());

System.out.printIn(“发生的异常详细信息是:”+e.toString());

}

}

}

三、异常的抛出

1、系统自动抛出异常,try catch

2、通过关键字throw将异常对象显性地抛出。

异常抛出的语法

throw new 异常类();

其中异常类必须是Throwable类及子类

Eg:

throw new ThrowableObject();

AirthmeticException e = new AirthmeticExceptio();

throw e;

throws子句的方法声明的一般格式如下:

<类型说明>方法名(参数列表)throws <异常类型列表>

{

方法体;

}

四、用户自定义异常

用户自定义的异常,只需继承一个已有的异常类就可以了,包括继承Exception类及其子类,或者继承已自定义好的异常类。如果没有特别说明,可以直接用Exception类作为父类。

Class 异常类名 extends Exception

{

···················

}

1、自定义异常类必须继承自Throwable或Exception类,建议用Exception类。

2、当自定义异常是从RuntimeException及其子类继承而来时,该自定义异常是运行时异常,程序中可以不捕获和处理它。

3、当自定义异常是从Throwable、Exception及其子类继承而来时,该自定义异常是编译时异常,即程序中必须捕获并处理。

使用自定义异常步骤如下

首先通过继承java.lang.Exception类声明自定义的异常类

在方法的声明部分用throws语句声明该方法可能抛出的异常

在方法体的适当位置创建自定义异常类的对象,并用throw语句将异常抛出

调用该方法时对可能产生的异常进行捕获,并处理异常。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JAVA报错"cannot be cast to"是指在类型转换时出现错误。这个错误通常发生在代码中试图将一个类型转换为另一个类型,但是两个类型之间不存在继承关系或者类型转换是不允许的情况下。举个例子,如果我们试图将一个类型为com.bjpowernode.ba03.Student的对象强制转换为com.bjpowernode.ba01.Student的类型,就会出现ClassCastException报错。 另外,也有可能出现"cannot be cast to"的报错是因为在maven开发web应用程序时,引入的servlet-api.jar与其他jar包存在冲突。这个报错可能会显示"Offending class: javax/servlet/...",并提示"jar not loaded"。 此外,在复制包的过程中没有导入必要的包也可能导致"cannot be cast to"的报错。比如,当我们复制代码时,可能会忘记导入相关的包,从而导致类型转换错误。 总结来说,"cannot be cast to"的报错通常是由于类型转换错误或者包导入错误引起的。我们需要仔细检查代码中的类型转换和包导入的问题,以解决这类报错。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [spring中遇到的java.lang.ClassCastException中cannot be cast to报错(初学)](https://blog.csdn.net/m0_67393413/article/details/126116762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [解决cannot be cast to javax.servlet.Filter 报错的问题](https://download.csdn.net/download/weixin_38565801/14046932)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值