zoukankan      html  css  js  c++  java
  • java高级语法3:异常和注解

    异常

    异常的概念

    1567956906711
    img
    stackOverFlow:栈溢出

    Exception分为检查型异常非检查型异常。检查型异常必须在源码中进行捕获处理,这是编译检查的一部分。除了RuntimeExceion及其子类之外的异常都是检查型异常。非检查型异常就是所谓的RuntimeExceion,类似NullPointerException,ArrayIndexOfBoundException就是非检查型异常,通常是可以通过编码避免的逻辑错误,具体根据需要判断是否需要捕获,编译期不检查(注意同样的,运行时异常也是可以捕获的),如果抛出了非检查型异常,那就是编码逻辑有问题,要解决。

    常见异常:

    1567957129912

    常见Error:

    StackOverFlowError(栈溢出,在无限递归时常见)

    OutOfMemoryError(内存溢出)

    捕获异常

    1567957185923
    1567957204561
    注意,我们是不应该捕获Error,而不是不能捕获Error:Error是正常情况下不大可能出现的情况,绝大部分的Error都会导致程序状态不正常,不可恢复,既然是非正常情况,所以不便也不需要处理。但是既然Error也是继承于Throwable的,说明它也是可以被捕获的,只是我们通常不会这样做而已

    /**
     * @program: OJ
     * @description:尝试捕获Error
     * @author: JiaDing
     * @create: 2020-03-29 17:30
     **/
    public class CatchError {
        public static void main(String[] args) {
            final String errorMessage="I'm an error,please catch me";
            try{
                throw new Error(errorMessage);
            }catch (Throwable e){
                e.printStackTrace();
            }
            System.out.println("捕捉完成");
        }
    }
    

    在try中的代码,报错后就结束,不会执行try中剩下的部分

    1567957626133

    抛出异常

    throw exception

    1567958104966
    抛出异常后在调用位置去捕获处理

    main方法也可以抛出异常,但是抛出就直接甩到虚拟机了,程序中对其将无法处理,此时就直接结束程序的运行所以一般不这样做

    重写方法不能抛出比被重写方法范围更大的异常类型,也就是说,子类不能抛出比父类更大范围的异常

    人工抛出异常:

    1567958149640
    1567958204506
    用户自定义异常类必须继承现有异常类

    JAVA提供的异常类一般是够用的,只有特殊情况才需要自定义,情况少见


    注解

    关于注解,更好的方式是看这篇专业的文章:https://blog.csdn.net/javazejian/article/details/71860633

    1568531966023
    1567995858440
    1567995905493
    1568532709480
    1567995982905
    @Deprecated过时方法不是不能调用,只是显示出来,便于选择和之后的迭代

    示例:

    1568532297222
    这些内容可以被抽取到dlc文件中

    javadoc test1.java//抽取注解到文档中

    生成的文件们:

    1568532400284
    生成的文档页面(HTML):

    1568532434656
    1567996077532
    1567996399302
    @Target(ElementType.FIELD)//声明这个注解类是给其他类的属性做注解

    @Rectention(RetentionPolicy.RUNTIME)//定义注解的生命周期

    @Documneted//表示将注解写到文档中

    @interface TestAnn{

    ? public int id() default 0;//default是默认值

    public String desc() default "";

    }

    使用:

    1567996338339
    对一个属性进行注解

    1567996392412
    注解可以用来替换配置文件的作用以简化操作

    示例,依然以之前使用配置文件来调用任意类的任意方法的例子为例:

    1568534902021
    1568535126089

    1568535173886

  • 相关阅读:
    对mysql 数据库操作 使其支持插入中文(针对python)
    网页制作中的超链接怎么做
    python requests的安装与简单运用(转)
    ubuntu 修改权限
    [Linux]常用命令与目录全拼
    Python web 简单服务器的搭建与运行
    ubuntu 下终端关于调试C++的命令
    正则表达式基本语法详解
    Linux下 编译C++/C以及常用的几种命令(ubuntu)
    Visual Studio 2013 中 mysql 使用 EF6
  • 原文地址:https://www.cnblogs.com/jiading/p/12367914.html
Copyright © 2011-2022 走看看