java基础——java中的异常

来源:互联网 发布:数字网络配线架 编辑:程序博客网 时间:2024/06/06 04:56


第一讲异常

一、概念

java运行期间发生的问题就是异常

java运行时发生的除了exception还有error

异常:通常发生后可以有针对性的处理方式

错误:通常发生后不会有针对性的处理方式

error的发生通常都是系统级别的问题,都是JVM所在系统发生的并反馈给JVM的,无法针对处理,只能修改代码


异常的应用:

在编写程序时,必须要考虑程序的问题情况

举例:卖水果功能需要传递钱参数,有可能有假币

所以,定义程序需要考虑程序的健壮性,加入一些逻辑判断


例一:

class Demo
{
/*
对给定的数组通过给定的角标获取元素。
*/
int getElement(int[] arr,int index)
{
/*
jvm出了问题,自己打包对象并抛出。
但是它所提供的信息不够给力。想要更清晰,需要自己写。
它的抛出不满足我们的要求。准备自己抛。
*/
if(arr==null)
{
throw new NullPointerException("arr指向的数组不存在");
}


if(index<0 || index>=arr.length)
{
//该条件如果满足,功能已经无法继续运算。这时 就必须结束功能,并将问题告知给调用者。这时就需要通过异常来解决。
//怎么用呢?
//1,创建一个异常对象。封装一些提示信息(自定义)。
//2,需要将这个对象告知给调用者。怎么告知呢?怎么将这个对象传递到调用者处呢?通过关键字throw就可以完成。 throw 异常对象;
//3,throw用在函数内,抛出异常对象,并可以结束函数。
throw new ArrayIndexOutOfBoundsException("错误的角标,"+index+"索引在数组中不存在");
}


int element = arr[index];
return element;
}
}




class ExceptionDemo3 
{
public static void main(String[] args) 
{
Demo d = new Demo();
int[] arr = {34,12,67};
int num = d.getElement(null,-1);
System.out.println("num="+num);
System.out.println("over");
}
}


throwable中的方法:

getmessage()

获取异常信息,返回字符串

to String()

获取异常类名和异常信息,返回字符串

print Stack Trace()

获取异常类名和异常信息,以及异常出现在程序中的位置

print Strack Trace()

通常用该方法将异常内容保存在日志文件中,以便查阅


throw和throws

throws用于标识函数暴露出来的异常

throw用于抛出异常对象

throws和throw的区别:

throws用在函数上,后面跟异常类名

throw用在函数内,后面跟异常对象


Exception和RuntimeException的区别


如果在函数内抛出Exception//编译失败,因为编译器在检查语法时发生了错误。
该程序已经出现问题,Java认为这个程序本身存在隐患,
需要捕获或者声明出来(你要么把问题处理,要么把问题标识出来让调用知道)

为什么抛出RuntimeException,不需要捕获,不要声明呢?
不是功能本身发生的异常,而是因为比如调用者传递参数错误而导致功能运行失败。
这时也是问题,需要通过异常来体现,但是这个异常不要声明出来的。
声明的目的是为了让调用者进行处理。
不声明的目的是不让调用者进行处理,就是为了让程序停止,让调用者看到现象,并进行代码的修正。★★★★★


原理异常分两种:
1,编译时异常:编译器会检测的异常。
2,运行时异常:编译器不会检测的异常。不需要声明。声明也可以,如果声明了,无外乎就是让调用者给出处理方式。
ArrayIndexOutOfBoundsException
IllegalArgumentException
NullPointerException
ClassCastException


声明和捕获。


声明:将问题标识出来,报告给调用者。
如果函数内通过throw抛出了编译时异常,而捕获,那么必须通过throws进行声明,让调用者去处理。


捕获:Java中对异常有针对性的语句进行捕获。
语句:
try
{
//需要被检测的语句。
}
catch(异常类 变量)//参数。
{
//异常的处理语句。
}
finally
{
//一定会被执行的语句。
}

例二:

class Demo
{
/*
如果定义功能时有问题发生需要报告给调用者。可以通过在函数上使用throws关键字进行声明。


*/
void show(int x)throws Exception
{
if(x>0)
throw new Exception();
else
System.out.println("show run");
}
}




class ExceptionDemo7 
{
public static void main(String[] args)//throws Exception//在调用者上继续声明。 
{
Demo d = new Demo();
try
{
d.show(1);//当调用了声明异常的方法时,必须有处理方式。要么捕获,要么声明。
}
catch (Exception ex)//括号中需要定义什么呢?对方抛出的是什么问题,在括号中就定义什么问题的引用。
{
System.out.println("异常发生了");
}
System.out.println("Hello World!");
}



0 0
原创粉丝点击