静态内部类
静态内部类
如果一个内部类被static修饰,我们成为这个内部类为静态内部类。
public class Outer {
static class Inner{
}
}
静态内部类创建对象
public class Test01 {
public static void main(String[] args) {
Inner inner = new Outer.Inner();
inner.showInfo();
}
}
方法内部类
如果一个内部类定义到一个方法中,成为方法内部类。
方法的局部变量进入方法内部类时,被加final修饰。出了方法内部类后,final被去掉。
匿名内部类
如果这个类只使用一次,我们可以把类声明为匿名类。匿名类一般和内部类结合使用,形成匿名内部类。
匿名内部类一定要存在:实现接口
new MyInterface(){
public void showInfo() {
System.out.println("Inner:showInfo");
}
}.showInfo();
2异常处理
传统处理异常的缺点
1通过判断影响效率,
2判断逻辑和业务逻辑交织在一起,可维护性很差。
异常的定义:是指在程序运行时发生不正常的情况,他会中断程序运行。
异常处理机制中一些关键字(try....catch//try...catch...finally)
把可能产生异常的代码放在Try中,catch负责捕获以及处理异常,Finally进行收尾工作,通常情况下finally有没有发生异常都会执行,但是当jvm退出时,不执行finally语句。
exception是所有异常的父类。
getMessage:返回异常的描述信息。
3异常分类
异常的分类
Throwable类是java语言中所有Error或Exception的父类,只有当对象是此类的实例时,才能通过java虚拟机或者java throw语句抛出。
Error类表示错误类,Error类表示错误类,Error类表示错误类,Error类表示错误类,
Exception 类表示异常类,可以通过java 异常处理机制处理。
Error 类表示错误类。仅靠程序本身无法恢复的严重错误。jvm内存耗尽、jvm崩溃等。
Exception 根据是否处理分为两种情况。
RuntimeException:运行时异常。不要求程序必须做出处理。是所有运行时异常的父类。
(CheckedException):检查时异常。要求程序必须处理,不处理编译不通过。
常见的运行时异常
ArithmeticException:数学计算异常。比如除数为0
InputMismatchException:输入不匹配异常
ArrayIndexOutofBoundsException:数组下标越界异常。
NullPointException:空指针异常,对象没有初始化就使用时,jvm会抛出该异常
IllegalArgumentException:非法参数异常。
ClassCastException:强制类型转换异常。
NumberFormatException:数字格式化异常。比如把“abc”格式化成数字。
常见的检查时异常:
ClassNotFoundException:类没有被发现异常。
SQLException:数据库相关异常
IOException:IO操作异常
ParseException:解析错误异常
FileNotFoundException:文件未发现异常。
运行时异常和检查时异常的区别
运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们作出处理,比如InputMismatchException、ArithmeticException、NullPointerException等。即使没有使用try-catch或throws进行处理,仍旧可以进行编译和运行。如果运行时发生异常,会输出异常的堆栈信息并中止程序执行。
Checked异常(非运行时异常):除了运行时异常外的其他异常类都是Checked异常。程序必须捕获或者声明抛出这种异常,否则出现编译错误,无法通过编译。处理方式包括两种:通过try-catch捕获异常,通过throws声明抛出异常从而交给上一级调用方法处理
4异常的声明
声明异常的关键字
throws关键字
当一个方法存在异常而本身无法处理是可以用throws声明并抛出异常。
如果调用者也无法处理,可以选择继续申明异常,简称异常上抛。
声明异常和重载的关系
声明异常和重载没有任何关系。
方法的重载
1方法名相同,
2参数列表不同(顺序 类型 个数),
3和返回值 修饰符 声明异常无关。
声明异常和方法重写有关系
父类声明异常子类可以不声明任何异常。
可以理解为:父类方法抛出异常,子类在重写过程中把该异常处理掉了,所以子类方法不用声明异常。
[2] 父类方法声明没有声明任何异常(检测时或运行时),子类也不声明异常或者声明运行时异常。
3父类声明的异常,子类可以声明完全一样的异常。
5手动抛出异常
手动抛出异常的关键字
throw关键字
自定义异常
如果开发者需要手动抛出的异常在系统不存在,可以自定义异常。
如果要自定义异常,首先要确定异常类型,如果异常是运行时异常,必须继承RuntimeException或其子类;如果异常是检查时异常,必须继承Exception或其子类。
异常的命名方式,参考系统命名方式,以Exception结尾。