1.什么是异常?JAVA提供的异常处理机制有什么用?
以下的程序执行的过程中发生了不正常的情况,而这种情况叫做:异常。JAVA语言是一门十分完善的语言,提供了异常的处理方式,以下程序执行过程中出现了不正常的情况,JAVA把异常打印输出到了控制台,提供给程序员参考。程序员看到这个异常之后,可以对程序进行修改,让程序更加健壮
什么是异常:程序的执行过程中的不正常情况
异常的作用:增强了程序的健壮性
2.以下的程序执行控制台出现了
Exception in thread "main" java.lang.ArithmeticException:/by zero
......................
这个信息被我们称为:异常信息,这个信息是JVM打印的
package ExceptionTest01;
public class Test01 {
public static void main(String[] agrs){
int a = 10;
int b = 0;
//实际上JVM在执行到这个地方的的时候,会new异常对象的new ArithmeException("/by zero");
//JVM把new的异常对象抛出了,并且打印到屏幕上了
int c = a / b;
System.out.println(a + "/" + b + "=" + c);
/*
//我观察到了异常之后,对异常进行处理(对程序进行修改)
if(b == 0){
System.out.println("程序有异常,除数不能为0");
return;
}
int c = a / b;
System.out.println(a + "/"+ b + "=" + c);
*/
}
}
3.JAVA语言中异常以什么形式存在的?
3.1.异常在JAVA中以类的形式存在的,每一个异常类都可以创建对象
3.2异常对应的现实生活:
房子塌了(异常类):
小陈家房子塌了(异常对象)
小王家房子塌了(异常对象)
小刘家房子塌了(异常对象)
类:模板
对象:实际存在的个体
package ExceptionTest01;
public class Test02 {
public static void main(String[] agrs){
//通过异常类创建对象
NumberFormatException nfe = new NumberFormatException("这是数字格式化异常");
//数字格式化异常
System.out.println(nfe);
//通过异常类创建对象
NullPointerException npe = new NullPointerException("这是空指针异常");
//空指针异常
System.out.println(npe);
}
}
4.java的异常处理机制
4.1、异常在java中以类和对象的形式存在。那么异常的继承结构是怎样的?
我们可以使用UML图来描述一下继承结构。
画UML图有很多工具,例如:Rational Rose(收费的)、starUML等....
Object
Object下有Throwable(可抛出的)
Throwable下有两个分支:Error(不可处理,直接退出JVM)和Exception(可处理的)
Exception下有两个分支:
Exception的直接子类:编译时异常(要求程序员在编写程序阶段必须预先对这些异常进行处理,如果不处理编译器报错,因此得名编译时异常。)。
RuntimeException:运行时异常。(在编写程序阶段程序员可以预先处理,也可以不管,都行。)
4.2、编译时异常和运行时异常,都是发生在运行阶段。编译阶段异常是不会发生的。
编译时异常因为什么而得名?
因为编译时异常必须在编译(编写)阶段预先处理,如果不处理编译器报错,因此得名。
所有异常都是在运行阶段发生的。因为只有程序运行阶段才可以new对象。
因为异常的发生就是new异常对象。
4.3、编译时异常和运行时异常的区别?
编译时异常一般发生的概率比较高。
举个例子:
你看到外面下雨了,倾盆大雨的。
你出门之前会预料到:如果不打伞,我可能会生病(生病是一种异常)。
而且这个异常发生的概率很高,所以我们出门之前要拿一把伞。
“拿一把伞”就是对“生病异常”发生之前的一种处理方式。
对于一些发生概率较高的异常,需要在运行之前对其进行预处理。
运行时异常一般发生的概率比较低。
举个例子:
小明走在大街上,可能会被天上的飞机轮子砸到。
被飞机轮子砸到也算一种异常。
但是这种异常发生概率较低。
在出门之前你没必要提前对这种发生概率较低的异常进行预处理。
如果你预处理这种异常,你将活的很累。
假设你在出门之前,你把能够发生的异常都预先处理,你这个人会更加
的安全,但是你这个人活的很累。
假设java中没有对异常进行划分,没有分为:编译时异常和运行时异常,
所有的异常都需要在编写程序阶段对其进行预处理,将是怎样的效果呢?
首先,如果这样的话,程序肯定是绝对的安全的。
但是程序员编写程序太累,代码到处都是处理异常
的代码。
6.UML图(补充内容)
UML是一种统一建模语言。
一种图标式语言(画图的)
UML不是只有java中使用。只要是面向对象的编程语言,都有UML。
一般画UML图的都是软件架构师或者说是系统分析师。这些级别的人员使用的。
软件设计人员使用UML。
在UML图中可以描述类和类之间的关系,程序执行的流程,对象的状态等.
盖大楼和软件开发一样,一个道理。
盖楼之前,会先由建筑师画图纸。图纸上一个一个符号都是标准符号。
这个图纸画完,只要是搞建筑的都能看懂,因为这个图纸上标注的这些
符号都是一种“标准的语言”。
在java软件开发当中,软件分析师/设计师负责设计类,java软件开发人员
必须要能看懂。