异常(一)

1、异常概述:

异常(不正常)的体系:

Throwable

Error:通常出现重大问题,如运行的类不存在或者内存溢出等;不编写针对代码进行处理;

Exception:在运行时出现的一起情况,可以通过try,catch,finally处理。

Exception和Error的子类名几乎都是以父类名作为后缀(除了Error类的ThreadDeath)。

详述

先来看一个异常的例子:除法运算4除以0(正常情况下除数不可为0)

package exceptionDemo;
class Demo{
	int div(int a,int b){
		return a/b;
	}
}
public class ExceptionDemo1 {
	public static void main(String[] args){
		Demo d=new Demo();
		int x=d.div(4,0);
		System.out.println("x="+x);
		System.out.println("over");
	}
}

结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at exceptionDemo.Demo.div(ExceptionDemo1.java:4)
	at exceptionDemo.ExceptionDemo1.main(ExceptionDemo1.java:10)

可以看到出现了ArithmeticException(运算异常),没有出现运算结果,也没有打印over,说明程序出现异常时就结束了。

异常是程序在运行时(注意是运行而不是编译,div(4,0)编译没有问题)出现不正常情况。要知道,问题也是现实生活中一个具体的事物,可以通过java类的方式对其进行描述,并将其封装成对象。异常其实就是java对不正常情况进行描述后的对象体现。

对于问题又划分为两类:

一种是严重的问题,java通过Error类进行描述,如运行的类不存(运行java haha,出现java.lang.NoClassDefFoundError)或者内存溢出(byte[] arr=new byte[1024*1024*600],需要占用1024*1024*600的内存,很容易超出虚拟机所管理的内存范围,从而出现java.lang.OutOfMemoryError),一般不编写针对性代码对其进行处理(已超出虚拟机的能力范围);

一种是非严重的问题,java通过Exception类进行描述,可以使用针对性的处理方式进行处理。

(想想一下疾病的可治愈:癌症;不可治愈:感冒发烧)

无论是Error还是Exception又有一些共性内容,如不正常情况的信息、引发原因等,可以向上抽取为Throwable.(可抛的)

详情查看JAVA API文档,(sun公司被甲骨文收购)文档地址https://docs.oracle.com/javase/8/docs/api/

Throwable(JAVA语言中所有错误或异常的父类,有自身的构造函数和getCause(),getMessage(),toString()等方法)

-----Error     

-----Exception

2、异常的处理

java提供了下面特有的语句进行处理

try{

需要被检测的容易出现问题的代码;

}

catch(异常类 变量){

处理异常的代码;(处理方式)

}

finally{

一定会执行的语句;

}

a、

先介绍前两部分try、catch ,以上面的代码为例

	try{
		int x=d.div(4,0);
		System.out.println("x="+x);
		}
		catch(Exception e){
			System.out.print("over");
		}

在进行div(4,0)运算时,会抛出一个new ArithmeticException()对象,try可以检测到这个对象(若没有try语句,检测不到异常对象,主函数也无法处理该异常,虚拟机会进行默认处理,调用了默认异常处理机制,导致程序停止),并将之交给catch(捕获),此时

Exception e=new ArithmeticException(),然后是执行catch里的语句,即System.out.print("over")。

注意:System.out.println("x="+x)并没有执行,因为在div(4,0)处发生异常,进行了程序的跳转。

注意:已知Exception e=new ArithmeticException()(父类的引用接收子类对象),对捕获到的异常对象存在一些常见的操作方法:

String getMessage()    作用:获取异常信息,应用:System.out.print(e.getMessage()),输出:/zero;

String toString()    作用:打印异常对象的字符串表示形式 ,应用:System.out.print(e.toString)或System.out.print(e),输           出:java.lang.ArithmeticException: /zero(比getMessage()更全面,异常名字:异常信息);

printStackTrace()    作用:打印堆栈中的跟踪信息,应用:因其无返回值,所以不要放在输出语句中输      出System.out.print(e.printStackTrace())

