《Java从入门到放弃》JavaSE入门篇:异常

本文深入浅出地介绍了Java中的异常处理机制,包括错误与异常的区别、异常处理的重要性、异常的种类以及如何通过try-catch-finally和throw-throws等方式来处理异常。

异常!!!看看生活中的异常例子:

wKiom1m4oQqxKdrbAAFGwKziKVg319.png

wKioL1m4oOLjWr47AAFsu0bBQpY688.png

正常情况下,从家到公司上班,只需要20分钟!但如果在路上碰到堵车或修路或车突然自燃等问题,那就没办法正常去上班了。其中堵车或修路或车突然自燃等问题就属于异常。

wKiom1m4o5-z165XAAF7me8U_-I750.png

碰到异常,就需要处理,不然就只能中断上班了。


在Java程序中的异常表示什么意思呢?

Java中的错误分为两类:错误(Error)和异常(Exception)

错误一般都是在编译前IDE就能发现并提示,例如非要给整型变量赋一个超大的数值:

wKiom1m4pVzyXurKAAAobEQWUQQ110.png

 

这就是一个典型的Error。

 

程序在运行时出现的问题,就叫异常!!!如果在编程时不考虑到对这些异常的处理,当出现异常时,程序就会停止。例如下面示例中的除0错误:

1
2
3
4
5
6
7
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("请输入整数:");
    int i = input.nextInt();
    int sum = 10/i;
    System.out.println(sum);
}

这段代码在编译时是没有任何问题的,但在运行时输入0就会提示有异常:

wKioL1m4pwuidY2IAAA-PgWQvnA448.png

 

出现错误很好解决,在编码环节改正确就OK了,但有的时候是否出现异常就不是开发者能控制的(如上例),所以开发者只能预判哪些地方有可能出现异常,提前做好处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.print("请输入整数(不能输入0):");
    int i = input.nextInt();
    int sum = 0;
    try {
        sum = 10/i;
    catch (Exception e) {
        // TODO: handle exception
        System.out.println("不能输入0,不能输入0,不能输入0!!!听不懂国语么!!!");
    }
     
    System.out.println(sum);
}

结果:

wKioL1m4p7rjSZnpAAAnjFGsyE4083.png

 

可以发现结果中不再出现异常的信息,而且换成了我们自己的提示信息。

 

就跟下面两个图的区别一下,如果异常直接出现在用户面前,用户很有可能就再也不用你的程序了,而如果给个提示,则用户有可能会继续使用。

 

wKiom1m4qLjC22vWAAB1TJVypJM826.jpg    wKiom1m4qLmAIaj9AACVLI00dqo347.jpg


 

异常的概念就介绍完毕啦!!!j_0019.gif,接下来看看Java中是如何处理异常的。

Java中的常见异常如下图:

wKiom1m4qWfRiMv7AADDxzkspek720.png

当然,这只列出了一部分,还有很多的异常已比较常见,当大家碰到时最好查一下JDK。

 

Java中异常的三种处理方式:

  1. try-catch-finally

  2. throw和throws

 

一、try-catch-finally

    try部分是必须的,用来捕获异常,一般把有可能出现异常的代码放入其中。

    catch部分可以有零到多个,是用来判断异常类别并进行处理,一般把异常处理代码放入其中。

    finally部分可选,无论是否有异常都必须执行的代码放入其中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int firstNum = 12
int secondNum = 0;
try {
    int result = firstNum/secondNum;
    System.out.println("两个数字相除的结果是:"+result)       
}catch(ArithmeticException e) {
    System.out.println("算术异常:");
}catch(NumberFormatException e) {
    System.out.println("数字转换异常");
}catch(ArrayIndexOutOfBoundsException e){
    System.out.println("数组下标越界异常");
}catch(Exception e) {
    System.out.println("其他异常");
}
finally{
    System.out.println("我是必须要执行滴,快叫爸爸!");
}

 

二、thorw和throws

    这个关键字的作用是抛出异常,它不处理。

    我叫小明给我带份红烧肉,小明去食堂发现没有红烧肉(这就相当于异常出现了),他不知道如何处理,就回到寝室告诉我没有红烧肉,然后我再来处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class XiaoMing {
    //买食物的方法
    public void buyFood(String food) throws Exception{
        //用一个集合表示食堂的所有菜
        List<String> foods = new ArrayList<String>();
        foods.add("青椒鸡蛋");
        foods.add("青椒肉丝");
        foods.add("红烧排骨");
        foods.add("土豆欢声");
        //表示是否有该食物的状态
        int state = 0;   //默认没有 0.没有该食物 1.有该食物
        for (String string : foods) {
            if(food.equals(string)){
                state = 1;
                break;
            }
        }
         
        if(state==0){
              throw new Exception("你要吃的菜没有了!");
        }
    }
}

编写测试代码:

wKiom1m4rbCBvCWJAAAd58WvCrY080.png

    不瞎的朋友应该发现有什么问题了吧?

    是的,因为buyFood()方法后面我们加了throws Exception,所以在调用时IDE就认为这儿极有可能会有异常,我们就必须处理它,还是两种方式,要么使用try-catch,要么在main方法后继续抛异常(throws Exception)。

wKiom1m4rkGC5Sc7AAA2sY4YOqQ796.png

在Java中,除了使用JDK中定义好的异常外,我们还可以自定义异常,这个很简单,定义一个类,继承Exception类,重写一个参数的构造方法就OK了。


 

好吧,异常到这儿就够用了,需要深入了解的朋友,请自行百度吧,哈哈!j_0028.gif

 

“软件思维”博客地址:51CTO博客园,感兴趣的小伙伴可以去看相关的其它博文。  

 

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值