什么是异常?

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

例如下面的程序

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. leetcode实践:找出两个有序数组的中位数

    题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 代码实现 package com. ...

  2. 撩课-Web大前端每天5道面试题-Day26

    1.vuejs与angularjs以及react的区别? .与AngularJS的区别 相同点: 都支持指令:内置指令和自定义指令. 都支持过滤器:内置过滤器和自定义过滤器. 都支持双向数据绑定. 都 ...

  3. oracle数据库逐步学习总结【基础一】

    原创作品,转载请在文章开头显眼位置注明出处:https://www.cnblogs.com/sunshine5683/p/10059955.html 一.oracle的基本命令 1.连接命令 用法:c ...

  4. macbook usb口突然不能用 解决方法

    1.先按shift+ctrl+opt+开机键,等待10秒,着10秒是没有反应的,屏幕不会亮,系统不会跑起来.2.10秒过后松开所以的键.3.再按opt+cmd+r+p接着按开机键,这时电脑会不断重启, ...

  5. css-使不同大小的图片在固定大小的容器中居中

    HTML示例如下: <ul> <li class="imgbox"><img src="img1.jpg"></li& ...

  6. php初学记

    开始和结束标记 常用两种:<?php ?>,<script language="php"></script> 短标记:<? ?>,需 ...

  7. dynamics 365 AI 解决方案 —— 介绍

    Digital transformation has been reshaping our world and artificial intelligence (AI) is one of the n ...

  8. PHP isset()与empty()的使用区别

    PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...

  9. opengl学习笔记

    准备: 1.准备资源:从GLEW1.13.0下载GLEW,并且解压出glew-1.13.0目录.从FreeGLUT官网下载3.0.0版本.直接从这里下的编译后的FreeGLUT,选for MSVC,下 ...

  10. c# 将秒数转换成时,分,秒的方法

    TimeSpan ts = , ,Convert.ToInt32( duration)); string str = ""; ) { str = ts.Hours.ToString ...