java 语言基础
- 异常
1.什么是异常?Java代码在运行时期发生的问题就是异常。
2.在Java中,把异常信息封装成了一个类。当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置、原因等)。
3.Exception 类及其子类是 Throwable 的一种形式,它用来表示java程序中可能会产生的异常,并要求对产生的异常进行合理的异常处理。Exception有继承关系,它的父类是Throwable。Throwable是Java 语言中所有错误或异常的超类
eg:
public class ExceptionDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=0;
int b=100/a;
System.out.println("除法结束。");
}
}
异常包含了错误的类型、原因以及位置
异常:不正常,我们在代码的时候出现的编译或者运行时的错误
异常的体系结构:
```java
Throwable(最顶层)
Error:出现的不能够处理的严重问题
Exception:可以处理的问题
```
- 捕获异常
捕获异常格式:
try {
//需要被检测的语句。
}
catch(异常类 变量) { //参数。
//异常的处理语句。
}
finally {
//一定会被执行的语句。
}
eg:
public class ExceptionDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(1);
int a=1;
// int a=0;
int b=100/a;
}catch(ArithmeticException b) {
System.out.println("除数不能为0。");
}
System.out.println(2);
}
}
1.首先执行try语句, 如果发现异常,异常下面的代码不在执行,直接跳入catch语句中,catch语句结束后,整个try…catch结束
2. 如果没有发现异常,try语句执行结束后,try…catch直接结束, 不在执行catch语句
- 异常的抛出
使用关键字throws在方法的声明出抛出异常
import java.io.FileWriter;
import java.io.IOException;
public class ExceptionDemo {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
method();
function();
}
public static void function() throws IOException {
FileWriter fw=new FileWriter("a.txt");
}
private static void method() {
try {
System.out.println(1);
int a=1;
// int a=0;
int b=100/a;
}catch(ArithmeticException b) {
System.out.println("除数不能为0。");
}
System.out.println(2);
}
}
- 多重catch句子
void show(){ //不用throws
try{
throw new Exception();//产生异常,直接捕获处理
}catch(XxxException e){
//处理方式
}catch(YyyException e){
//处理方式
}catch(ZzzException e){
//处理方式
}
}
eg:
public class ExceptionDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String s=null;
System.out.println(s.length());
}catch(NullPointerException e) {
System.out.println("出现空指针!");
}
// try {
// int[] arr=new int [5];
// System.out.println(arr[8]);
// }
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("出现数组越界");
}
catch(Exception e) {
System.out.println("出现异常");
}
}
}
注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
- Throwable常用方法
1.String getMessage() 返回此 throwable 的详细消息字符串
2.String toString() 返回此 throwable 的简短描述
3.void printStackTrace() 打印异常的堆栈的跟踪信息 - finally的概述和应用场景
finally使用格式:
try{
}catch(异常类型 异常变量){
}finally{
//释放资源的代码
}
- 创建自己的异常
public class Exanple12 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
throw new TestException("测试自定义异常的使用。");
}catch(Exception e)
{
System.out.print(e.toString());
}
}
}
class TestException extends Exception{
public TestException() {
super();
}
public TestException(String message) {
super(message);
}
public String getMessage() {
return "我的异常:"+super.getMessage();
}
}
总结与提示:
- catch字句的捕获范围限制于其匹配的try字句,不能捕获其他try字句中的异常
- 不能单独使用try字句,它必须和catch字句或finally字句结合使用,catch字句可以设置多个,finally字句只能有一个。
- 有多重catch字句时,只能执行那个捕获到异常的字句,其余的catch字句不能执行。
- try/catch/finally三个字句中变量的作用域独立而不能相互访问。如果要在三个字句中都可以访问,则需要将变量定义到这些字句的外面。
- 不要写过大的try字句,一个try字句中尽量不要存太多的异常
- 一个方法中如果有发生异常的可能,则可以进行捕获处理,也可以声明由调用者来处理。
- throw语句后不允许有其他语句,因为这些语句没有机会执行。
- 不能利用异常处理进行程序的分支处理,它只是处理非正常情况的一种机制。