二刷java基础第十七天——异常
Posted 名字真的很急用
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二刷java基础第十七天——异常相关的知识,希望对你有一定的参考价值。
异常:在程序过程中表现出不正常的现象
java如何形容异常:
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,
才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
异常有一个超类Throwable它有下面有很多个子类,很多子类都继承与它,其中Error和exception
Error:表示错误类,表示java运行时产生的系统内部错误或者资源耗尽问题,是比较严重的
exception:异常类,表示程序本身可以处理的错误。它的子类的中有一个特殊的RuntimeException(运行时异常),除此其他的子类表示编译时异常。
编译时异常和运行时异常
编译时异常:都是exception的子类,必须要做一个显示的处理,调试代码,否则无法编译,也就是卡在了编译阶段。
运行时异常:都是RunableException的子类,卡在了程序运行阶段,通过了编译,但运行不了,必须修改代码。
异常的处理机制(默认)
当程序遇到异常
1.将异常抛给调用者(JVM)
2.JVM会默认的去做相应的处理:
01.new异常对象,异常的名称,原因,以及出现的位置等信息
02.停掉程序
Throwable中常用的方法:
String getMessage():返回此Throwable的详细消息字符串
void printStackTrace():将此Throwable极其追踪输出到标准错误流,在控制台上打印Throwable对象封装的异常信息
void printStackTrace(PrintStream s):将此Throwable极其追踪输出到指定输出流
异常捕获
try catch 和 finally
处理异常:
Throws(声明式)方式处理异常:特点:为了提示调用者,运行时异常可以不用声明,但是编译时异常 必须写
写在方法的声明部分()
public void method()throws 异常类名
throw抛异常:就是直接打印到控制台,没有交给jvm处理,自己处理抛到控制台
throw new 异常类:位置方法内
如果是运行时异常:不用在方法上去声明异常
如果是编译时异常:必须在方法上声明异常
编译时异常:有throws不一定有throw 但有throw一定有throws
try…catch处理异常的机制
自己处理方法是利用这个处理异常机制。
自己开发站在开发者角度去看 多利用throw和throws 自己处理方法站在调用者是利用try…catch
可以多层catch,大的类要在最底层
采用try…catch,异常处理完成后 不影响其他后续代码
如果有finally,一定执行。
应该在声明方法抛出异常还是在方法中捕获异常?
答:捕捉并处理知道如何处理的异常,而抛出不知道如何处理的异常。
public class 数组异常 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = new int[4];
a[0]=10;
a[1]=11;
a[2]=12;
a[3]=13;
// print(a);
// System.out.println();
try {
print(a);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
}
public static void print(int a[]) {
System.out.println(a[4]);
//System.out.println(a[2]);
throw new ArrayIndexOutOfBoundsException("数组下标异常");
}
}
public class Test {
public static int a=0;
public static void main(String[] args){
// TODO Auto-generated method stub
// a = test(4,0);
int arr[] = {1,2,3,4};
test(arr);
}
public static void test(int arr[]){
// if(b==0){
// throw new ArithmeticException();
// }
// return a/b;
for (int i = 0; i < 5; i++) {
if(i==4) {
throw new ArrayIndexOutOfBoundsException();
}
System.out.println(arr[i]);
}
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutionException;
public class try嵌套 {
public static void main(String[] args) {
// TODO Auto-generated method stub
testTryCatch();
}
public static void testTryCatch(){
SimpleDateFormat sm = new SimpleDateFormat();
try {
int i=1/0;
try {
Date d = sm.parse("");
} catch (ParseException e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
} catch (ArithmeticException a) {
// TODO: handle exception
System.out.println(a.getMessage());
}
// try {
// int i=1/0;
// // throw new ArithmeticException("不能为0");
//
// }
// catch (ArithmeticException a) {
// System.out.println(a.getMessage());
// }
}
}
import java.text.SimpleDateFormat;
public class trycatch {
public static void main(String[] args) {
// TODO Auto-generated method stub
// int a ;
//
// try { //这里是捕获异常
// a=1/0;
// } catch (Exception e) { //这里面是处理异常
// // TODO: handle exception
// System.out.println("不能这样写!");
// System.out.println(e.getMessage());
// }
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
sim.parse("");
} catch (Exception e ){
// TODO: handle exception
}
}
}
以上是关于二刷java基础第十七天——异常的主要内容,如果未能解决你的问题,请参考以下文章