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 程序 ...
随机推荐
- Spring 核心组件总结
spring核心组件总结 spring介绍 spring概念 IOC: Inverse Of Control 控制反转 将我们创建对象的方式反转了,以前创建对象是由我们开发人员自己维护,包括依赖注 ...
- 简单说说SpringMVC
距离上一次开发SpringMVC项目已经过去了大半年,有些细节已经开始遗忘,今天复习一下 先从标签说起: 和struts有各种配置文件不同,spring用标签开发. 1.@Controller在Spr ...
- EF CodeFirst 初识
随着EntityFramework的发展,原先的三种方式,{Code First ,Model First,Database First } CodeFirst基本摆脱了另外两种方式 成为了 最受欢 ...
- 【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器
1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 def func(): print("你吃了么?") # print(func) # a = func # ...
- CSS相对定位|绝对定位(五)之z-index篇——张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1855 补充于2016 ...
- [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库
小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...
- Application Context的设计
基本上每一个应用程序都会有一个自己的Application,并让它继承自系统的Application类,然后在自己的Application类中去封装一些通用的操作.其实这并不是Google所推荐的一种 ...
- 2java.lang.NoClassDefFoundError异常
1.错误信息 2.错误分析: JVM读到程序的第三行,会在当前路径 "D:\java" 下寻找com.yangquan.aolun这个包路径下的Cat类,但当前路径下根本就没有co ...
- ASP.NET Claims-based认证实现认证登录-claims基础知识
claims-based认证这种方式将认证和授权与登录代码分开,将认证和授权拆分成另外的web服务.活生生的例子就是我们的qq集成登录,未必qq集成登录采用的是claims-based认证这种模式,但 ...
- Python 应用剖析工具介绍
[编者按]本文作者为来自 HumanGeo 的工程师 Davis,主要介绍了用于 Python 应用性能分析的几个工具.由国内 ITOM 管理平台 OneAPM 编译呈现. 在 HumanGeo,我们 ...