16.程序设计的三大错误,异常类和断言
文章目录
- 1.程序设计的三大错误
- 1.1.语法错误
- 1.2.逻辑错误
- 1.3.运行错误
- 2.异常处理和断言
- 2.1.try-catch语句处理异常
- 2.断言
- 2.1 断言的定义
- 2.2 如何使用断言
1.程序设计的三大错误
1.1.语法错误
最低级错误,由编译器发现。这个错误就是你错误使用Java语法导致的编译失败,这类错误一般在集成开发工具中编写代码的时候会有工具警告。
例如:
在编程中将String类型的数据赋值给int类型的变量,这明显是语法错误,所有开发工具给出了警告。
在使用集成开发工具进行编程的过程中,语法错误基本不会发生。
1.2.逻辑错误
程序没有按照预期的方案执行。逻辑错误也称为小虫子(bugs)其查找和改正错误的过程称为调试(debugging)。处理方法一般为缩小范围法。
根据具体的业务场景来定位具体的业务组件,然后一步一步的进行断点调试,最后定位问题所在。
这类错误的发生条件基于没有语法错误的情况下,程序运行过程中出现了与预期结果不符的情况,这时这个情况的错误我们就称之为逻辑错误,这类错误是比较难处理的,它需要我们对业务有一定的熟悉度才能进行正确的解决。
例如:我们需要写一个程序用来两数之和,我们采用这种实现
public byte add(byte a,byte b){return (byte) (a+b);
}
刚开始,我们可能觉得没啥问题,但是,如果我们这样使用:
public static void main(String[] args) {LogicError logicError = new LogicError();byte b=100;byte c=100;System.out.println("100+100= "+logicError.add(b,c));
}
我们会发现,最后的结果和预期不一样:
这就是很明显的逻辑错误了,我们用byte数据类型计算超过其运算范围的加法,就会出现得到的结果和预期的不一致的情况。
这时候我们就可以修改程序来进行bug修复:
/*** 逻辑错误*/
public class LogicError {public int add(int a,int b){return a+b;}public static void main(String[] args) {LogicError logicError = new LogicError();byte b=100;byte c=100;System.out.println("100+100= "+logicError.add(b,c));}
}
1.3.运行错误
如果环境发现了一个不可能执行的错误,就会出现。其处理方法就是异常和断言。
这类错误就是,程序在运行中出现了错误导致程序异常中断,一般这样的错误最常见的是空指针异常,数据越界,错误类型转换等等。
例如:
/*** 运行错误*/
public class RunError {public int add(Integer a,Integer b){return a+b;}public static void main(String[] args) {RunError logicError = new RunError();System.out.println("100+100= "+logicError.add(null,100));}
}
2.异常处理和断言
2.1.try-catch语句处理异常
Java使用try-catch语句来处理运行错误,就是将可能出现异常的操作语句放在try部分,一旦try部分抛出异常(即在try里的某条语句发生了运行错误),那么try部分将立即结束,转向执行异常处理器catch部分处理错误,try-catch语句可以由几个catch组成,分别处理发送的相应异常,例如:
try{包含的可能发送异常的语句}catch(ExceptionSubClass1 e){发生了ExceptionSubClass1异常后执行的语句....}catch(ExceptionSubClass2 e){发生了ExceptionSubClass2异常后执行的语句....}
举个例子:
假如你是一个中学生,你想要偷偷去网吧上网,但你又还怕被逮到,可是你又很聪明,你想到了几种办法来应对,方法一:当你被老师抓到时,你会乖乖向老师认错,并求他不要告诉你父母。方法二:当你被父母抓到,你会转头就跑回家,疯狂做家务。在这个例子中,你去上网这个过程中可能不会出错,一切平安,也可能会出现错误,你为了处理可能出现的错误,于是你想出了几个办法。try-catch就是用来装这些的:
try{你去上网;}catch(被老师抓住){乖乖认错;}catch(被父母抓住){跑回家做家务;}
示例:
public class TryCatchStudy {public static void main(String[] args) {try{int i=0/0;}catch (Exception e){e.printStackTrace();System.out.println("发生了异常哦!!");}}
}
2.断言
在一个具有自我保护能力的程序中,断言非常常用。
2.1 断言的定义
Java中提供了一种机制,让我们能在程序开发阶段尽可能全面的测试程序的稳定性,同时能让我们在开发完成测试完成后不修改代码的基础上**“注释掉测试语句”**,从而不让测试语句影响程序运行效率。 这种机制,就是断言机制。断言机制相比于异常处理,它提供了更为高效的异常处理机制(使我们有选择性的忽略某些检查代码提高运行效率)
2.2 如何使用断言
断言使用assert关键字,assert使用有两种:
//condition是一个判断语句,如果判断语句是false,则会抛出AssertError异常
assert condition;
//其中condition是一个判断语句,如果判断语句是false,则会抛出AssertError异常且把message
//赋给AssertError构造方法进行打印。
assert condition:message;
public class TryCatchStudy {public static void main(String[] args) {//使用断言进行判断,如果不符合判断,则抛出异常AssertErrorassert args != null;int num = 30;try{int i=0/0;}catch (Exception e){e.printStackTrace();System.out.println("发生了异常哦!!");}//使用断言进行判断,如果不符合判断,则抛出异常,且把num的值传给AssertErrorassert num<0:num;}
}
Java基础学习/src/main/java/exa16 · 严家豆/Study - 码云 - 开源中国 (gitee.com)
16.程序设计的三大错误,异常类和断言相关推荐
- 设计自己的异常类——表示对负数求平方根的错误
标题 设计自己的异常类表示对负数求平方根的错误:在类Test的主方法中,从键盘输入一个数,若输入的数不小于0,则输出它的平方根:若小于0,则抛出自定义异常:在程序中处理异常并输出提示信息"输 ...
- *1.设计一个异常类表示对负数求平方根的错误,在类Test的main方法中,* 从键盘中输入一个数字,若输入的数不小于0,则输出该数的平方根(用Math.sprt());* 若小于0,则抛出自定义
/* *1.设计一个异常类表示对负数求平方根的错误,在类Test的main方法中, * 从键盘中输入一个数字,若输入的数不小于0,则输出该数的平方根(用Math.sprt()): * 若小于0,则抛出 ...
- 异常类练习——设计自己的异常类表示对负数求平方根的错误;
设计自己的异常类表示对负数求平方根的错误: 在类Test的主方法中,从键盘输入一个数,若输入的数不小于0,则输出它的平方根: 若小于0,则抛出自定义异常:在程序中处理异常并输出提示信息"输入 ...
- 第二次预习——java异常类和常用类 容器
文章目录 一.异常类 1.概念 2.异常类分类 2.1分类 2.2Error与Exception的区别 2.3Java中常见运行时异常 3.try-catch语句 3.1用法 3.2语句 3.3实例 ...
- 【Python面试】 列举Python中的标准异常类?
往期面试题: 说说Python变量.函数.类的命名规则? 说说Python可变与不可变数据类型? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 说说Python模块主要分哪三 ...
- JAVA进阶开发之(异常类)
保姆级别的异常类教学(附代码) 目录 1.什么是异常: 2. java语言中异常以什么形式存在的呢? 3.异常对应的现实生活中是怎样的? 4.异常处理机制 5.异常处理的具体方式 6.运行时异常编写程 ...
- php 错误 异常,php中的异常和错误解析
PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查甚至无法运行的情况.PHP异常一般是业务逻辑上出现的不合预期.与正常流程不同的状况,不是语法错误.本文介 ...
- Java异常类复习总结
个人理解先行: 异常类是当在程序出现问题时抛出的一个警告.提示你程序设计或者代码有存在错误的地方. 异常类和Error都继承自Throwable, Throwable继承自Object类. Runti ...
- c++ 标准异常类层次结构_Java入门教程十一(异常处理)
在程序设计和运行的过程中,发生错误是不可避免的.尽管 Java 语言的设计从根本上提供了便于写出整洁.安全代码的方法,并且程序员也尽量地减少错误的产生,但是使程序被迫停止的错误的存在仍然不可避免.为此 ...
最新文章
- linux PCB数组,Linux中的系统IO函数
- PHP实现简单顺序栈
- Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)
- Oracle数据类型Long需要注意的问题
- 大厂测试开发常见面试题收集(python,java,性能等)
- Java黑皮书课后题第3章:*3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧、右侧,或者在该线段上
- VS VC 读取 INI文件
- cocos2d-x android 环境搭配,cocos2d-x Android环境配置问题和解决方法
- 设计模式-Builder和Factory模式区别
- java开发框架_Java-程序员感悟-开发人员喜欢的框架之Spring
- Java基础01 1个和2个区别比较
- 使用 ConnectionStringBuilder 对象创建精确连接字符串
- 【软件使用技巧】PL/SQL Developer实现双击table询
- IDL代码实现湖泊水体范围遥感提取
- k8s之常用操作命令
- 详说ArcGIS之重采样技术图文解析
- css特效之水滴效果
- Python小项目-烤地瓜
- mysql筛选两个不同表的数据
- 【Matlab】牛顿迭代法实现