二刷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
		}
	}

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值