什么是异常?

不正常的,会影响程序的正常执行流程。

例如下面的程序

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异常处理与程序调试的更多相关文章

  1. 零基础学Python--------第9章 异常处理及程序调试

    第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...

  2. 笔记:Python异常处理与程序调试

    Python异常处理与程序调试 Python提供了强大的异常处理机制,通过捕获异常可以提高程序的健壮性.异常处理还具有释放对象,中止循环的运行等作用.在程序运行的过程中,如果发生了错误,可以返回事先约 ...

  3. python:异常处理及程序调试

    1.异常概述 在程序运行过程中,经常会遇到各种各样的错误.这些错误统称为“异常”,在这些一场中有的是由于开发者将关键词写错导致,这类错误产生的是SyntaxError.invalid syntax(无 ...

  4. Java开发工具与程序调试

    开发工具:MyEclipse,Eclipse等. 程序调试:  (1)断点:设置断点是程序调试中必不可少的手段,Java调试器每次遇到程序断点时都会将当前线程挂起,即暂停当前程序的运行.(在Eclip ...

  5. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  6. tomcat+java的web程序持续占cpu高问题调试【转】

    转自 tomcat+java的web程序持续占cpu问题调试 - 像风一样的自由 - CSDN博客http://blog.csdn.net/five3/article/details/28416771 ...

  7. Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序

    文章的标题看似自相矛盾,然而我在"正确"二字上打了引号.我们来看一个例子,关于Java异常处理(Exception Handling)的一些知识点. 看下面这段程序.方法pleas ...

  8. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  9. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

随机推荐

  1. Spring Boot 表单验证、AOP统一处理请求日志、单元测试

    一.使用@Valid表单验证 于实体类中添加@Min等注解 @Entity public class Girl { @Id @GeneratedValue private Integer id; pr ...

  2. div模拟textarea文本域轻松实现高度自适应——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1362 一.关于tex ...

  3. Spring 、SpringMVC 、Struts2之间的区别

    一.Spring与SpringMVC的区别: spring是一个开源框架,是为了解决企业应用程序开发,功能如下: 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Ja ...

  4. java-接口和抽象类的联系和区别。

    接口和抽象类的联系和区别. 一,简单总结 1.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象. 2.抽象类要被子类继 ...

  5. Stream grouping-storm的流分组策略

    A stream grouping tells a topology how to send tuples between two components. Remember, spouts and b ...

  6. opencv图像处理时使用文件输入流ifstream批量读取图片

    简介: 在利用opencv进行图像处理时,通常需要批量读取图片,然后做相应的处理,我们可以用C++文件的输入流来进行图片的读取,这要求我们应该事先,将图片图片名生成txt文件,具体请参见之前的博文[u ...

  7. NTP POOL PROJECT:全球最大的免费NTP服务集群

    pool.ntp.org项目是一个提供可靠易用的NTP服务的虚拟集群,它作为一个大的NP服务器可以支撑全球数百万客户端使用.该项目允许那些能提供NTP服务的服务器加入到该集群中,截止2012年8月份, ...

  8. maven 远程仓库、私服及镜像配置

    maven仓库分类 本地仓库.远程仓库.远程仓库又有私服.中央仓库.其它公共库.中央仓库是maven自带的核心仓库. 仓库配置远程仓库可以配置多个,超级pom中定义的中央仓库 <reposito ...

  9. java String类 trim() 方法源码分析

    public String trim() {        int arg0 = this.value.length;   //得到此字符串的长度        int arg1 = 0;   //声 ...

  10. Pig store用法举例

    store:将数据存储到HDFS等文件系统里   将数据保存到/data目录 store data into '/data'; 以逗号为分隔符 store data into '/data' usin ...