黑马程序员---异常总结

------- android培训java培训、期待与您交流!
----------

1:异常

(1)程序出现的不正常的情况。

(2)异常的继承体系结构:

Throwable

|--Error
严重的问题,一般我们解决不了。

|--Exception

|--RuntimeException运行时期异常,这种问题一般要修正代码。

|--非RuntimeException编译时期异常,必须进行处理,否则代码不能够通过。

(3)JVM针对异常的默认处理方案:

默认情况下,会把异常的类名,原因,及错误出现的位置输出在控制台。

并从这个地方终止程序运行。

public class ExceptionDemo {
	public static void main(String[] args) {
		int a = 10;
		int b = 2;
		b = 0;
		// ArithmeticException
		System.out.println(a / b);
		System.out.println("over");
	}
}

(4)我们自己如何针对程序进行处理:

A:try...catch...finally

基本格式:

try {

可能有问题的代码。

}catch(异常类名 变量名){

异常的处理。

}finally {

释放资源。(IO,数据库操作比较常见)

}

变形格式:

                try...catch...
		try...catch...catch...
		try...catch...finally...
		try...catch...catch...finally...
		try...finally...

针对一个try多个catch的情况:

父异常必须放最后。

		try{
		}catch(){
		}catch(){
		}

JDK7的新特性:这个要求都是平级关系。

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

		int[] arr = { 1, 2, 3 };
		try {
			System.out.println(a / b);
			System.out.println(arr[3]);
			// ...代码一大堆,还可能有问题,但是我不太明确是什么问题。肿么办
			// 用Exception解决
		} catch (ArithmeticException e) {
			System.out.println("除数不能为0");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("数组索引越界");
		} catch (Exception e) {
			System.out.println("程序出现了问题");
		}

		// JDK7改进的代码
		try {
			System.out.println(a / b);
			System.out.println(arr[3]);
		} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
			System.out.println("程序出现了小问题");
		}
		System.out.println("over");
	}
}

B:throws

后面跟的是异常类名。

位置:在方法的()后面。

注意:

能try...catch就不要throws。

但是,目前讲课为了方便,我都throws。

(5)编译时期异常和运行时期异常的区别?

A:编译时期异常 必须进行处理的。

B:运行时期异常 可以处理,也可以不处理。

(6)throws和throw的区别?

A:throws

位置:在方法()后面,跟的是类名。

如果后面根据的是RuntimeException及其子类,那么,该方法可以不用处理。

如果后面根据的是Exception及其子类,那么,必须要编写代码进行处理,或者调用的时候抛出。

public class Teacher2 {
	public void checkScore(int score) throws ScoreException {
		if (score < 0 || score > 100) {
			throw new ScoreException("分数必须是0-100之间");
		} else {
			System.out.println("分数正常");
		}
	}
}

B:throw

位置:在方法中,跟的对象名称。

如果方法中,有throw抛出RuntimeException及其子类,那么,声明上可以没有throws。

如果方法中,有throw抛出Exception及其子类,那么,声明上必须有throws。

public class Teacher {
	public void checkScore(int score)  {
		if (score < 0 || score > 100) {
			throw new ScoreException("分数必须是0-100之间");
		} else {
			System.out.println("分数正常");
		}
	}

(7)自定义异常

只需要继承自Exception或者RuntimeException。

提供构造方法即可。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-08 22:09:06

黑马程序员---异常总结的相关文章

黑马程序员——java基础——异常

黑马程序员--java基础--异常 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 异常 就是不正常.程序在运行时出现的不正常情况.其实就是程序中出现的问题.这个问题按照面向对象思想进行描述,并封装成了对象.因为问题的产生有产生的原因.有问题的名称.有问题的描述等多个属性信息存在.当出现多属性信息最方便的方式就是将这些信息进行封装.异常就是java按照面向对象的思想将问题进行对象封装. 异常体系 --------java.lang.Thro

黑马程序员_Java异常 Java常用库类

Java异常 1,异常的基本概念 异常是导致程序中断运行的一种指令流,它是在运行时期发生的不正常的情况,在Java中,一切的异常都秉着面向对象的设计思想,所有的异常都是以对象和类的形式存在的. 2,异常类的继承结构 在整个Java的异常结构中,实际上有两个最常用的类,Exception和Error,这两个类分别是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try....catch处理 Error:一般之的是JVM的错误,程序中无法处理. 3,Java的

黑马程序员------IO(五)

黑马程序员------IO(五) 1.1  操作对象(示例1)ObjectInputStream与ObjectOutputStream 被操作的对象需要实现Serializable. Serializable:用于给被序列化的类加入ID号,用于判断类和对象是否是同一个版本 类通过实现java.io.Serializable接口以启用序列化功能,Serializable只是一个标记接口. 1 示例1: 2 import java.io.*; 3 4 class ObjectStreamDemo 5

黑马程序员_关于黑马java班入学测试技术分享-后五(二)

??????????????????????????????????????????????????????????????????????????-----Java培训.Android培训.iOS培训..Net培训.期待与您交流! 作为本人首篇黑马技术博客有必要交代一下背景.个人理解博客的用作在于于己在于交流,于他在于学习,在交流学习中共同成长.下面进入正题.本文主要是介绍在做黑马入门测试时的一些问题(这个应该不是泄露题库吧). 本文只要是讲述黑马程序员基础测试题的6-10题,回过头来分析明显

黑马程序员_集合

集合1.集合和对象数组的区别: 数组的长度不可变,集合的可变: 数组可以存储基本数据类型和对象,集合只能存储对象. 集合的框架图 集合派系的顶层接口Collection1.Collection集合存储对象的方法: add(E e)将元素存储到集合中 addAll(Collection c)将一个集合添加到另外的集合中2.Collection集合提取对象的方法: 通过迭代器iterator中的方法:hasNext()和next()来取出 Iterator it=new iterator(); wh

黑马程序员_JAVA 基础加强学习笔记

一.面向对象 (一)继承  1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();  如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数. 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数. 2.final特点

黑马程序员___多线程小结

----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- 进程和线程 进程是正在进行中的程序,指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程. Java程序的进程里有几个线程:主线程, 垃圾回收线程(后台线程) 线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据.多线程:在同一个进程中同时运行的多个任务;一个进程至少有一个线程,为了提高效率,可以在一个进程中

黑马程序员——I/O流基础知识

I/O流 Io流 代表有能力产生数据的数据源对象或者有能力接收对象的数据接收端对象.字节流和字符流.中文字符也转编码表,jbk2万多中文字.unicode全世界的字符收录.乱码,两种不同形式的编码表.字符流里面的对象融合了编码表,以便别人使用的使用用你指定的编码方式. 基类:读和写~ 字节流 InputStream,OutputStream 字符流 Reader,Writer Writer 主力方法是writer().既然IO流是操作数据的,而数据的最常见体现形式是:文件. 需求:准备在硬盘上创

黑马程序员——IO篇

------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 1.IO流用来处理设备之间的数据传输 2.Java对数据的操作是通过流的方式 3.Java用于操作流的对象都在IO包中 4.流按操作数据分为两种:字节流与字符流 . 字符流的数据字节流其实都能处理,因为无论什么在计算机上最后都是以字节存在的,但是其中有一部分数据它是以文本形式存在的,所以为了方便有了字符流,字符流里融合了编码表,而只有文字用到了编码表,所以字符流用来处理文本