时间: 2024-10-24 12:35:06

异常(一)的相关文章

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: '127.0.0.1:59770', transport: 'socket'

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

mybaits非配置原因,导致SqlSession was not registered for synchronization异常

今天运行程序时报了 SqlSession [[email protected]] was not registered for synchronization because synchronization is not active [11:03:17]-Closing non transactional SqlSession [[email protected]] 由于异常是集中处理的,所以报了这样的错误,查了半天,网上结果都是说配置文件出错的,可是我的项目配置文件肯定是没错的,因为项目都开

异常笔记--java编程思想

开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多... 1. 基本概念 异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止                                          3. 当前环境抛出异常对象的引用.                                         4. 异常处理机制接

爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回

对于业务层的程序的致命错误,我们一直的做法就是直接抛出指定的异常,让程序去终断,这种做法是对的,因为如果一个业务出现了致命的阻塞的问题,就没有必要再向上一层一层的返回了,但这时有个问题,直接抛异常,意味着服务器直接500了,前端如何去显示,或者如果你是API的服务,如果为前端返回,如果是500,那直接就挂了,哈哈! 下面是在MVC环境下优化的全局异常捕获代码(非API) /// <summary> /// 全局异常捕获 /// </summary> public class Glo

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器中(出于安全考虑),这个时候我们仍然要捕获异常,只不过不是显示到浏览器中,而是记录到日志中,方便日后排查问题. 百牛信息技术bainiu.ltd整理发布于博客园 Laravel当然支持PHP原生的错误和异常处理,但是在此基础上进行了一些封装处理,从而更方便在不同开发环境切换以及对错误和异常的处理.

Java必知必会:异常机制详解

一.Java异常概述 在Java中,所有的事件都能由类描述,Java中的异常就是由java.lang包下的异常类描述的. 1.Throwable(可抛出):异常类的最终父类,它有两个子类,Error与Exception. Throwable中常用方法有: getCause():返回抛出异常的原因.如果 cause 不存在或未知,则返回 null. getMeage():返回异常的消息信息. printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值.

python 异常和弹出框

import tkinter.messagebox try: fileContent = open("abnormal.txt") fileContent.close() print("over") #把异常消息赋予一个"ex"变量 except Exception as ex: print(ex) tkinter.messagebox.showinfo("Alert",ex) tkinter.messagebox.askye

python基础--接口与归一化设计、封装、异常、网络编程

1 接口与归一化设计 1.1 归一化概念: 归一化的好处: 1.归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大降低了使用者的使用难度. 2.归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合 继承的两种用途 一:继承基类的方法,并且做出自己改变或者扩展(代码重用):实践中,继承的这种用途意义并不很大,甚至常常是有害的.因为它使得子类与基类出现强耦合. 二:声明某个子类兼容于某基类,定义一个接口类(模仿java的Interface),接口类中

异常上报工具:腾讯Bugly

1.腾讯出了一个和umeng差不多的异常上报工具Bugly.(传送门:https://bugly.qq.com/docs/) (1)两者比较明显的区别是,Bugly能比较实时上报异常信息,经过测试基本上几秒就能在后台看到上报的信息,umeng的要等一段时间:(这个是我选择Bugly的主要原因) (2)Bugly感觉比较轻盈,主要方向就是异常上报:umeng感觉比较臃肿,主要方向在后台数据统计上:(个人感觉) 2.Cocos的接入文档就在里面,提供了c++/lua/js三种方式的接入,很简单方便就

最近遇到的异常与错误总结

异常 NumberFormatException  数字格式化异常 ArithmeticException 算术异常 ArrayIndexOutOfBoundsException  数组超出绑定异常:没有输入参数,或输入的参数不够 NullPointerException 空指针异常:使用了未实例化的对象 NoSuchMethodError:main  找不到主方法 ClassCastExeption:A 类转换异常 IllegalThreadStateException:非法的线程状态异常 I