JavaSE Day14 知识总结

异常处理:

异常:

在代码运行过程中,因为用户的误操作,代码的BUG,或者等等一系列原因,引起的程序崩溃(程序无法向下继续执行)的现象,我们称之为异常。(不是代码编译错误!)

例如:数学异常除数为0,异常·报错ArithmeticException(数学异常)

异常处理:

本质就是提升程序的容错能力,保持程序的稳定性。

        对异常预估和预判,解决异常现象,让·程序继续运行下去,不要崩溃和异常退出。


异常处理方案:

  1. 抓捕异常【重点学习】

    1. 针对可能出现异常的代码进行抓捕
      1. Try{

//可能出现异常的代码
                  }catch( 异常对象 【
Exception  e){

        //如果出现一次,代码就会立刻进入catch

        //通过e.printStackTrace()可以打印出方法的调用栈,

        //通过e.getmassage()可以打印出自己扔出的信息。

        //在这里解决抓捕的异常

                              }

Finally{

//必须执行的代码(不管有没有异常)         }

如果使用抓捕异常,通过这种处理方式,程序即便是遇到了,也不会崩溃!!!


如果出现多次异常,可以分别处理,也可以直接用大的异常处理类(Exception)直接全部处理

public static void main(String[] args) {    

try {        process1();

              process2();      

              process3();

                                          }

 catch (IOException e) {        System.out.println("Bad input");  

 }

 catch (NumberFormatException e) {        System.out.println("Bad input");

  }

 catch (Exception e) {        System.out.println("Unknown error");   }

}

注意:异常处理类越大,就应该越放在后面,防止前面子类毫无意义

注意:try内代码出现异常,后续代码将不会在继续执行,会直接跳转到catch代码块内执行:异常处理代码,最后执行finally代码块内。


b),抛出异常

一般为编译型异常,如果我们不想处理,可以直接抛给调用者,由调用者完成处理,如若调用者处理不了,以此往上推至JVM,若还是无法处理,程序就会直接挂掉。

Public static void  函数名(函数参数)throws 异常1,异常2,……{

//出现异常的内容

 }


异常分类:

  1. 编译型异常

    1. 代码在编译过程中直接抛出异常,这种异常必须处理,不然代码无法正常运行。

  2. 运行时异常

    1. 在编译的过程中没有出现异常,但在运行过程中可能因各种原因(逻辑顺序,……)抛出异常,


Java中异常的继承关系:

Throwable(异常的顶级类):

  1. Exception

    1. RuntimeException(运行时异常)

    2. 剩下的都是编译型异常

  2. Error(一般这个类的异常:表示一种致命的异常,无法拯救)

    1. OutOfMemoryError:内存耗尽

    2. NoClassDefFoundError:无法加载某个Class

    3. StackOverflowError:栈溢出


finally关键字:

不管异常有没有finally{    //代码       }里面的代码必须执行.

finally{    //代码       }里面的代码可以是:

回收垃圾,关闭IO流,关闭数据库连接,……核心必须要执行的代码

注意:在开发的过程中请注意,return 关键字和finally关键字同时出现的情况,认真分析仔细考虑。

注意finally有几个特点:

1. finally语句不是必须的,可写可不写;

2. finally总是最后执行。如果没有发生异常,就正常执行try { ... }语句块,然后执行finally。如果发生了异常,就中断执行try { ... }语句块,然后跳转执行匹配的catch语句块,最后执行finally。可见,finally是用来保证一些代码必须执行的。某些情况下,可以没有catch,只使用try ... finally结构

3.catch中抛出异常,不会影响finally的执行。JVM会先执行finally,然后抛出异常。


自定义异常类:

目前接触到的都是java官方提供的异常处理类;

自己设计异常类

定义一个普通类,让该类成为Exception类或者成为它的子类的子类(建议使用,相对应的物品英文名称定义异常名称)

Public MyException extends  runtimeException{      

 重写生成所有构造函数:ALT+SHIFT+S——>generate constructors   from superclass……

}

在自定义异常时建议使用运行时异常(runtimeException),不建议使用编译型异常(Exception).

自定义异常可以向调用者传递信息!!!

异常抛出:

可以通过创建异常(系统或者自定义),来给调用者一个确切的错误信息,调用者就可以通过抛出的信息做出对应判断。


包装类:

基本数据类型对象包装类特点:

用于在基本数据和字符串之间进行转换。

基本数据类型

对应包装类

byte

Byte

short

Short

int

Integer

long

Long

bolean

Boolen

float

Float

double

Double

char

Charcter

将基本数值转成字符串有3种方式

1)基本类型直接与””相连接即可;34+""

2)调用String的valueOf方法;String.valueOf(34);

3)调用包装类中的toString方法;Integer.toString(34);

装箱/拆箱功能:

拆箱:将包装类的对象转换为基本数据类型    integer I = 100;——>int ii = I;

装箱:将基本数据类型包装为包装类  double a =3.14——>Double aa =a;

JDK1.5以后,有了一个包装类的新特性:

自动装箱细节:

Integer a = new Integer(3);

Integer b = new Integer(3);

System.out.println(a==b);//false

System.out.println(a.equals(b));//true

System.out.println("---------------------");

Integer x = 128;

Integer y = 128;

//在jdk1.5自动装箱时,如果数值在byte范围之内,不会新创建对象空间而是使用原来已有的空间。

System.out.println(x==y);

System.out.println(x.equals(y));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值