尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

直播软件源码,聊聊Java的异常机制问题 - 云豹科技

直播软件源码,聊聊Java的异常机制问题 - 云豹科技
📅 发布时间:2026/6/19 17:09:13

直播软件源码,聊聊Java的异常机制问题
java异常指在程序运行时可能出现的一些错误,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,中断了正在执行的程序的正常指令流。

Java通过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的错误条件。当条件生成时,错误将引发异常。对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。

异常体系分类

Q: Throwable 和 Error的关系
A: Throwable是Error(错误)的基类,也是Exception的基类
1个好图,可看到常见的异常和error

image

 

Q: Error和Exception的关系
A:

Error一般是会直接引起jvm出错的错误,例如Java虚拟机运行错误等,如果出现了当前线程会无法继续运行。
Excpetion是程序本身可以处理的异常。发生后还能正常运行。
Q: Error可以被catch捕捉吗?
A: 只要是Throwable和其子类都是可以throw和catch的。 但是不建议捕捉Error。

异常体系还可以分为这2类:

unchecked exception(非检查异常)
也称运行时异常(RuntimeException),比如常见的NullPointerException、IndexOutOfBoundsException。对于运行时异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。
checked exception(检查异常,编译异常)
也称非运行时异常(运行时异常以外的异常就是非运行时异常),java编译器强制程序员必须进行捕获处理,比如常见的IOExeption和SQLException。对于非运行时异常如果不进行捕获或者抛出声明处理,编译都不会通过。

异常捕捉和返回

Q: return-finally陷阱1: finally能通过修改变量,来更新return的变量值吗

int f() {int a = 1;try {return a;}finally {a=2;}
}

A: 不能, f返回1。

Q: return-finally陷阱2: finally里也return时,返回哪个?

int f() {try {return 1;}finally {return 2;}
}

A:返回finally里的,返回2。

Q: 什么情况下finally块里的步骤可以不执行?
A: 只有在finally之前调用System.exit(0)退出jvm, 才能让finally不执行。

Q: 下面会发生什么?

try {start();
} catch (Exception ex) {System.out.println("catch Exception");
} catch (RuntimeException re) {System.out.println("catch RuntimeException");
}

A: 直接编译就错误了。 catch是会按顺序的且匹配1个就不再往下匹配,编译器因此识别出RuntimeExcpetion永远不会被捕捉到,便提前报错。

Q:throw异常的时候,在finally中做return,那么异常还会抛出吗?

static int f() {try {int a = 1/0;return a;} catch (Exception e) {throw new RuntimeException(e);} finally {return -1;}
}
public static void main(String[] args) {System.out.println(f());
}

A:不会,返回-1.

即finaly中做return会中断throw
因此永远不要在finally中去做return操作

受检异常相关问题

Q: 子类覆写基类方法时 , 能throws基类方法中不存在的异常吗?
像下面这样:

class A{void f() throws IOException{}
}
class B extends A{void f() throws IOException, SQLException {}
}

A: 不行,直接编译报错。 即子类覆写父类方法时, throws关键字后面跟的异常必须是小于等于父类方法异常的。

image

 

Q: finally中调用某资源的close时,也会抛出受检异常, 除了在finally里做try-catch,还能怎么做?

像下面这样,finally又有catch,就很难看:

TryWithResource tryWithResource = new TryWithResource();try {System.out.println(tryWithResource.age);} catch (Exception e) {e.printStackTrace();}finally {try {tryWithResource.close();} catch (Exception e) {e.printStackTrace();}}

A:如果是JDK1.7,可以用try-with-resource语法。

需要资源类实现AutoCloseable接口, 并在try的时候在try括号后面跟上资源的创建,如下:

 public static void main(String[] args) {try (TryWithResource tryWithResource = new TryWithResource()) {System.out.println(tryWithResource.age);} catch (Exception e) {e.printStackTrace();}}

这样就不需要写finally,finally+close会通过编译器给我们自动加上。

Q: 线程抛出异常的话该怎么捕捉?

A: 实现异常处理接口MyUnchecckedExceptionhandler

public class MyUnchecckedExceptionhandler implements UncaughtExceptionHandler {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println("捕获异常处理方法:" + e);}
}

然后把实现类设置给对应线程。

Thread t = new Thread(new ExceptionThread());
t.setUncaughtExceptionHandler(new MyUnchecckedExceptionhandler());
t.start();

以上就是直播软件源码,聊聊Java的异常机制问题, 更多内容欢迎关注之后的文章

相关新闻

  • 2025 项目管理到底用什么软件?
  • 我就是我不一样的烟火
  • Win11纯净版D盘出现黄色感叹号的问题

最新新闻

  • 洪湖上门回收黄金哪家放心 2026大盘行情与避坑全攻略 - 润富黄金回收
  • 曲靖哪里回收黄金靠谱 2026六月实测三家实体门店无套路 - 润富黄金回收
  • 2026苏州黄金回收门店梯队测评,个人闲置黄金变现优选与避雷完整指南 - 奢侈品交易观察员
  • 2026重庆名表回收榜单|靠谱门店凭什么只剩收的顶稳居榜首? - 奢侈品回收测评
  • C标准数学库深度解析:从hypot与log函数看数值计算工程实践
  • 2026年6月昆明黄金回收行情 哪里回收黄金不被扣损耗 - 润富黄金回收

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号