回顾总结10

枚举

传统实现

  1. 构造器私有化

  2. 本类内部创建一组对象

  3. 对外暴露对象(public final static)

  4. 提供get方法,不提供set方法

使用enum关键字

  1. enum代替class

  2. public static final Season SPRING = new Season(参数) 缩减为SPRING(参数)

  3. 如果有多个常量(对象),在后面加逗号隔开

  4. 如果使用enum,必须把定义常量放在最前面

常用方法

  1. toString:Enum类重写过方法,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息。Object返回的是对象名和哈希值

  2. name:返回当前对象名(常量名)子类中不能重写

  3. ordinal:返回当前对象的编号,默认从0开始

  4. values:返回当前枚举类中包含所有的常量的数组(源码中不可见,反编译可见)

  5. valueOf:将字符串转换成枚举常量,要求字符串必须为已有的常量名,否则报错

  6. compareTo:比较前后两个枚举常量的编号,用前面常量的编号减去后面常量的编号,如果大于0,说明前面常量在后面常量排序的后面。小于0,在前面。

details

  1. 枚举类是隐式继承Enum,所以后面不能继承其它类。但是可以实现接口

注解

@Override重写

  1. 表示重写父类的方法,会从编译层面验证,判断是不是真的重写方法

  2. 没有@Override,重写了父类的方法,仍构成重写

  3. @Override只能修饰方法,不能修饰其它类、包、属性等

  4. 查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法

  5. @Target是修饰注解的注解,称为元注解

@Deprecated过时

  1. 用于表示某个程序元素(类、方法等)已经过时,不推荐使用

  2. 可以修饰方法、类、字段、包、参数等等

  3. @Target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE}

  4. @Deprecated的作用可以做到新旧版本的兼容和过渡

@SuppressWarnings抑制警告

  1. unchecked:忽略没有检查的警告

  2. rawtypes:忽略没有指定泛型的警告

  3. unused:忽略没有使用某个变量的警告错误

  4. @Target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PARAMETER,TYPE}

元注解

@Retention

指定注解的范围SOURCE、CLASS、RUNTIME

SOURCE:编译器使用后,直接丢弃这种策略的注解(只存在一阶段)

CLASS:编译器将把注解记录在class文件中,当运行Java程序时,JVM不会保留注解。这是默认值(存在两个阶段)

RUNTIME:编译器把注解记录在class文件中,当运行Java程序时,JVM会保留注释,程序可以用过反射获取该注释(存在所有阶段,三个)

@Target

指定注解的使用位置

@Documented

指定该注解是否会在javadoc体现

@Inherited

子类会继承父类注解

工厂模式

工厂类中的工厂方法,可以设置成静态的,这样可以不用加载工厂类,直接使用方法返回对象

  1. 首先创建一个工具接口。如Vehicle,方法work

  2. 创建实现工具接口的实体类。如Car、Bike,重写各自的方法

  3. 创建一个工厂类,去生产实现接口的实体类,VehicleFactory,工厂会生产实体类,getCar、getBike等方法返回对应的实体类

    • 可以把获取实体类的方法做成static,这样可以不用产生工厂的类信息,直接调用方法生产工具实体类。

    • 如果不需要每一次都产生新的对象,可以定义私有静态属性生成实例类,每一次调用方法的时候,返回这个实例类。(饿汉式单例模式)

    • 为了不让别人生成工厂类,可以设置一个私有的构造方法,让这个类当一个纯纯的工具类。

异常

异常:程序执行过程中发生的不正常情况(未能预料的情况)称为异常

程序出现异常会停止,不再继续执行下去。

image-20210728180652834

异常处理(健壮性)

为了程序能够完整的运行下去,我们引出了一个机制,提前判断可能出现的异常,然后处理掉。这样即使出现了异常,程序也能继续执行下去

try-catch-finally

程序员在代码中捕获发生的异常,自行处理

try{
   //代码/可能有异常(可疑代码)
}catch(Exception e){
   //1.发生异常时,将其捕获
   //2.把捕获到的异常封装成一个Exception对象,对象名就是e,然后跳转到catch
   //3.程序员可以选择对该异常对象进行处理,而不是让JVM处理,在运行的时候,暂停程序,把异常发发送到控制台
}finally{
   //不管try代码块是否有异常发生,始终要执行finally内的代码
   //通常将释放资源的代码,放在finally里
}

throws

将发生的异常抛出,交给调用者(方法)处理,最顶级的处理者是JVM

运行时异常:如果没有选择异常处理方式,默认的就是throws方法,会一层一层往上抛,到JVM层面,它脾气爆的很,它也不管,没人处理是吧,我也不处理了,直接把异常信息输出到控制台上,让程序员自己想办法。

编译时异常:必须显式的处理异常

异常分类

  1. Error(错误):Java虚拟机无法解决的严重问题。如JVM系统内部错误,资源耗尽等严重情况,StackOverfolwError(栈溢出)和OOM(out of memory),Error是严重错误,程序会崩溃。

  2. Exception:其他因程序编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如空指针访问,试图读取不存在的文件,网络连接中断等 Exception分为两大类:运行时异常(class文件到类加载,运行期间)和编译时异常(java文件到class文件期间)

运行时异常

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

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

常见运行时异常

  1. NullPointerException:空指针异常

  2. ArithmeticException:数学运算异常

  3. ArrayIndexOutOfBoundsException:数组下标越界异常

  4. ClassCastException:类型转换异常

  5. NumberFormatException:数字格式不正确异常

编译时异常

编译时异常是编译器要求必须处理的异常。

也就是我们日常写代码爆出来的异常,不写不给通过。

常见编译异常

  1. SQLException:操作数据库时,查询表可能发生异常

  2. IOException:操作文件时,发生的异常

  3. FileNotFoundException:当操作一个不存在的文件时,发生异常

  4. ClassNotFoundException:加载不存在的类,发生异常

  5. EOFException:操作文件,到文件末尾,发生异常

自定义异常

  1. 定义类:自定义异常类名,继承Exception或RuntimeException

  2. 如果继承Exception,属于编译异常

  3. 如果继承RuntimeException,属于运行异常

posted @ 2021-08-03 13:08  灰线  阅读(34)  评论(0)    收藏  举报