写点什么

太简单了!这套 java 内部类和异常的总结,只学了 2 个小时就学会了

发布于: 2021 年 04 月 29 日
太简单了!这套java内部类和异常的总结,只学了2个小时就学会了

该文章是分享关于 Java 内部类和异常方面的知识,是我在学习过程中的笔记以及总结,示例+代码为大家送上。

下面开始我们今天的分享:

内部类和异常

内部类

在一个类的内部定义的一个类,例如,A 类中定义了一个 B 类,则 B 类相对于 A 类就是内部类,而 A 类相对于 B 类就是外部类

  1. 成员内部类

  2. 静态内部类

  3. 局部内部类

  4. 匿名内部类

成员内部类

public class outer {

private int ID;

public void out(){

System.out.println("外部类方法");

}

public class inner{

public void in(){

System.out.println("内部类方法");

}

public void getId(){

System.out.println(ID); //内部类可以获得外部类的私有属性,但是外部类使用内部类要借助内部类的对象

}

}

}

这就是一个类中定义一个内部类,可以通过实例化这个外部类来实例化内部类

outer o = new outer();

outer.inner o2 = o.new inner();

o2.in();

o2.getId();

静态内部类

上述 inner 类的定义中直接改为 public static inner 即为静态内部类,静态内部类无法访问外部非静态属性(static 会先加载)一个 java 类中可以有多个 class 类,但是这个 public class 之外不能再写 public class

public void method(){

class inner1{

//局部内部类

public void in(){

}

}

}

匿名内部类(甚至匿名内部接口)

public class internalClass {

public static void main(String[] args) {

outer o = new outer();

outer.inner o2 = o.new inner();

o2.in();

new Apple().show();

UserService use = new UserService(){

@Override

public void hello(){

System.out.println("hello");

}

};

}

}

class Apple{

public void show(){

System.out.println("1");

}

}

interface UserService{

void hello();

}

这些都是非常见的用法,记录下来,这样用方便在于可以直接调用匿名内部类的方法

异常

异常和中断等具体将会写在”操作系统部分“

一般需要掌握以下三种类型的异常:

  • 检查型异常:最具代表性的是用户错误或问题引起的异常,例如打开一个不存在的文件等

  • 运行时异常:该类异常可能会在编译时被忽略

  • 错误 ERROR:错误不是异常,是脱离程序员控制的问题,例如:栈溢出等等

java.lang.Throwable 为所有异常的超类

异常总的分为两大类:错误 Error 和异常 Exception

Error 类对象由 JVM 生成并抛出,大多数错误与代码编写者执行的操作无关。当运行错误时,JVM 不再有继续操作所需要的内存资源,将会发生 OutOfMemoryError,这些异常发生时,JVM 一般会选择终止线程;

Error 是程序无法控制和处理的,而 Exception 通常情况下是可以被程序处理的

捕获和抛出异常

简单地说,异常总是先被抛出,后被捕捉的。

异常处理 5 个关键字:try, catch, finally, throw, throws

int a = 1;

int b = 0;

//try 监控区域

try{

System.out.println(a/b);

}catch (ArithmeticException e ){ //捕获异常,若栈溢出的话,该类异常捕获不到,类型不同

System.out.println("发生异常,变量 b 不能为 0");

}finally { //一般处理善后工作

System.exit(0);

}

//finally 可以不要,但是在 IO 中,有些资源需要关闭,一般可以放在 finally 中处理

以上为捕获异常的一个例子,若 ArithmeticException e 改为 Throwable e,则均可被捕获。可写多个 catch,相当于多个 if 进行判断,catch 中所写的异常类型要从小到大来捕获,否则会报错

选中 sout(a/b); IDEA 中 ctrl+alt+T 可自动补写 try catch finally 等

try {

System.out.println(a/b);

} catch (Exception e) {

e.printStackTrace(); //打印错误的栈信息

} finally {

}

以上为 IDEA 自动补写部分

主动抛出异常,用到 throw,一般在方法中使用

public static void main(String[] args) {

int a = 1;

int b = 0;

new exceptiondemo2().test(1,0);

}

public void test(int a,int b){

if(b==0){

throw new ArithmeticException();

}

}

方法上主动抛出异常,则用 throws

public void test(int a,int b)throws ArithmeticException{

}

自定义异常类可写一个类继承于 Exception,可重写打印信息方法.toString

public void doA(int a) throws Exception1,Exception3{......}

throws E1,E2,E3 只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常 E1,E2,E3 可能是该方法产生的。throws 只是告知该方法可能会产生的异常,而 throw 则会在具体语句抛出异常

void doA(int a) throws Exception1,Exception2,Exception3{

try{

......

}catch(Exception1 e){

throw e;

}catch(Exception2 e){

System.out.println("出错了!");

}

if(a!=b)

throw new Exception3("自定义异常");

}

该段共可能出现 3 种异常,E1 出现时,先 catch 后 throw,而 E2 出现时只进行了捕获,后续没有抛出 E2,if 为自定义的判断。

throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行 throw 则一定抛出了某种异常。

以上仅为内部类和异常的知识总结。

  • 以上就是今天 Java 内部类和异常的知识分享,感谢大家观看,也欢迎大家交流探讨,该文章若有不正确的地方,希望大家多多包涵。

  • 若内容对小伙伴有帮助,帮忙点个赞支持一下哦~~~ 你们的支持就是我创作的动力~~~

用户头像

还未添加个人签名 2021.04.26 加入

还未添加个人简介

评论

发布
暂无评论
太简单了!这套java内部类和异常的总结,只学了2个小时就学会了