黑马程序员_throws、throw关键字和自定义异常类以及异常的总结

------- android培训java培训、期待与您交流! ----------

抛出异常有两种方式:

1、指定方法抛出异常,使用throws关键字来完成

2、程序中抛出异常,使用throw关键字来完成

throws关键字:

如果方法内的程序代码可能会发生异常且方法内又没有使用任何的代码块来捕捉这些异常时,则必须在声明方法时一并指明所有可能发生的异常,以便让调用此方法的程序得以做好准备来捕捉异常。也就是说如果方法会抛出异常,则可将处理此异常的try-catch-finally块写在调用此方法的程序代码内。如果要由方法抛出异常,则方法必须以下面的格式来声明:

方法名称(参数......)throws 异常类1,异常类2,......

举个例子说明:

class ThrowsTest
{
	public void test(int a,int b)throws Exception	//throws在指定方法中不处理异常,在调用此方法的地方处理
	{
		int c;
		c = a / b;
		System.out.println(a+"/"+b+" = "+c);
	}
}

public class ThrowsExceptionTest
{
	public static void main(String args[])throws Exception
	{
		ThrowsTest t = new ThrowsTest();
		t.test(4,0);	//这里也不做处理try......catch......finally异常处理,让jvm来做处理,所以就让主函数throws异常,这样就让虚拟机去处理
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ThrowsExceptionTest.java

C:\Users\lenovo\Desktop>java ThrowsExceptionTest
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at ThrowsTest.test(ThrowsExceptionTest.java:6)
        at ThrowsExceptionTest.main(ThrowsExceptionTest.java:16)

C:\Users\lenovo\Desktop>

throws总结:

如果在类的方法中用throws抛出一个异常,则在调用它的地方就必须明确地用try-catch来捕捉。如果在main()方法后再用throws Exception声明的话,那么程序也是依然可以编译通过的。也就是说在调用用throws抛出异常的方法时,可以将此异常在方法中再向上传递,而main()方法是整个程序的起点,所以如果在main()方法处如果再用throws抛出异常,则此异常就将交由JVM进行处理了。

throw关键字:

在程序中抛出异常时,一定要用到throw这个关键字。

使用格式:

throw new 异常类对象;	//throw一个实例对象

举个例子说明:

public class ThrowExceptionTest
{
	public static void main(String args[])
	{
		int a=4,b=0;
		try
		{
			if
				throw new ArithmeticException("算术异常");	//抛出异常
			else
				System.out.println(a+"/"+b+" = "+a/b);	//若不抛出异常,则执行此行
		}
		catch(ArithmeticException e)
		{
			System.out.println("抛出异常为:"+e);
		}
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ThrowExceptionTest.java

C:\Users\lenovo\Desktop>java ThrowExceptionTest
抛出异常为:java.lang.ArithmeticException: 算术异常

C:\Users\lenovo\Desktop>

程序说明:
1、程序ThrowExceptionTest是要计算a/b的值。因b是除数,不能为0,若b为0,则系统会抛出ArithmeticException异常,代表除到0这个数。
2、在try块里判断除数b是否为0,如果b=0,则运行throw语句抛出ArithmeticException异常,如果b不为0则输出a/b的值,把b设为0,因此try块里会抛出异常并由catch()捕捉到异常。
3、抛出异常时throw关键字所抛出的是异常类的实例对象,因此throw语句必须使用new关键字来产生对象。

自定义异常类:

为了各种异常,Java可通过继承的方式编写自己的异常类。因为所有可处理的异常类均继承自Exception类,所以自定义异常类也必须继承这个类。

定义格式:

class 异常名称 extends Exception
{
	......;
}

举个例子说明:

class CustomException extends Exception
{
	public CustomException(String msg)
	{
		super(msg);	//调用Exception类的构造方法,初始化异常信息
	}
}

public class CustomExceptionTest
{
	public static void main(String[] args)
	{
		try
		{
			throw new CustomException("自定义异常");	//在这里用throw直接抛出一个CustomException类的实例对象
		}
		catch(Exception e)
		{
			System.out.println(e);
		}
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac CustomExceptionTest.java

C:\Users\lenovo\Desktop>java CustomExceptionTest
CustomException: 自定义异常

C:\Users\lenovo\Desktop>

程序说明:

1、先声明一个自定义异常类CustomException,让此类继承Exception类。

2、使用super关键字调用父类Exception的有参数的构造方法,传入的为异常信息。

Exception构造方法:

public Exception(String message)
{
	......;
}

3、在主函数中throw抛出CustomException异常类的实例化对象。

在JDK中提供的大量API方法之中含有大量的异常类,但这些类在实际开发中往往并不能完全的满足程序员对程序异常处理的需要,在这个时候就需要用户自己去定义所需的异常类了,用一个类清楚的写出所需要处理的异常。

异常的总结:

1、程序中没有处理异常代码时,Java的默认异常处理是:

(1)、抛出异常。

(2)、停止程序运行。

2、异常处理是由try、catch与finally三个关键字所组成的程序块。

3、try程序块中有异常发生时,程序的运行便会中断,抛出“由系统类所产生的对象”,运行顺序如下:

(1)、抛出的对象如果属于catch()括号内所要捕捉的异常类,catch会捕捉此异常并到catch程序块里继续执行。

(2)、无论try程序块是否捕捉到异常也不管捕捉到的异常是否与catch()括号里的异常相同,最后都会运行finally块里的程序代码。

(3)、 finally中的代码是异常的统一出口,无论是否发生异常都会执行此段代码,finally只有一种情况不会执行,当执行到System.exit(0);fianlly不会执行。

4、当异常发生时,有两种处理方式:

(1)、用Java默认的异常处理机制去处理。

(2)、编写try-catch-finally块来捕捉异常。

5、异常可分为两大类:java.lang.Exception与java.lang.Error类。

6、RunntimeException可以不编写异常处理的程序代码,依然可以编译成功,它是在程序运行时才有可能发生的,而其它的Exception一定要编写异常处理的程序代码才能使程序通过编译。

7、catch()括号内,只接收由Throwable类的子类所产生的对象,其它的类均不接收。

8、抛出异常有两种方式:

(1)、指定方法抛出异常。(throws)

(2)、在程序中抛出异常。(throw)

9、程序中抛出异常时,使用throw这个关键字,方法中抛出异常使用throws,throws抛出的异常可以写在调用此方法的try-catch-finally程序代码块中进行处理。

------- android培训java培训、期待与您交流! ----------

详细请登录:http://edu.csdn.net/heima

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值