Day12 Java异常处理与程序调试
什么是异常?
不正常的,会影响程序的正常执行流程。
例如下面的程序
public static void main(String[] args) {
TestDemo1 t = new TestDemo1();
t.a();
System.out.println("其它程序代码");
}
public void a() {
b();
}
public void b() {
int x =;
int y = ;
int z = x / y;
System.out.println("结果是:"+z);
}
Error:错误
JVM自身的错误,程序员不能处理。
Exception:异常
受检异常(非运行时异常)
程序员必须进行异常处理,否则编译通不过
运行时异常
RuntimeException类和它的子类。
程序员可以不做处理。改代码。
也可以处理,处理了程序可以不中断。
异常处理机制
Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw和throws。
try...catch基本语法
可以添加多个catch
public void method() {
try {
//代码段(此处可能会产生异常)
}catch(异常类型 ex) {
//对异常进行处理的代码段
}
//代码段
}
try...catch三种情况
1.没有引发异常,不执行catch块
2.异常类型匹配,可以处理,程序不会中断,执行catch块,其他代码正常执行
3.异常类型不匹配,程序中断,不执行catch块
try...catch...catch...
public void method() {
try {
//代码段(此处可能会产生异常)
}catch(异常类型 ex1) {
//对异常进行处理的代码段
}catch(异常类型 ex2) {
//对异常进行处理的代码段
}
//代码段
}
多重catch块的好处
对不同的异常,进行不同的处理
为了避免漏掉异常,在最后catch块中使用Exception父类。
但是,遵循规则:
1.先子类后父类。
2.先普通后特殊。
try...catch...catch...finally...
保证一些资源释放的代码一定会执行
public void method() {
try {
//代码段(此处可能会产生异常)
}catch(异常类型 ex1) {
//对异常进行处理的代码段
}catch(异常类型 ex2) {
//对异常进行处理的代码段
}finally{
//此代码块一定会执行,无论是否引发异常
System.out.println("此代码块一定会执行");
}
//代码段
}
public class TestException2 { public void showArr() {
Scanner input = new Scanner(System.in);
int [] arr = new int[];
System.out.println("赋值:");
try {
for(int i = ; i < arr.length; i++) {
arr[i] = input.nextInt();
}
Arrays.stream(arr).forEach(System.out::println);
} catch (InputMismatchException e) {
System.out.println("赋值出错了");
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("赋值出错了");
e.printStackTrace();
} catch (Exception e) {
System.out.println("赋值出错了");
e.printStackTrace();
} finally {
input.close();//释放资源
System.out.println("程序运行结束");
}
}
public static void main(String[] args) {
new TestException2().showArr(); } }
throws
声明异常,是把异常抛给了调用者。
调用者处理方式
1.try - catch 建议使用
2.throws
throws 运行时异常:调用者可不做处理。
class Demo{
public void div() throws RuntimeException{
//我不想处理
//处理不了
Scanner input = new Scanner(System.in);
System.out.println("输入数字");
int n1 = input.nextInt();
int n2 = input.nextInt();
int n3 = n1 / n2;
System.out.println(n3);
}
}
public class TestException3 {
// 2.继续 throws 向上抛出 throws Exception
public static void main(String[] args){
Demo demo = new Demo();
//调用者
//(1)处理了 用try - catch
/* try {
demo.div();
} catch (Exception e) {
e.printStackTrace();
}*/
demo.div(); } }
throw
自定义异常
定义类继承自系统异常父类
class AgeException extends Exception{
String str;
AgeException(String str){
// this.str = str;
super(str);
}
@Override
public String getMessage() {
return "Message:年龄必须是 0 - 150";
}
@Override
public String toString() {
return "String:年龄必须是 0 - 150";
}
@Override
public void printStackTrace() {
System.out.println("stack:年龄必须是 0 - 150");
}
}
class Employee{
private int age;
private String sex;//男 和 女 Gender public String getSex() {
return sex;
}
public void setSex(String sex) throws Exception{
if(sex.equals("男") || sex.equals("女")) {
this.sex = sex;
}else {
throw new Exception("性别必须是男 和女");
} }
public int getAge() {
return age;
}
/* public void setAge(int age) throws Exception{
if(age >= 0 && age <= 150) {
this.age = age;
}else {
//抛异常
throw new Exception("年龄必须在 0 - 150之间");
}
}*/
public void setAge(int age) throws AgeException{
if(age >= && age <= ) {
this.age = age;
}else {
//抛异常 运行时异常
throw new AgeException("年龄必须在 0 - 150之间");
}
}
}
public class TestEmployee { public static void main(String[] args) { try {
new Employee().setAge(); } catch (AgeException e) { // e.printStackTrace();
// System.out.println(e);
System.out.println(e.getMessage());
}
} }
异常处理的原则
1.异常用于处理不正常的情况
2.尽量避免用过大的try块
3.尽量用多重catch块,对不同的异常进行不同的处理
4.尽量处理异常,不要避免异常
5.最好在@throws中标出异常类型
Day12 Java异常处理与程序调试的更多相关文章
- 零基础学Python--------第9章 异常处理及程序调试
第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...
- 笔记:Python异常处理与程序调试
Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...
- python:异常处理及程序调试
1.异常概述 在程序运行过程中,经常会遇到各种各样的错误.这些错误统称为“异常”,在这些一场中有的是由于开发者将关键词写错导致,这类错误产生的是SyntaxError.invalid syntax(无 ...
- Java开发工具与程序调试
开发工具:MyEclipse,Eclipse等. 程序调试: (1)断点:设置断点是程序调试中必不可少的手段,Java调试器每次遇到程序断点时都会将当前线程挂起,即暂停当前程序的运行.(在Eclip ...
- [Python学习笔记][第八章Python异常处理结构与程序调试]
1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...
- tomcat+java的web程序持续占cpu高问题调试【转】
转自 tomcat+java的web程序持续占cpu问题调试 - 像风一样的自由 - CSDN博客http://blog.csdn.net/five3/article/details/28416771 ...
- Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序
文章的标题看似自相矛盾,然而我在"正确"二字上打了引号.我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点. 看下面这段程序.方法pleas ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
随机推荐
- anglar JS使用两层ng-repeat嵌套使用,分辨$index
使用ng-init给首层的每个元素赋值一个独立的值. ng-init="outerIndex = $index;" HTML: <div class="catego ...
- 撩课-Web大前端每天5道面试题-Day17
1.apply, call和bind有什么区别? 三者都可以把一个函数应用到其他对象上,注意不是自身对象. apply,call是直接执行函数调用,bind是绑定,执行需要再次调用. apply和ca ...
- align-items (适用于父类容器上)
align-items (适用于父类容器上) 设置或检索弹性盒子元素在侧轴(纵轴)方向上的对齐方式. 语法 align-items: flex-start | flex-end | center | ...
- bootstrap学习笔记(表单)
1.基础表单 :对于基础表单,Bootstrap并未对其做太多的定制性效果设计,仅仅对表单内的fieldset.legend.label标签进行了定制. fieldset { min-width: 0 ...
- 非J2EE部署解决方案
根据交银施罗德真实环境已测试通过,此过程可以作为非J2EE部署的典型案例,主要是针对某些对安全性要求较高的解决方案: 基本的实现原理和部分代码如下: 1.客户端访问交银.net系统,由该系统发送 ...
- LeetCode 之二叉树中序遍历(使用栈实现)
1.题目描述 2.使用栈实现难度大于使用递归实现 3.代码 vector<int> inorderTraversal(TreeNode* root) { // 非递归实现,借助栈 vect ...
- asp.net 對象圖解
- android 常用adb 及linux 命令
一.ADB相关 adb shell:进入连接的USB调试模式设备shell命令行下 adb tcpip 5555:将USB连接的调试及的连接方式改为网络远程模式进行调试 这里端口为5555(adb 默 ...
- UINavigationController与UITabBarController相关问题
UINavigationController与UITabBarController相关问题 UINavigationController与UITabBarController混用是非常常见的,有时候会 ...
- 解析UIControl
解析UIControl 从下图可以看出,UIControl继承自UIView,添加了响应事件功能. UIButton之所以能响应各种各样的事件是因为继承自UIControl 使用UIControl可以 ...