异常

import java.io.IOException;

class myMath
{
	public static int div(int x,int y) throws ArithmeticException,NullPointerException//声明可能抛出的异常,该方法的调用者要处理这些异常
	{
		String s=null;
		System.out.println(s.equals("aaaa"));//空指向异常发生后,后面的语句不执行
		System.out.println("这句话不会执行");
		return x/y;
	}
}

public class ExceptionDemo
{

	public static void main(String[] args) 
	{
		try
		{
			System.out.println(myMath.div(3,0));//在产生异常后try后的语句不会执行,直接跳到catch
			System.out.println("这句话不会执行");
		}
		catch(NullPointerException npe)//在catch里找对应的异常引用,找不到就给JVM
		{
			//npe.printStackTrace();
		}
		catch(ArithmeticException ae)
		{
			ae.printStackTrace();
		}
		//对某个throws了很多异常的方法,你只要有一个try catch编译就不会报错,也就是说,编译器无法知道你真正处理了多少异常,他只检查你处理了没有
		//假如你在某个方法throws了很多异常,但你只catch了该方法throws出来的某一个,编译也不会报错,只是如果抛出的异常实例找不到对应的异常类,就会抛给JVM
		//但是必须要处理至少一个throws出来的异常
		System.out.println("End");
	}
}

class myMath
{
	public static int div(int x,int y)throws ArithmeticException
	{
		if(y==0) 
		{
			throw new ArithmeticException("除零异常");//throw语句一般配合if使用
		}
		return x/y;
	}
}

public class ExceptionDemo2
{
	public static void main(String[] args)
	{
		//System.out.println(myMath.div(2,0));
		//用throw关键字自己实例化异常对象,在调用方法的时候,可以不用try catch语句,但是如果发生了异常,就会直接终止运行
		
		
		try
		{
			System.out.println(myMath.div(2,0));//用了try catch,那就和普通过程一样了(只是抛出的异常对象不是JVM实例化的,是你自己实例化的)
		}
		catch(ArithmeticException ae)//和普通过程一样,在catch里找异常类引用,找得到就处理,找不到还是抛给JVM
		{
			ae.printStackTrace();
			System.out.println("haha");
		}
		System.out.println("haha");
	}
}
class Message
{
	public boolean build() throws Exception
	{
		System.out.println("Build");
		if(false)
		{
			throw new Exception();
		}
		return true;
	}
	
	public void send(String message) throws NullPointerException//throws 声明了函数可能抛出的异常,同时也是规定了函数只能抛出这些异常
	{															//send方法只能抛出NullPointerException,但是send方法里的build方法可能抛出Exception												
		try
		{
			if(this.build())
			{
				if(message==null)
				{
					throw new Exception("消息为空!");
				}
				System.out.println(message);
			}
		}
		catch(Exception e)//所以这个Exception就要被当场处理(因为send方法抛不出去)
		{
			
		}
		finally 
		{
			this.close();
		}
	}
	
	public void close()
	{
		System.out.println("close");
	}
}

public class Main
{
	public static void main(String[] args) throws Exception
	{
		Message msg=new Message();
		msg.send(null);
	}
}
class explodException extends RuntimeException//自定义异常类,继承Exception或者RuntimeException
{
	public explodException(String msg)
	{
		super(msg);
	}
}

class food
{
	public void eat(int num)
	{
		if(num>9999)
		{
			throw new explodException("Too much");
		}
		System.out.println("Eating");
	}
}

public class Main
{
	public static void main(String[] args)
	{
		food f=new food();
		f.eat(100000);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值