Java Web简明教程–Java篇[5]–大王,有异常!

简介: Java Web简明教程–Java篇[5]–大王,有异常!

异常处理,是非常非常非常非常重要的!尤其是实际投产的项目中,几乎很难做到完全没有错误(除非你的项目规模较小,或者测试团队很牛X)。


说到这,猫哥讲点题外话。猫哥曾经参与过一个项目,因为项目中用了几个新人,当时猫哥也是新人之一。这个项目投产一段时间之后,发现会丢数据,就是本来应该是有1000笔业务发生吧,实际上可能系统只记录了998笔。第一次有用户提出这个问题,我们就把各自的代码review了一遍,么有发现问题。大家都是新手,能实现就不错了,而且程序员总感觉自己的代码绝对OK,自我感觉良好。后来又丢了几次数据,管项目的老大直觉:有事了!于是连夜召集项目组所有人员,我记得大概10几个人。最后发现某新手未处理数据库的一种异常,结果一大群人加了一晚上修改原始数据,修改完了怕有问题又想了N种方法验证数据正确。当然,能补救回来真的是要谢天谢地了。


所以说,异常处理,真的很重要。现在从一个简单的例子开始介绍之:


import java.util.Scanner;//导入用于获取控制台输入的类Scanner
public class ExceptionDemo {//异常演示的例子
  public static void main(String[] args) {
  while(true){
    //使用无限循环模拟永远在线等待指令的场景
    Scanner sc = new Scanner(System.in);
    System.out.println("大王,我们刑部这次要除掉哪个奸臣:");
    String command = sc.nextLine();//模拟获取大王指令
    int army=100;//总兵力
    int commandInt=Integer.parseInt(command);//理解大王旨意,刑部比较傻,只能理解数字
    int result=army/commandInt;
    System.out.println("大王,搞定,我们除掉【"+commandInt+"】了!");//模拟响应用户指令
  }
  }
}



好的,这个程序运行结果:


大王,我们刑部这次要除掉哪个奸臣:
1
大王,搞定,我们除掉【1】了!
大王,我们刑部这次要除掉哪个奸臣:
2
大王,搞定,我们除掉【2】了!
大王,我们刑部这次要除掉哪个奸臣:


可见效果非常良好,大王的指令在刑部可以立即得到执行,但是如果理解不了大王的意思呢(程序中运行到理解大王旨意的地方有错误)

比如这样到输入输出:


大王,这次要除掉哪个奸臣:
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at ExceptionDemo.main(ExceptionDemo.java:12)

直接嗝屁了,大王下了一个指令0,其实大王的意思是这次不除人,然后刑部想去除掉【0】这个人,然后整个完蛋,大王哭了。


至于嘛!哪怕做不到,你得继续把能做到的完成,然后做不到的给大王汇报下不就完了,直接嗝屁算干嘛的


那怎么办呢,在比较古老的语言里,大家可能会想到这样:


import java.util.Scanner;//导入用于获取控制台输入的类Scanner
public class ExceptionDemo {//异常演示的例子
  public static void main(String[] args) {
  while(true){
    //使用无限循环模拟永远在线等待指令的场景
    Scanner sc = new Scanner(System.in);
    System.out.println("大王,我们刑部这次要除掉哪个奸臣:");
    String command = sc.nextLine();//模拟获取大王指令
    int army=100;//总兵力
    int commandInt=Integer.parseInt(command);//理解大王旨意,军机处比较傻,只能理解数字
    if(commandInt==0)
    {
    System.out.println("大王,这个我们不行,该怎么办呢,这个家伙是:"+commandInt);
    continue;
    }
    int result=army/commandInt;
    System.out.println("大王,搞定,我们除掉【"+commandInt+"】了!");//模拟响应用户指令
  }
  }
}

输入输出为:


大王,我们刑部这次要除掉哪个奸臣:
0
大王,这个我们不行,该怎么办呢,这个家伙是:0
大王,我们刑部这次要除掉哪个奸臣:


