Java异常-编程示例

  java的异常处理:抓抛模型
 * 1.抓:异常的处理,有两种方式(①try-catch-finally② throws + 异常的类型)
 * 2.抛:一旦执行过程中,出现异常,会抛出一个异常类的对象。(自动的抛出  vs 手动的抛出(throw + 异常类的对象))
 *     >异常类,既可以是现成的异常类,也可以是自己创建的异常类
 * 异常处理的方式一:try-catch-finally
 * 异常处理的方式二:在方法的声明处,显式的抛出该异常对象的类型
 * 格式:如:public static  void method2() throws FileNotFoundException,IOException{}
 * 当在此方法内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者。
 * 异常的对象可以逐层向上抛,直至main中。当然在向上抛的过程中,可以再通过try-catch-finally进行处理。

当main函数也是向上抛时,抛向的是虚拟机,则由编译异常转化为运行时异常

示例一:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;


public class TestException {
	public static void main(String[] args){
		try{
		method2();
		}catch(FileNotFoundException e){
			System.out.println(e.getMessage());
		}catch(IOException e){
			e.printStackTrace();
		}
		
		method3();
	}
	
	public static void method3(){
		try{
		method1();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	public static  void method2() throws FileNotFoundException,IOException{
		method1();
	}
	
	public static void method1() throws FileNotFoundException,IOException{
		FileInputStream fis = new FileInputStream(new File("hello1.txt"));
		int b;
		while((b = fis.read()) != -1){
			System.out.print((char)b);
		}
		fis.close();
	}
}

示例二:(自定义异常)

自定义的异常类:

//如何自定义一个异常类
//1.自定义的异常类继承现有的异常类
//2.提供一个序列号,提供几个重载的构造器
public class MyException extends Exception{
	
	static final long serialVersionUID = -70348975766939L;
	
	public MyException(){
		
	}
	public MyException(String msg){
		super(msg);
	}
}

 抛出自定义异常的示例

//1.手动的抛出一个异常的例子
//2.抛出的异常类型:若是RuntimeException,可以不显式的处理
//若是一个Exception,必须要显式的处理。
public class TestCircle {
	public static void main(String[] args) {
		Circle c1 = new Circle(2.1);
		Circle c2 = new Circle(2.1);
		try {
			System.out.println(c1.compareTo(c2));
			System.out.println(c1.compareTo(new String("AA")));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
class Circle{
	private double radius;

	public double getRadius() {
		return radius;
	}

	public void setRadius(double radius) {
		this.radius = radius;
	}

	public Circle(double radius) {
		super();
		this.radius = radius;
	}
	//比较两个圆的半径的大小。
	public int compareTo(Object obj) throws Exception{
		if(this == obj){
			return 0;
		}
		else if(obj instanceof Circle){
			Circle c = (Circle)obj;
			if(this.radius > c.radius){
				return 1;
			}else if(this.radius == c.radius){
				return 0;
			}else{
				return -1;
			}
		}else{
			//return -2;
			//手动的抛出一个异常
			//throw new Exception("传入的类型有误!");
			//throw new String("传入的类型有误!");
			throw new MyException("传入的类型有误!");
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值