回顾总结10
传统实现
-
构造器私有化
-
本类内部创建一组对象
-
对外暴露对象(public final static)
-
使用enum关键字
-
enum代替class
-
public static final Season SPRING = new Season(参数) 缩减为SPRING(参数)
-
如果有多个常量(对象),在后面加逗号隔开
-
如果使用enum,必须把定义常量放在最前面
常用方法
-
toString:Enum类重写过方法,返回的是当前对象名,子类可以重写该方法,用于返回对象的属性信息。Object返回的是对象名和哈希值
-
name:返回当前对象名(常量名)子类中不能重写
-
ordinal:返回当前对象的编号,默认从0开始
-
values:返回当前枚举类中包含所有的常量的数组(源码中不可见,反编译可见)
-
valueOf:将字符串转换成枚举常量,要求字符串必须为已有的常量名,否则报错
-
compareTo:比较前后两个枚举常量的编号,用前面常量的编号减去后面常量的编号,如果大于0,说明前面常量在后面常量排序的后面。小于0,在前面。
details
-
枚举类是隐式继承Enum,所以后面不能继承其它类。但是可以实现接口
注解
@Override重写
-
表示重写父类的方法,会从编译层面验证,判断是不是真的重写方法
-
没有@Override,重写了父类的方法,仍构成重写
-
@Override只能修饰方法,不能修饰其它类、包、属性等
-
查看@Override注解源码为@Target(ElementType.METHOD),说明只能修饰方法
-
@Target是修饰注解的注解,称为元注解
@Deprecated过时
-
用于表示某个程序元素(类、方法等)已经过时,不推荐使用
-
可以修饰方法、类、字段、包、参数等等
-
@Target(value={CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE}
-
@Deprecated的作用可以做到新旧版本的兼容和过渡
@SuppressWarnings抑制警告
-
unchecked:忽略没有检查的警告
-
rawtypes:忽略没有指定泛型的警告
-
unused:忽略没有使用某个变量的警告错误
-
@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
子类会继承父类注解
工厂模式
工厂类中的工厂方法,可以设置成静态的,这样可以不用加载工厂类,直接使用方法返回对象
-
首先创建一个工具接口。如Vehicle,方法work
-
创建实现工具接口的实体类。如Car、Bike,重写各自的方法
-
创建一个工厂类,去生产实现接口的实体类,VehicleFactory,工厂会生产实体类,getCar、getBike等方法返回对应的实体类
-
可以把获取实体类的方法做成static,这样可以不用产生工厂的类信息,直接调用方法生产工具实体类。
-
如果不需要每一次都产生新的对象,可以定义私有静态属性生成实例类,每一次调用方法的时候,返回这个实例类。(饿汉式单例模式)
-
为了不让别人生成工厂类,可以设置一个私有的构造方法,让这个类当一个纯纯的工具类。
-
异常
异常:程序执行过程中发生的不正常情况(未能预料的情况)称为异常
程序出现异常会停止,不再继续执行下去。
异常处理(健壮性)
为了程序能够完整的运行下去,我们引出了一个机制,提前判断可能出现的异常,然后处理掉。这样即使出现了异常,程序也能继续执行下去
try-catch-finally
程序员在代码中捕获发生的异常,自行处理
try{
//代码/可能有异常(可疑代码)
}catch(Exception e){
//1.发生异常时,将其捕获
//2.把捕获到的异常封装成一个Exception对象,对象名就是e,然后跳转到catch
//3.程序员可以选择对该异常对象进行处理,而不是让JVM处理,在运行的时候,暂停程序,把异常发发送到控制台
}finally{
//不管try代码块是否有异常发生,始终要执行finally内的代码
//通常将释放资源的代码,放在finally里
}
throws
将发生的异常抛出,交给调用者(方法)处理,最顶级的处理者是JVM
运行时异常:如果没有选择异常处理方式,默认的就是throws方法,会一层一层往上抛,到JVM层面,它脾气爆的很,它也不管,没人处理是吧,我也不处理了,直接把异常信息输出到控制台上,让程序员自己想办法。
编译时异常:必须显式的处理异常
异常分类
-
Error(错误):Java虚拟机无法解决的严重问题。如JVM系统内部错误,资源耗尽等严重情况,StackOverfolwError(栈溢出)和OOM(out of memory),Error是严重错误,程序会崩溃。
-
Exception:其他因程序编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如空指针访问,试图读取不存在的文件,网络连接中断等 Exception分为两大类:运行时异常(class文件到类加载,运行期间)和编译时异常(java文件到class文件期间)
运行时异常
-
编译器检查不出来,一般是指编程时的逻辑错误,是程序员应该避免其出现的异常,java.lang.RuntimeException类及它的子类都是运行时异常。
-
对于运行时异常,可以不做处理,因为这类异常很普遍,如果全部处理可能会对程序的可读性和运行效率产生影响
常见运行时异常
-
NullPointerException:空指针异常
-
ArithmeticException:数学运算异常
-
ArrayIndexOutOfBoundsException:数组下标越界异常
-
ClassCastException:类型转换异常
-
NumberFormatException:数字格式不正确异常
编译时异常
编译时异常是编译器要求必须处理的异常。
也就是我们日常写代码爆出来的异常,不写不给通过。
常见编译异常
-
SQLException:操作数据库时,查询表可能发生异常
-
IOException:操作文件时,发生的异常
-
FileNotFoundException:当操作一个不存在的文件时,发生异常
-
ClassNotFoundException:加载不存在的类,发生异常
-
EOFException:操作文件,到文件末尾,发生异常
自定义异常
-
定义类:自定义异常类名,继承Exception或RuntimeException
-
如果继承Exception,属于编译异常
-

浙公网安备 33010602011771号