java 内部类_java基础学习:内部类、异常处理

e5dafff96cfc01bda85482ce6489de8b.png

内部类

在java中,一个文件可以定义多个类,文件名必须和public 类型的类的类名保持一致。这两个类是平行关系。

在java中,一个类也可以定义在一个类的内部,定义在内部的类称为内部类(inner class),定义在外部的类称为外部类(out class).

public 

编译后的结果

39a4b266a10bc591ae3363daf432dec8.png

内部类根据具体的修饰符和具体位置分为很多情况。

一、成员内部类

一个内部类作为一个外部类的成员而存在,此时该内部类称为外部类的成员内部类

public 

一般而言,内部类都用默认修饰符。

[1]内部类如何创建对象

public 

[2] 内部类中可以访问外部类的私有变量

public 

特殊情况:外部类和内部类的变量同名

public 

二、静态内部类

如果一个内部类被static修饰,我们成为这个内部类为静态内部类。形式

package 

[1] 静态内部类创建对象

public 

[2] 静态内部类可以直接访问外部类的(私有)静态成员

public 

特殊情况:避免发生

public 

三、方法内部类

如果一个内部类定义到一个方法中,成为方法内部类。

public 

[2] 方法的局部变量进入方法内部类时,被加final修饰。出了方法内部类后,final被去掉。

public 

四、匿名内部类

未来一个类如果只使用一次,我们可以把类声明为匿名类。匿名类一般和内部类结合使用,形成匿名内部类。

匿名内部类一定要存在:实现接口

package 

异常处理

一、 传统处理异常的方式

public 

缺点:

[1] 通过判断影响执行效率。

[2] 判断逻辑和业务逻辑交织在一起,可维护性很差。

二、异常

异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序。

异常处理机制:java中通过异常处理机制为程序提供异常处理的能力,保持程序继续运行而不中断!

59b9ee4b1f82ea548c7598df47eef677.png

三、异常处理

涉及异常处理的关键字有try…catch/try…catch…finally

1.try/catch

把有可能产生异常的代码放到try代码块中,catch代码块负责捕获并处理异常。

[1]正常执行,没出现任何异常

09c9761d226620fe39b6ab5b4e04d31b.png

[2]出现异常,异常处理,正常结束

4c843698e23f33470be454944b276a8e.png

Exception是所有异常类的直接或者间接父类。

异常常见方法

printStackTrace:打印异常的执行堆栈信息

java

一般而言,异常堆栈信息很多,开发者只需要看懂

第一行:异常简单信息(异常类型,异常的描述等)

最后一行:异常出现的位置(类->方法->方法具体的行)

在控制台中异常堆栈信息输出位置不固定

getMessage:返回异常的描述信息

package 

[3]异常类型不匹配

549c8f79e3d03d59495c2e49dc21334f.png

[4] 多重catch

public 

2.try/catch/finally

把有可能产生异常的代码放到try中,catch负责匹配并处理异常,finally块用于进行收尾工作(关闭数据库、关闭文件、释放内存等资源)

不管是否发生异常,finally都执行。

public 

finally 总是执行,常用进行收尾类工作。

特殊情况

[1] finally不执行的情况。System.exit(0) 正常退出jvm,finally不会执行。

[2]catch可以省略,变成try…finally块。

3.return

存在return的try/catch/finally执行顺序

package 

四、异常的分类

68afc0edc2fe75e896ab2770843ec0d5.png

Throwable 类是 Java 语言中所有错误(Error)或异常(Exception)的父类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。
Error 类表示错误类。仅靠程序本身无法恢复的严重错误。jvm内存耗尽、jvm崩溃等。
Exception 类表示异常类,可以通过java 异常处理机制处理。
Exception 根据是否处理分为两种情况。
RuntimeException:运行时异常。不要求程序必须做出处理。是所有运行时异常的父类。
CheckedException:检查时异常。要求程序必须处理,不处理编译不通过。

public 

常见的运行时异常

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声明抛出异常从而交给上一级调用方法处理

五、声明异常

1.throws关键字

当一个方法可能存在异常,而此时自身又无法更好的处理,可以交给外界处理。此时用throws声明并抛出异常

public 

开发者可以根据需要声明检查时异常(Exception或者非运行时异常)和运行时异常(RuntimeException或其子类)

如果调用处也不知道如何处理异常,可选择继续声明异常,我们把这个过程称为异常上抛。

public 

2.声明异常和重载的关系

声明异常和重载没有任何关系

public 

方法重载

[1]方法名相同
[2]参数列表不同(个数、类型、顺序)

[3]和返回值、修饰符、声明异常无关。

3. 声明异常和重写的关系

声明异常和方法重写有关系。

[1]父类方法声明了异常(检测时或运行时),子类可以不声明任何异常。

public 

可以认为:父类方法抛出异常,子类在重写过程中把该异常处理掉了,所以子类方法不用声明异常。

public 

[2] 父类方法声明没有声明任何异常(检测时或运行时),子类也不声明异常或者只声明运行时异常,不能声明检查时异常。

public 
public 

[3] 父类声明了异常(检测时或运行时),子类声明完全一样的异常。

public 
public 

六、收到抛出异常

1.throw

除了系统自动抛出异常外,有些问题需要开发者手动抛出异常。使用关键字throw

package 

测试:

public 

2.自定义异常

如果开发者需要手动抛出的异常在系统不存在,可以自定义异常。

如果要自定义异常,首先要确定异常类型,如果异常是运行时异常,必须继承RuntimeException或其子类;如果异常是检查时异常,必须继承Exception或其子类。

异常的命名方式,参考系统命名方式,以Exception结尾。

public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值