(day11)java中的异常

2019.07.12(day11)
●异常

java中有三种错误:


1.语法错误/编译错误:
    在ide(集成开发环境)工具(eclipse,myeclipse等)中写代码,代码写错了,在工具中用红波浪线或红叉来表示。
    如果显示红波浪线,此代码是不能通过工具进行编译的,不能编译就不能执行。
2.逻辑错误:
    前提是语法没有错误,程序可以编译,能运行,但结果是错误的。
    一般原因就是代码的逻辑写错了,最终结果也是错误的。
3.运行错误/异常/例外:
    前提是逻辑没有错误,但在运行期间因为某种原因导致错误,程序意外终止,这种错误就叫做异常。
    一定要注意,异常是在运行期间发生的。
比如:
    int num1,num2;这两个值需要从键盘录入
    int result=num/num;
        如果num2录入的是非零值,程序可以正常运行
        如果num2录入的是零值,程序不能正常运行,
        代码的逻辑正确,有异常,且程序意外终止
        
处理异常的目的:
    1.避免程序意外终止
    2.如果出现了异常,程序不能终止,还要给一个友好的提示
    程序意外终止:就是程序执行到某个位置的时候,不执行了
            jvm就不继续执行这个程序了

处理的方案有两种:
    方案一:
        用java代码提供的异常处理机制try catch finally

            try{
            result=num1/num2;
            }catch(ArithmeticException e){
                System.out.println("分母不能为零");
            }


快捷键 alt+shift+z 来调整代码块的模板

    方案二:    
        用java的逻辑代码来处理,即用java代码容错

            if(num2!=0){
            result=num1/num2;
            }else{
                System.out.println("分母不能为零");
            }


            
用java的try catch finally处理异常的注意事项:

try:
    用来监视代码段
    一个try可以有0个或1个或多个catch
    一个try可以没有catch,但必须有finally
catch:
    抓取相应的异常
    catch中一般有两类代码
        1.栈的轨迹
        2.友好的提示代码


finally:
    释放内存的空间
    执行完当前catch块中的代码块后,会跳过后面所有的catch,执行finally块中的代码
    不论有没有异常,最终都会执行finally块,用户申请销毁申请的内存

    try中监视的代码可能产生n种异常,所以需要写n个catch来抓取异常,但可能还是会有遗漏,所以要添加第n+1个异常,catch(Exception e)且此catch放在所有的catch后。

 

异常的继承层次:Throwable(顶级类,有两个子类)
1.Error类:
    不是程序员使用的,一般情况下是jvm使用的。
        (比如:要在一个u盘中写一个文件,但是没有u盘这个设备,那么就需要jvm来处理)
        
2.Exception类:
    是程序员能够写代码处理异常的根类(分为两类)
        ①.免检异常:不是必须添加try catch finally的,程序可以编译运行,执行时会自动终止。
            RuntimeException  运行时异常
            ArithmethicException   算术异常
            NullPointerException   空指针异常
            ArrayIndexOutofBoundsException  数组下标越界异常
            NumberFormatException  数字格式异常
            InputMismatchException  输入不匹配异常
            ...等

        ②.必检异常:必须添加try catch finally,如果不添加,会有红波浪线提示,不能编译运行。
            Exception      所有程序员能处理的异常的根类
            SQlException   sql异常
            ClassNotFoundException  类没有发现异常
            FileNotFoundException    文件没有发现异常
            ...等

throw:
    是语句抛出的一个异常,一般在代码块的内部,程序员根据实际需求来抛出异常。
    
throws:
    是方法可能会抛出某种异常的声明,放在方法体的后面,多个异常类型之间用逗号隔开。
    谁调用了此方法,谁就用try catch来处理这个异常。
    
自定义异常:
    程序员自己创建的java类,但是必须继承自Exception及其子类
    
垃圾收集管理器(GC):(针对的是堆空间)
    是java的一个后台线程,此线程完成的功能是收集堆空间中没有引用对象的内存空间,并释放空间。
    能够释放没用的对象空间,程序员是无法掌握GC调用的。    

新生代区:young generation
    伊甸园区:Eden 
        所有新创建的对象都放在此区

    幸存区:Survivor 
        在Eden区中经过一个扫描,此对象还存在,就把对象从Eden区移动到此区。
        
    一个Eden区对应两个survivor  8:1:1,最后一个survivor区是空闲的系统保留区。

老生代区:old generation
    在幸存区经过多次扫描对象,还存在于幸存区中,就把幸存区的对象移到老生代中。
    老生代扫描对象是否可用的频率远低于幸存区的扫描频率。
    在老生代长时间存在的对象,建议把其放在方法区,以减少扫描频率。

minor gc 初代回收:收集的是新生代的Eden区的空间。
full gc 完全回收:收集的是老生代的内存空间
    

    
            
                
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值