java中有三种错误:
1.语法错误(编译错误):
在ide(集成开发环境)工具(ecpise,myecplise等)中写代码,代码写错了,在,工具中用红波浪线或者红叉来表
示,如果现实红波浪线,此代码不能通过工具进行编译,不能编译,就不能执行
2.逻辑错误
前提是语法没有错误,可以编译运行,但运行结果错误,一般
原因是代码的逻辑写错了,导致执行结果和预期结果不一致
3.运行错误/异常/例外:
前提是语法和逻辑没有错误,但在运行期间,因为某种原因导致程序异常终止
比如:
Int num1,num2;//这两个值从键盘录入
Int result = num1/num2;//
如果num2录入的是非零值,程序可以正常运行,没有异常
如果num2录入的是零,代码逻辑正确,但是有异常,程序会终止
处理异常的两个目的:
1.避免程序异常终止
2.如果出现异常,程序不能终止,还要给一个友好合理的提示
程序意外的终止:
就是程序执行到某一行位置的时候就不执行了,jvm就不继续执行此程序了
处理方案有两种:
方案一:
用java代码提供的异常处理机制 try catch finally
方案二:
用java的逻辑代码来处理,即,用java代码容错
用java 的try catch finally 的一些相关的注意事项:
一般情况下,try块中监的代码需要程序员猜测try块中有多少种可能的异常,try块中的代码可能有n中异常,
那么就在try块的下面写n个catch,且catch抓取的异常类型是不同的,如果发生了异常,但是没有catch来抓
住,程序还是会意外终止,为了解决这个问题,需要添加第n+1个catch,这个catch的异常类型是Exception异
常类型,即catch(Exception e),且此catch必须放在所有catch的最后
一个try可以有0个或1个或多个catch
一个try可以没有catch但必须有finally
什么是finally:
finally块中放置若干java代码,一般情况下,finally块中的代码是用来释放
try块中申请的内存空间
try catch finally执行顺序:
try块中如果有异常,会抛出异常,在某个catch块接收到系统抛出的异常(必须保证catch抓取的异常类
型,跟抛出的异常类型相同),然后对应catch块中的代码就被执行了,catch块一般有两类代码,一个是栈
的轨迹(e.printStackTrace();),另一个是有好的交互或提示的代码执行完当前的catch块中的代码,会
跳过后面所有的catch块,执行finally块中的代码,执行完finally块的代码后,继续执行finally块后面
的代码,即使没有异常,最终会执行finally块中的代码,销毁用户申请的内存空间
异常的继承层次:
顶级类:Throwable
Throwable类有两个子类:
Error类:不是程序员能使用的,一般情况下是给JVM使用的
比如:
要往U盘中写入一个文件,但没有U盘这个设备
异常错要抛给JVM处理
Exception类:是程序员能够写代码处理的异常的根类
分为两类:
-免检异常:不是必须添加try catch finally的程序是能够编译和执行的,
但执行时触发的符合的异常程序还是意外终止
RuntimeException 运行时异常
ArithemthicException 算术异常
NullPointerExceotion 空指针异常
ArrayIndexOutofBoundsException 数组下标越界异常
NumberFormatException 数字格式异常
InputMismatchException 输入不匹配异常
...
-必检异常:必须添加 try catch finally,如果不添加,则会有红波浪线
提示,说明程序是不能编译和执行的
Exception 所有程序员能处理的异常根类
SQLException sql异常
ClassNotFoundException 类没有发现异常
FileNotFoundException 文件没有发现异常
...
如何判断异常时是免检还是必检
如果程序员在写代码的时候,代码没有错误,担报了红波浪线
并提示"Unhandled exception type XXXException"
无法处理 异常 类型 具体的异常类型
只要提示这句话,那么久属于必检异常,必须添加try catch 否则红波浪线不会消失
快捷键 alt + shirt + z 来调用代码块的模板