Java回炉学习(四)

Java回炉学习(四)

1. 枚举类

  1. 构造器私有化
  2. 本类内部创建一组对象[四个 春夏秋冬]
  3. 对外暴露对象[通过对象添加public final static修饰符底层优化]
  4. 提供get方法,不提供set方法

2. enum关键字实现枚举

  1. 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类
  2. 传统的public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成SPRING(“春天”, “温暖”), 这里必须知道,它调用的是哪个构造器.
  3. 如果使用无参构造器创建枚举对象,则实参列表和小括号都可以省略
  4. 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
  5. 枚举对象必须放在枚举类的行首.

3. enum常用方法

  1. toString:Enum 类已经重写过了,返回的是当前对象 名,子类可以重写该方法,用于返回对象的属性信息
  2. name:返回当前对象名(常量名),子类中不能重写
  3. ordinal:返回当前对象的位置号,默认从 0 开始
  4. values:返回当前枚举类中所有的常量
  5. valueOf:将字符串转换成枚举对象,要求字符串必须 为已有的常量名,否则报异常!
  6. compareTo:比较两个枚举常量,比较的就是编号!

4. 注解的理解

  1. 注解(Annotation)也被称为元数据,用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
  2. 和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息。
  3. 在 JavaSE 中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等忽略警告等
  4. 三个基本的 Annotation:
    • @Override: 限定某个方法,是重写父类方法, 该注解只能用于方法
    • @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
    • @SuppressWarnings: 抑制编译器警告

5. @Override使用说明

  1. **@Override表示指定重写父类的方法(从编译层面验证) **,如果父类没有fly方法,则会报错
  2. 如果不写@Override注解,而父类仍有public void fly(){},仍然构成重写
  3. @Override只能修饰方法,不能修饰其它类,包,属性等等
  4. 查看@Override注解源码为@ Target(ElementType.METHOD),说明只能修饰方法
  5. @Target是修饰注解的注解,称为元注解, 记住这个概念.

6. @Deprecated的说明

  1. 用于表示某个程序元素(类,方法等)已过时
  2. 可以修饰方法,类,宇段,包,参数等等
  3. @Target(value= {CONSTRUCTOR, FIELD, LOCAL VARIABLE, METHOD,PACKAGE, PARAMETER, TYPE})
  4. @Deprecated的作用可以做到新旧版本的兼容和过渡.
  5. @Documented:用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档,即在生成文档时,可以看到该注解
  6. 被它修饰的Annotation将具有继承性如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解

7. 常见运行时异常

  1. NullPointerException 空指针异常
  2. ArithmeticException 数学运算异常
  3. ArrayIndexOutOfBoundsException 数组下标越界异常
  4. ClassCastException 类型转换异常
  5. NumberFormatException 数字格式不正确异常

在这里插入图片描述

8. 常见编译异常

在这里插入图片描述

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

9. try-catch方式处理异常

  1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
  2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch.
  3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等),则使用如下代码- finally { }
  4. 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception 在后,NullPointerException 在前),如果发生异常,只会匹配一个catch
  5. 可以进行try-finally 配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉/退出。应用场景,就是执行一-段代码,不管是否发生异常,都必须执行某个业务逻辑
  6. 如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句
  7. 如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally, 最后还需要执行finally里面的语句!

10 .throws异常处理

  1. 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
  2. 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。
  3. 对于编译异常,程序中必须处理,比如try-catch或者throws
  4. 对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
  5. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
  6. 在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws

11. 自定义异常

  1. 当程序中出现了某些"错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。

  2. 自定义异常类继承Exception或RuntimeException,若继承Exception则属于编译异常,若继承RuntimeException,则属于运行异常

  3. throw和throws的区别

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程哥哥吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值