内部类以及接口

 静态内部类

 

 

静态内部类

如果一个内部类被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结尾。

原文地址:https://www.cnblogs.com/gflb/p/10776215.html