Java代码在运行时期发生的问题就是异常
Throwable是java语言中所有错误或异常的超类
Exception 异常 将异常处理掉,程序可以继续执行
Error 错误 必须修改程序
异常一旦被抛出,后面的所有程序都不再执行
public class ArrayTools {
public static void main(String[] args) {
int[] arr={1,2,3};
int i=getArray(arr);
System.out.println(i);
}
public static int getArray(int[] arr){
int i=arr[3];
return i+1;
}
}
throw 写在方法内部,用于抛出异常的对象
throw 后面必须写new 对象,必须是异常的对象
可以是 Exception也可以是其子类
public class ExceptionDemo {
public static void main(String[] args) {
int[] arr=null;
int i=getArray(arr);
System.out.println(i);
}
public static int getArray(int[] arr){
//对方法的参数进行合法性的判断
if (arr==null) {
//抛出异常的形式
throw new Exception("传递数组不存在");
}
//对数组进行判断,判断数组中是不是有元素
if (arr.length==0) {
throw new Exception("数组中没有任何元素");
}
int i=arr[arr.length-1];
return i*2;
}
}
方法中声明异常关键字 throws用于在方法的声明上,标明此方法可能出现异常
请调用者处理,throws 必须写抛出的异常
异常的处理方式:
try...catch...finally
格式:
try{
被检测的代码
可能出现异常的代码
}catch(异常类名 变量){
异常的处理方式
循环,判断,调用方法,变量
}finally{
必须要执行代码
}
平级异常:抛出的异常类之间,没有继承关系,没有顺序
上下级关系的异常,越高级的父类越要写在下面
finally必须执行代码
编译异常:调用了抛出异常的方法,不处理编译失败(try throws)
运行异常:抛出的异常是 RuntimeException
运行异常的特点:
方法内部抛出的异常是运行异常,new XXXException
方法的声明上,不需要 throws 语句,调用者不需要处理
设计原因:
运行异常,不能发生,但是如果发生了,程序员停止程序,修改源代码
运行异常:一旦发生,不要处理,请直接修改源代码,运行异常一旦发生,后面的代码没有执行的意义
public class RuntimeExceptionDemo {
public static void main(String[] args) {
try {
function();
} catch (Exception e) {
// e.printStackTrace();
}
}
public static void function(){
throw new RuntimeException();
}
}
/*
* 继承后,在子类重写父类方法的时候,异常处理
* 结论:
* 父类的方法,结果抛出异常,子类重写后
* 可以不抛出异常
* 也可以抛出异常,但是如果子类要抛,抛出的异常不能大于父类的异常
* 大于指的是继承关系
*
* 父类的方法,没有异常抛出,子类重写后
* 也不能抛出异常
* 如果子类中调用了抛出异常的方法,别无选择,只能try...catch处理
*/
/*
* Throwable中的方法
* String getMessage() 对异常信息的详细描述 异常
* String toString() 对异常信息的简短描述 java.lang.Exception: 异常了
* void printStackTrace() 将异常信息追踪到标准的错误流
* java.lang.Exception: 异常了
at cn.servyou.demo03.Exception04.function(Exception04.java:19)
at cn.servyou.demo03.Exception04.main(Exception04.java:11)
JVM默认调用方法
*/
public class Exception04 {
public static void main(String[] args) {
try {
function();
} catch (Exception e) {
//System.out.println(e.toString());
e.printStackTrace();
}
}
public static void function() throws Exception{
throw new Exception("异常了");
}
}
/*
* 自定义异常
* 继承Exception,或者RuntimeException
* 构造方法中,用super将异常信息,传递给父类
*/
public class FuShuException extends RuntimeException {
public FuShuException(String s){
super(s);
}
}
--------------------------------------------------------------
public class ExceptionDemo {
public static void main(String[] args) {
int avg=getAvg(50,60,-70,80);
System.out.println(avg);
}
/*
* 传递成绩,计算成绩的平均数
* 成绩没有负数,需要抛出异常,停止运算
*/
public static int getAvg(int...source){
int sum=0;
for (int s : source) {
if (s<0) {
throw new FuShuException("成绩错误 "+s);
}
sum=sum+s;
}
return sum/source.length;
}
Throwable是java语言中所有错误或异常的超类
Exception 异常 将异常处理掉,程序可以继续执行
Error 错误 必须修改程序
异常一旦被抛出,后面的所有程序都不再执行
public class ArrayTools {
public static void main(String[] args) {
int[] arr={1,2,3};
int i=getArray(arr);
System.out.println(i);
}
public static int getArray(int[] arr){
int i=arr[3];
return i+1;
}
}
throw 写在方法内部,用于抛出异常的对象
throw 后面必须写new 对象,必须是异常的对象
可以是 Exception也可以是其子类
public class ExceptionDemo {
public static void main(String[] args) {
int[] arr=null;
int i=getArray(arr);
System.out.println(i);
}
public static int getArray(int[] arr){
//对方法的参数进行合法性的判断
if (arr==null) {
//抛出异常的形式
throw new Exception("传递数组不存在");
}
//对数组进行判断,判断数组中是不是有元素
if (arr.length==0) {
throw new Exception("数组中没有任何元素");
}
int i=arr[arr.length-1];
return i*2;
}
}
方法中声明异常关键字 throws用于在方法的声明上,标明此方法可能出现异常
请调用者处理,throws 必须写抛出的异常
异常的处理方式:
try...catch...finally
格式:
try{
被检测的代码
可能出现异常的代码
}catch(异常类名 变量){
异常的处理方式
循环,判断,调用方法,变量
}finally{
必须要执行代码
}
平级异常:抛出的异常类之间,没有继承关系,没有顺序
上下级关系的异常,越高级的父类越要写在下面
finally必须执行代码
编译异常:调用了抛出异常的方法,不处理编译失败(try throws)
运行异常:抛出的异常是 RuntimeException
运行异常的特点:
方法内部抛出的异常是运行异常,new XXXException
方法的声明上,不需要 throws 语句,调用者不需要处理
设计原因:
运行异常,不能发生,但是如果发生了,程序员停止程序,修改源代码
运行异常:一旦发生,不要处理,请直接修改源代码,运行异常一旦发生,后面的代码没有执行的意义
public class RuntimeExceptionDemo {
public static void main(String[] args) {
try {
function();
} catch (Exception e) {
// e.printStackTrace();
}
}
public static void function(){
throw new RuntimeException();
}
}
/*
* 继承后,在子类重写父类方法的时候,异常处理
* 结论:
* 父类的方法,结果抛出异常,子类重写后
* 可以不抛出异常
* 也可以抛出异常,但是如果子类要抛,抛出的异常不能大于父类的异常
* 大于指的是继承关系
*
* 父类的方法,没有异常抛出,子类重写后
* 也不能抛出异常
* 如果子类中调用了抛出异常的方法,别无选择,只能try...catch处理
*/
/*
* Throwable中的方法
* String getMessage() 对异常信息的详细描述 异常
* String toString() 对异常信息的简短描述 java.lang.Exception: 异常了
* void printStackTrace() 将异常信息追踪到标准的错误流
* java.lang.Exception: 异常了
at cn.servyou.demo03.Exception04.function(Exception04.java:19)
at cn.servyou.demo03.Exception04.main(Exception04.java:11)
JVM默认调用方法
*/
public class Exception04 {
public static void main(String[] args) {
try {
function();
} catch (Exception e) {
//System.out.println(e.toString());
e.printStackTrace();
}
}
public static void function() throws Exception{
throw new Exception("异常了");
}
}
/*
* 自定义异常
* 继承Exception,或者RuntimeException
* 构造方法中,用super将异常信息,传递给父类
*/
public class FuShuException extends RuntimeException {
public FuShuException(String s){
super(s);
}
}
--------------------------------------------------------------
public class ExceptionDemo {
public static void main(String[] args) {
int avg=getAvg(50,60,-70,80);
System.out.println(avg);
}
/*
* 传递成绩,计算成绩的平均数
* 成绩没有负数,需要抛出异常,停止运算
*/
public static int getAvg(int...source){
int sum=0;
for (int s : source) {
if (s<0) {
throw new FuShuException("成绩错误 "+s);
}
sum=sum+s;
}
return sum/source.length;
}
}
欢迎加入讨论:
<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=89ae88ef49ec8a85695676f7dadeb6a6f359b832273795c456939ae2b07c63c5"><img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="Java交流讨论群" title="Java交流讨论群"></a>