Java——第六章(异常处理和文件IO流操作)

异常是程序运行过程中出现的错误。例如:分母为0,数组超出设置的长度啊等等……


异常类是Throwable类,Throwable 类是 Java 语言中所有错误或异常的父类。


异常的分类:



Throwable下面有Error和Exception两个子类。


Error是程序无法处理的错误,比如OutOfMemoryError(内存溢出)、ThreadDeath(线程死亡)等。

这些异常发生时, Java虚拟机(JVM)一般会选择线程终止。是一种比较严重的错误,程序并不能自己解决。


重点讲Exception类,下面分RuntimeException异常和非RuntimeException异常(也就是运行时异常和非运行时异


常),运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。


这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。


常见的RuntimeException异常有:


1.NullPointerException(空指针异常) eg:String s =null; System.out.println(s.length()); s对象为空,无法调用他的方法;


2.ArithmeticException(算术逻辑异常) eg:System.out.println(12/0);


3.ClassCastException(类型转换异常)eg:int temp="abc"; 

4.NumberFormatException(数字格式化异常)  将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。


eg:   String str="123456*s",int a = Integer.parseInt(str)


5.ArrayIndexOutOfBoundsException(数组下标越界异常)


eg:int []a ={1,5,6,8};System.out.println(a[5]);


非运行是异常,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。


如IOException、SQLException、ClassNotFound等。


异常了解了,接下来是异常的处理。


异常的处理大体上有三种解决办法:try--catch--finally结构、throws结构、throw结构。


try--catch--finally结构用来捕获异常,处理异常,


try{
语句块1
}catch(Exception e){
语句块2
}finally{
语句块3
}


执行顺序,先对语句块1操作,有异常执行catch语句块2,没有异常不执行语句块2,最后不论有没有异常执行语句块


3. 

public class Test {

	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		try {
			int a[] = {1,2,3,6};
			System.out.println(a[4]);
			String s =null;
			s.length();
		} catch (RuntimeException re) {
			// TODO: handle exception
			re.printStackTrace();
		}catch(Exception e)
		{
			e.printStackTrace();
		}
		catch(Throwable t)
		{
			t.printStackTrace();
		}}}

将有可能出错的代码放入try语句块中,如果有错将执行catch语句块,并且这种结构支持一try多catch。


注意:


可以有多个catch结构,要求是一级比一级大,从子类到父类,printstacktrace方法是用来提示系统报错。


如果遇到错误,下面的语句将不执行。


throws结构:throws 用来抛出异常,不进行捕获处理。

注意:若在本层结构抛出throws异常,需要接着做上级结构抛出异常,直到main方法中抛出,交给系统处理。可以选


择自己处理 try-catch-finally。并且,检测范围是整个方法。


public class ThtowsTest {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		f();
		f1();//main方法可以不向系统抛异常,在f1()中对f()进行捕获处理。
	}
	public static void f() throws Exception
	{
		System.out.println("dd");
	}
	public static void f1 ()
	{
		try {
			f();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


throw结构不常用,常与if联用,用来自己制造异常,不抛出,不处理,本身就是个异常。不会主动抛出  也不会主


动处理。人为的抛出  人为的处理。


public class ThrowTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a [] = {1,2,3,4,5};
		int i = 100;
		if (i==1)
		{
			try {
				System.out.println("出错了!^_^");
				throw new Exception("数组越界啦!");
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		System.out.println(a[i]);
	}

}


java还提供自定义异常,自己定义一个异常,继承Exception。(常用来装逼。。。)


异常类:

public class MyException extends Exception{
	public MyException(String message)
	{
		super(message);
	}
}


定义一个静态方法:
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringTools {
	public static String getTime(long time) throws MyException
	{
		if(time<=0)
		{
			throw new MyException("你丫的系统时间都输成快负的了!");
		}
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
		return sdf.format(new Date(time));
		
	}
}


测试类:

public class MainTest {

	public static void main(String[] args) throws MyException {
		// TODO Auto-generated method stub
		long l =System.currentTimeMillis();
		System.out.println(StringTools.getTime(0));
	
	}

}

系统报错:

Exception in thread "main" com.example.six.MyException: 你丫的系统时间都输成快负的了!
	at com.example.six.StringTools.getTime(StringTools.java:11)
	at com.example.six.MainTest.main(MainTest.java:9)


未完待续……














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值