当前位置: 首页 / 技术干货 / 正文
健哥带你手把手解决Java常见Bug

2023-03-02

   代码 bug

  1. 前言

  刚开始学习Java语言的小伙伴, 很可能被各种各样的程序bug搞得焦头烂额, 甚至劝退.健哥将手把手带你们了解Java中的异常体系, 如何识别Bug以及如何解决Bug.

  2. Java语言中异常的分类

  让我们先来了解下Java中的异常分类, 如下图:

01

  Java中的异常分为Error错误和Exception异常两大类

  Error错误: 一般所有编译时期的错误或者系统错误, 都来自于虚拟机自身. 错误无法处理.

  Exception异常: 它规定程序本身可以处理的异常, 是指程序本身有问题, 异常可以处理.

  编译期异常: 一般集成开发工具比如IDEA工具, Eclipse工具等都有语法提示功能. 编译期异常这些工具都有明显的提示, 根据提示修改即可.

  RuntimeException运行时异常: 运行时异常, 其中一部分比如IO异常等是可以通过try...catch手动抛出, 或者通过throws等Java语法处理掉. 而有些是程序运行中意外发成的, 这些异常也就是bug. 下面主要研究的就是bug如何处理.

  3. 解决Bug整体思路

  程序出Bug的时候, 我们最直接的感受是, 程序报错了.

  初学者这个时候就很慌, 哪里出问题了呢? 我该如何下手呢? 然后直接用眼睛一遍一遍的看代码, 想看出问题.

  这些都是错误的做法!!!

  如果是几百行, 上千行代码, 将很难用眼睛看出问题.

  所以解决Bug的整体思路是:

  1.找到程序代码异常出现在第几行, 也就是哪一行代码的问题, 导致的Bug.

  2.找到问题后, 修改就方便了. 其实改Bug主要是不容易找到Bug在哪里.

  4. 发现解决Bug利器 - 日志

  看错误日志, 虽然都是英文的, 可能有些小伙伴看不懂, 但是建议通读一遍, 看看是否有提示错误出现在第几行, 很多简单的问题, 日志上已经指定了哪个类, 第几行的错误.

  下面大家看例子:

  /**

  * @author 健哥

  */

  public class TestA {

  int a = 1;

  int b = 1;

  public String sum() {

  String total = "结果是:" + (a + b);

  return total;

  }

  public static void main(String[] args) {

  TestA a = new TestA();

  int total = Integer.parseInt(a.sum());

  System.out.println("=======" + total);

  }

  }

  运行结果如下:

02

  这样大家就可以清楚的看到, 错误日志中已经明显的告诉我们, 问题出在TestA.java这个类的第20行代码上, 我的第20行代码是:

  int total = Integer.parseInt(a.sum());

  原因是他的返回值是字符串并且包含中文, 我们强制转换类型为Integer, 结果抛出了类型转换异常.

  5. 发现解决Bug利器 - Debug调试工具使用

  不管是IDEA集成开发工具, 还是Eclipse开发工具都自带调试Bug的利器, Debug工具.

  但是初学者不会用, 下面健哥带大家学习Debug工具的使用.

  首先就是需要给代码打断点, 断点的作用是决定代码执行到哪一行暂停下来, 好让我们详细看看执行情况. 而初学者恰恰不会打断点, 搞得很晕, 所以健哥给大家的建议就是初学者, 可以在代码入口的第一行打断点.

  断点使用规则:

  断点不可以打在接口上, 只能使用在类上,

  断点不可以打在方法定义行上

  断点不可以打在空行, 注释行

  断点不可以打在全局变量上

  下面标注的都是不可以打断点的位置:

06

  main方法是程序的入口, 断点可以打在它下面的第一行上, 如下图:

03

  运行main方法, 执行代码, 会自动进入到断点行, 暂停下来, 接下来可以点击下图所示按钮, 让代码一行一行执行. 每点击一次代码执行一行, 这样在哪一行报错, 就清晰可见了. 方便Bug定位.

04

  在Variables标签中还可以看到执行后的变量以及对象的值是多少, 每执行一行代码的时候, 看着代码脑子里想它的结果运行完这一行是多少, 再看下面监测的数值, 是否匹配, 是否满足预期, 如果不满足, 是自己想错了, 还是代码执行错了. 这样就知道代码执行的原因了.

05

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号