枚 举 类

枚举类

  • 枚举是一组常量的集合,枚举属于一种特殊的类,里面只包含一组有限的特定的对象
  • 自定义类实现枚举:
    • 不需要提供setXxx方法,因为枚举对象值通常为只读
    • 对枚举对象/属性使用 final + static 共同修饰, 实现底层优化
    • 枚举对象名通常使用全部大写,常量的命名规范
    • 枚举对象根据需要,也可以有多个属性
  • 进行自定义类实现枚举,有如下特点:
    • 构造器私有化
    • 本类内部创建一组对象
    • 对外暴露对象(通常为对象添加public final static 修饰符)
    • 可以提供get方法,但是不要提供set方法
  • 使用关键字enum 来实现枚举类:
    • 使用关键字enum 替代class
    • 常量名(实参列表)
    • 如果有多个常量(对象),使用" , "号间隔即可
    • 如果使用enum来实现枚举,要求将定义常量对象,写在前面
  • enum关键字实现枚举注意事项:
    • 当我们使用enum关键字开发一个枚举类时, 默认会继承Enum类, 而且是一个final类
    • 如果使用无参构造器 创建 枚举对象, 则实参列表和小括号都可以省略
    • 当有多个枚举对象时, 使用,间隔,最后有一个分号结尾
    • 枚举对象必须放在枚举类的行首
  • 使用关键字enum时,会隐式继承Enum类,这样我们就可以使用Enum类相关的方法:

请添加图片描述

  • 使用细节:
    • 使用enum关键字后,就不能再继承其它类了,因为enum会隐式继承Enum,而java是单继承机制
    • 枚举类和普通类一样,可以实现接口, 如 enum 类名 implements 接口{ }

注解

  • 注解也被称为元数据,用于修饰解释包 ,类 ,方法 ,属性, 构造器,局部变量等数据信息

  • 和注释一样,注解不影响程序逻辑,但注解可以被编译或者运行,相当于嵌入在代码块中的补充信息

  • 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在javaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替java EE旧版中所遗留的繁冗代码和XML配置等

  • Override:

    • @Override 限定某个方法,是重写父类方法,该注解只能用于方法
    • @interface 不是 interface , 是注解类,是jdk5.0之后加入的
  • Deprecated:

    • 用于表示某个程序元素(类,方法等)已过时
    • 可以修饰方法,类,字段,包,参数 等等
    • @Deprecated 的作用可以做到新旧版本的兼容和过渡
  • SuppressWarnings:

    • 抑制编译器警告
    • @SuppressWarnings({“ ”})中,可以写入你希望抑制(不显示)警告信息
    • 和放置的位置有关
    • 说明各种值:
      • unchecked 是忽略没有检查的警告
      • rawtypes 是忽略没有指定泛型的警告(传参时没有指定泛型的警告错误)
      • unused 时忽略没有使用某个变量的警告错误
  • 元注解的基本介绍: JDK的 元注解用于修饰其他注解

    • 种类:
    • Retention // 指定注解的作用范围,三种 SOURCE, CLASS, RUNTIME
    • Target // 指定注解可以在哪些地方使用
    • Documented //指定该注解是否会在javadoc体现
    • Inherited // 子类会继承父类注解
  • @Retention的三种值:

    • RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释
    • RetentionPolicy.CLASS: 编译器将把注解记录在class文件中。当运行java程序时,JVM不会保留注解。这是默认值
    • RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中。当运行java程序时,JVM程序时,JVM会保留注解,程序可以通过反射获取该注解
  • @Target:

    • 用于修饰注解定义,用于指定被修饰的Annotation 能用于修饰哪些程序元素。@Target也包含一个名为value的成员变量
  • @Documented:

    • 用于指定被该元注解修饰的注解类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解
    • 定义为Documented的注解必须设置Retention值为RUNTIME
  • @Inherited:

    • 被它修饰的注解将具有继承性,如果某个类使用了被@Inherited 修饰的Annotation,则其子类将自动具有该注解

异常处理

  • Java语言中,将程序执行中发生的不正常情况称为"异常"。

  • 执行过程中所发生的异常事件可分为两类

    • Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误,资源耗尽等严重情况
    • Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception 分为两大类:运行时异常[程序运行时,发生的异常]和编译时异常[编译时,编译器检查出的异常]

请添加图片描述

  • 运行时异常,编译器检查不出来。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常

  • 对于运行时异常,可以不作处理,因为这类异常很普通,若全处理可能会对程序的可读性和运行效率产生影响

  • 编译时异常,是编译器要求必须处置的异常,否则代码不能通过编译:

    • 常见的编译异常:
      • SQLException //操作数据库时, 查询表可能发生异常
      • IOException //操作文件时,发生的异常
      • FileNotFoundException //当操作一个不存在的文件时,发生异常
      • ClassNotFoundException //加载类, 而该类不存在时,异常
      • EOFException //操作文件,到文件末尾,发生异常
  • 常见的运行时异常包括:

    • NullPointerException空指针异常
    • ArithmeticException数学运算异常
    • ArrayIndexOutOfBoundsException数组下标越界异常
    • ClassCastException类型转换异常
    • NumberFormatException数字格式不正确异常
  • 异常处理就是当异常发生时,对异常处理的方式

    • try-catch-finally 程序员在代码块中捕获发生的异常,自行处理
    • throws 将发生的异常抛出,交给调用者来处理,最顶级的处理者是JVM
  • try{

    代码/可能有异常

    }catch(Exception e){

    ​ //捕获到异常

    ​ //1.当异常发生时,系统将异常封装成Exception 对象e,传递给catch

    ​ //2.得到异常对象后,程序员自己处理

    ​ //3.注意,如果没有发生异常catch代码块不执行

    }finally{

    //1.不管try代码块是否有异常发生,始终要执行finally

    //2.所以,通常将释放资源的代码,放在finally

    }

  • 如果程序员没有显示处理异常,默认throws

  • try-catch方式处理异常注意事项:

    • 如果异常发生了,则异常后面的代码不会执行,直接进入到catch块
    • 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
    • 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)
    • 可以有多个catch语句,捕获不同的异常,要求父类异常在后,子类异常在前,比如(Exception 在后, NullPointerException 在前),如果发生异常,只会匹配一个catch
    • 可以进行 try-finally 配合使用,这种用法相当于没有捕获异常,因此程序会直接崩溃。应用场景, 就是执行一段代码, 不管是否发生异常,都必须执行某个业务逻辑
  • 小结:

    • 如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句
    • 如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句
  • throws基本介绍:

    • 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
    • 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
  • throws注意事项和使用细节:

    • 对于编译异常,程序中必须处理,比如 try-catch 或者 throws
    • 对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
    • 子类重写父类的方法时,对抛出异常的规定: 子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
    • 在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws
  • 自定义异常: 当程序中出现了某些"错误",但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息

    • 一般情况下,我们自定义异常是继承RuntimeException
    • 即把自定义异常做成运行时异常,好处是,我们可以使用默认的处理机制
  • throw 和 throws的区别

    意义位置后面跟的东西
    throws异常处理的一种方式方法声明处异常类型
    throw手动生成异常对象的关键字方法体中异常对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值