黑马程序员——异常的概述和分类

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

什么异常?

就是程序中出现的一个问题或毛病。对于异常来说,我们在开发中是一定要处理的。

异常分类:

Throwable 类是 Java 语言中所有错误或异常的超类

错误:Error

异常:Exception

对于程序员,我们只能处理Exception,不需要处理Error.

 

Java中的异常分类:

运行时异常:在运行阶段会出现的异常

编译时异常

JVM默认是如何处理异常的

int a = 10;

int b = 0;

System.out.println(a / b);

程序在编译时,不会有问题,在java.exe将我们的.class文件加载到jvm时,会发现除数为0.这是一个问题,jvm就会将这个问题具体化(就是将问题包装成了对象),对于除数为0这样的问题,在java中使用了这样的类来描述, ArithmeticException,jvm就将这个类的对象抛给了我们,在控制台上的表现就是将这类的一些信息显示出来。

 

注意:java中,它已经定义好了一些问题的描述.

例如:数组下标越界 ArrayIndexOutOfBoundsException

将一个字符串转换成数字  有可能出现  NumberFormatException

 

总结:jvm会将问题包装成具体的异常类对象,并通过这个对象调用它的一些方法,来在控制台上把问题反馈。

try..catch的方式处理异常

异常分类:

运行时异常:RuntimeException及其子类

编译异常:Exception其及子类,但是不包含RuntimeException及其子类

 

对于异常,运行时异常可以处理也可以不处理

  编译异常必须处理。

 

try…catch格式:

try{

有可能出现异常的代码块;

}catch(异常类型  e){

处理方式

}

运行的代码如果出现的异常,catch会捕获到,你在catch中要捕获的是什么异常,如果出现了,就会将其捕获.


package cn.itcast.throwable;
//异常处理  try....catch处理方式
public class ExceptionDemo2 {

	public static void main(String[] args) {
		
		//处理除数为0异常
		
		int a=10;
		int b=10;
		//System.out.println(a/b);  //java.lang.ArithmeticException  运行时异常
		
		//现在我们要使用try...catch来处理异常.
		
		try {
			System.out.println(a / b); // 有可能出现异常
		} catch (ArithmeticException e) { //catch只有在try块中的代码出现了异常才会执行.
			System.out.println("除数不能为0");
		}
	}
}

编译期异常和运行期异常的区别

 

1. 编译异常,要求我们必须处理,不处理编译不了代码

运行时异常,你可以处理,也可以不处理,不处理jvm处理。

2. 编译异常  Exception类及其子类,除了RuntimeException及其子类

运行异常  RuntimeException及其子类。

Throwable的几个常见方法

1. public Throwable getCause() 获取原因

2. public String getMessage() 获取错误信息

3. public void printStackTrace() 得到堆栈信息

4. public String toString()  得到异常类包及本地化的信息

package cn.itcast.throwable;

//1.	了解  public Throwable getCause() 获取原因
//2.	重点public String getMessage() 获取错误信息
//3.	重点public void printStackTrace() 得到堆栈信息
//4.	了解public String toString()  得到异常类包及本地化的信息

public class ExceptionDemo6 {

	public static void main(String[] args) {
		int i = 10;
		int b = 0;

		// try {
		System.out.println(i / b);
		// } catch (ArithmeticException e) {
		// System.out.println(e.getCause()); //得到原因
		// System.out.println(e.getMessage()); // / by zero
		// e.printStackTrace();//异常类型 错误信息 定位了异常产生的行号
		// System.out.println(e.toString()); //类名 错误信息
		// }
	}
}

throw的概述以及和throws的区别

问题:throw是什么?

它是用于抛出具体异常的,注意,它抛出的是异常对象。

 

对于throw,如果执行了,方法体也就结束 了。

在开发中经常会使用throw让我们的方法结束。

 

throwthrows区别:

1. throws是定义在方法的声明 上的,而throw,是在方法体中使用的

2. throws后面是一个方法类名,throw后是一个对象。

3. throws它只是用于声明这个方法可能抛出某种类型异常,throw它是真正用于抛出一个异常。

 final finally finalize 的区别

Final是一个修饰符

修饰属性    常量

修饰方法    不可以被重写

修饰类      不可以被继承

 

Finally 异常中的,这个块中的内容永远会被执行,用于关闭资源。

FinalizeObject类中的一个方法,用于垃圾回收.

如果在finally之前有return

package cn.itcast.throwable;

//finally使用  如果在finally前出现了 return 或throw有什么情况

public class ExceptionDemo10 {
	public static void main(String[] args) {

		int a = 10;
		int b = 0;
		try {
			System.out.println(a / b);

		} catch (ArithmeticException e) {
			System.out.println("除数不能为0");
			// return; //如果出现了return,那么finally中的内容也会执行.
			// throw new RuntimeException(); //如果抛出了异常,那么finally也会被执行.
			System.exit(0); // 这句话执行后,finally执行不了.
		} finally {
			System.out.println("finally");
		}

	}
}
package cn.itcast.throwable;



public class ExceptionDemo11 {
	public static void main(String[] args) {

		// int n = show();

		// System.out.println(n);

		System.out.println(print().x); // 1
	}

	public static Point print() {
		Point p = new Point();
		p.x = 10;
		try {
			throw new Exception();
		} catch (Exception e) {
			p.x = 100;
			return p; //在returnvalue存储的是p引用的地址
		} finally {
			p.x = 1;
		}
	}

	public static int show() {

		int a = 10;

		try {
			a = 100;
			throw new Exception();
		} catch (Exception e) {
			a = 1000;
			return a; // 当执行到return a;
	// 这时要返回的a=1000;那么就将1000赋值给了jvm中返回值变量。这时不执行返回动作,转为finally没执行。
		} finally {
			a = 1;
			// return a;
		}

	}

}

class Point {
	int x;

}


 




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值