这样的代码,好像挺好的,没问题。其实问题很大,首先就是太低级,你去算个除法也就算了,毕竟是你的任务,你遇到个除数是0,就得请大王帮你拿捏下,你这个也太低级了吧。Java作为一门牛X的高级语言,这样处理问题,着实不妥。如果大王跟你说“张三”咋办?


所以Java设计了try{}catch(){}finally{}的异常捕捉机制。try{}里面放置可能产生错误的代码,catch(){}小括号匹配错误种类,{}处理异常,finally{}是不管有没有错误发生,最后要跟大王汇报下。


OK,所以该问题可以如此处理。


import java.util.Scanner;//导入用于获取控制台输入的类Scanner
public class ExceptionDemo {//异常演示的例子
  public static void main(String[] args) {
  while(true){
    //使用无限循环模拟永远在线等待指令的场景
    Scanner sc = new Scanner(System.in);
    System.out.println("大王,我们刑部这次要除掉哪个奸臣:");
    String command = sc.nextLine();//模拟获取大王指令
    int army=100;//总兵力
    try{//可能有错误的语句放在try里面
    int commandInt=Integer.parseInt(command);//理解大王旨意,军机处比较傻,只能理解数字
    int result=army/commandInt;
    System.out.println("大王,搞定,我们除掉【"+commandInt+"】了!");//模拟响应用户指令
    }catch(Exception ex){
    System.out.println("大王,我们遇到问题了:"+ex.getMessage());
    }finally{
    System.out.println("大王,之前"+command+"事情都过去了,您看还有需要什么要指示的吗?");
    }   
  }
  }
}
大王,我们刑部这次要除掉哪个奸臣:
0
大王,我们遇到问题了:/ by zero
大王,之前0事情都过去了,您看还有需要什么要指示的吗?
大王,我们刑部这次要除掉哪个奸臣:
1
大王,搞定,我们除掉【1】了!
大王,之前1事情都过去了,您看还有需要什么要指示的吗?
大王,我们刑部这次要除掉哪个奸臣:


这样一来,大王肯定对刑部的办事态度满意多了:


所以,Java异常机制的设计,十分符合一个有责任的人的办事方式,永远等待指令,不能执行的,请示决策者帮助,不管做没做完,都要反馈给决策者。OK,当然,好的决策者应该是具体问题具体分析,解决具体的困难,至于如何解决,且听下回分解。

相关文章
|
6月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
676 116
|
6月前
|
Oracle Java 关系型数据库
Java 简单教程
Java是跨平台、面向对象的编程语言,广泛用于企业开发、Android应用等。本教程涵盖环境搭建、基础语法、流程控制、面向对象、集合与异常处理,助你快速入门并编写简单程序,为进一步深入学习打下坚实基础。
455 0
|
7月前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
441 10
|
7月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
784 0
|
7月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
663 1
|
8月前
|
Java 关系型数据库 数据库
Java 项目实战教程从基础到进阶实战案例分析详解
本文介绍了多个Java项目实战案例,涵盖企业级管理系统、电商平台、在线书店及新手小项目,结合Spring Boot、Spring Cloud、MyBatis等主流技术,通过实际应用场景帮助开发者掌握Java项目开发的核心技能,适合从基础到进阶的学习与实践。
1128 4
|
8月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
528 1
|
8月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
869 64
|
9月前
|
缓存 NoSQL Java
Java Web 从入门到精通之苍穹外卖项目实战技巧
本项目为JavaWeb综合实战案例——苍穹外卖系统,涵盖Spring Boot 3、Spring Cloud Alibaba、Vue 3等主流技术栈,涉及用户认证、订单处理、Redis缓存、分布式事务、系统监控及Docker部署等核心功能,助你掌握企业级项目开发全流程。
903 0
|
9月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
725 0