java异常处理技术






1.

package ex03;

public class Demo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		for (int i = 3; i >= -2; i--) {
			try {
				System.out.print("100/" + i + ":" + 10 / i);
			} catch (java.lang.ArithmeticException e) {// 可以用Exception 父类
				e.printStackTrace();
				System.out.println("发生错误!");
			} catch (Exception e) {// 更细致的放在前面
				e.printStackTrace();
				System.out.println("100/" + i + ":发生错误!");
			} finally {
				System.out.println("-----");
			}
		}
	}
}
/*
100/3:3--------
100/2:5--------
100/1:10--------
java.lang.ArithmeticException: / by zero
	at ex03.Demo01.main(Demo01.java:10)
发生错误!
--------
100/-1:-10--------
100/-2:-5--------
*/

2.

package ex03;

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

public class Demo01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File f = new File("c:\1.text");
		try {
			InputStream is = new FileInputStream(f);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
/*
java.io.FileNotFoundException: c:.text (文件名、目录名或卷标语法不正确。)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at ex03.Demo01.main(Demo01.java:14)
*/



3.

package ex03;

import java.io.FileNotFoundException;

public class Demo01 {

	public void method1() throws FileNotFoundException, NumberFormatException {

	}

	public void method2() {

		try {
			this.method1();
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}


系统自动抛出的异常
所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
语句抛出的异常 
用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。


throw是语句抛出一个异常。
语法:throw (异常对象);
         throw e;

throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
语法:[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}
            public void doA(int a) throws Exception1,Exception3{......}


throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。throw语句可以明确抛出一个异常对象,使程序跳到相应的异常处理语句。throw new 异常类(参数); 

throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。


throw是具体向外抛异常的动作,所以它是抛出一个异常实例。throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。



4.酒精的浓度异常

(1)AlcoholException

package ex03;

//自定义酒驾异常
public class AlcoholException extends Exception {

	public AlcoholException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

}

(2)AlcoholCheck

package ex03;

public class AlcoholCheck {

	public static void check(double alcohol) throws AlcoholException {
		if (alcohol > 120) {
			throw new AlcoholException("酒精异常!");
		} else
			System.out.println("酒精正常!");
	}

}

(3)TestThrow

package ex03;

import java.util.Scanner;

public class TestThrow {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入");
		double alcohol = sc.nextDouble();
		try {
			AlcoholCheck.check(alcohol);
		} catch (AlcoholException e) {
			System.out.println(e.getMessage());
			System.out.println("酒精超标后续处理");
		}
	}
}
/*
请输入
220
酒精异常!
酒精超标后续处理
*/

5.



(1)NotPositiveException

package ex04;

public class NotPositiveException extends Exception{

	public NotPositiveException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

}

(2)DigitCheck

package ex04;

public class DigitCheck {
	
	public static void check(double x,double y,double z) throws NotPositiveException{
		if(x<=0||y<=0||z<=0){
			throw new NotPositiveException("出现负数或0!");
		}
		else
			System.out.println("正常!"+"平均值为:"+(x+y+z)/3);
	}

}


(3)Average

package ex04;

import java.util.Scanner;

public class Average {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入");
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		double ave = (a + b + c) / 3;
		try {
			DigitCheck.check(a, b, c);
		} catch (NotPositiveException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
/*
请输入
0 8 9
ex04.NotPositiveException: 出现负数或0!
	at ex04.DigitCheck.check(DigitCheck.java:7)
	at ex04.Average.main(Average.java:15)
*/
/*
请输入
2 4 6
正常!平均值为:4.0
*/



12.04更新...老师演示

package work04;


import java.util.Scanner;

/*
 * 求平均数
 */
public class Average {
	
	private int sum=0;
	private int count=0;
	//累加并求出平均数
	public int getAverage(String input) throws NotPositiveException{
		int x=Integer.parseInt(input);
		if(x<=0){
			throw new NotPositiveException("!!!");
			
		}else{
			sum+=x;
			count++;
		}
		return sum/count;
	}
	public static void main(String[] args){
		
		Scanner sc=new Scanner(System.in);
		Average aver=new Average();//放到循环的外面
		for(int i=1;i<=5;i++){
			System.out.println("请输入第"+i+"个数字");
			
			//获取输入的字符串
			String inputt=sc.nextLine();
			try {
				System.out.println("平均数:"+aver.getAverage(inputt));
			} catch (NotPositiveException e) {
				// TODO Auto-generated catch block
				System.out.println(e.getMessage());
				i--;
				//e.printStackTrace();
			}catch(NumberFormatException e){
				System.out.println("请输入正确的数值");
				i--;
			}catch(Exception e){
				System.out.println("不对哎");
			}
			
		}
	}

}

package work04;

public class NotPositiveException extends Exception {

	public NotPositiveException(String arg0) {
		super(arg0);
		// TODO Auto-generated constructor stub
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值