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)
*/
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);
}
}
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
}
}