java课堂练习——异常

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

代码执行时不发生异常。

jvm在处理浮点数时,生成的是ddiv字节码指令,i/0,0转化为浮点数0.0,而0.0是double类型的,并不精确,所以不会抛出异常。

jvm在处理整数时,生成的是idiv字节码指令,整数除0就是除0,会抛出异常。

第一个程序没有执行finally?

finally 必须与 try 或 try/catch 配合使用。因为并没有执行try,所以不会执行finally,异常是由系统捕获的,所以try并没有抛出。除此之外,不能退出 try 而不执行其 finally 。如果 finally 存在,则它总会执行。(无论从那点看,这个陈述都是正确的。有一种方法可以退出 try 而不执行 finally 。如果代码在 try 内部执行一条 System.exit(0); 语句,那么应用程序终止而不会执行finally 执行。另一方面,如果您在 try 执行期间拨掉电源,finally 也不会执行。)

2.阅读以下代码(CatchWho.java),写出程序运行结果:

3.写出CatchWho2.java程序运行的结果

4.辨析:finally语句块一定会执行吗?

请通过 SystemExitAndFinally.java示例程序回答上述问题

此程序中finally并未执行,原因是catch语句中的 System.exit(0);使得程序退出jvm了,所以finally也就不执行了。

总结try catch finally嵌套使用执行顺序。

1)try语句嵌套从外层到内层执行,在try语句中,哪一层出错,哪一层就抛出异常,后边的try语句就不再执行,如果该层存在catch就进行相应的捕获,有该层的finally也执行,除非finally遇到不执行的情况;

2)如果该层没有catch进行捕获,就向外抛出,去找catch,如果没有catch进行捕获,就终止程序。

5.请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。

1)try抛出一个异常之后,程序会跳出try,不再执行try后边的语句,开始对catch进行匹配,处理异常;

2)try嵌套中,抛出的异常只有被处理才可以按顺序抛出下一个异常,如果不处理,程序就终止;

3)try抛出异常之后,就跳出了try语句,内层catch无法捕获就继续向外抛,所以外层也就有异常,外层语句不执行,第二个程序 throw  new ArithmeticExcepption没有执行。

4)第三个程序,try第一层第二层没有异常不用捕获,执行完之后到第三层,除0有异常,catch捕获,执行第三层的finally然后,顺序执行第二层,第一层的finally。

6.编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。

要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。

源代码:

import java.util.Scanner;

class cepingcuowuException extends Exception{

public cepingcuowuException(String s){

super(s);

}

}

class fenshu{

int score;

public void panduan(int score){

score=score;

if(score<60)

{

System.out.println("不及格!");

}

if(score>=60){

{

System.out.println("及格!");

if(score<=70)

System.out.print("中");

else if(score<80 && score>=70)

System.out.print("良");

else if(score>=80)

System.out.print("优");

}

}

}

}

public class Test {

public static void main(String args[])throws cepingcuowuException{

fenshu fenshu = new fenshu();

System.out.println("请输入测评成绩:");

try{

Scanner in = new Scanner(System.in);

String b = in.next();

boolean result=b.matches("[0-9]+");

if(result==true)

{

int c=Integer.valueOf(b);

if(c > 100||c < 0)

throw new cepingcuowuException("输入范围不正确!");

else

fenshu.panduan(c);

}

if(result == false)

throw new cepingcuowuException("输入格式错误!");

}

catch(cepingcuowuException e){

System.out.println(e);

}

}

}

程序截图:

时间: 2024-10-13 16:55:52

java课堂练习——异常的相关文章

JAVA中常见异常小结

1.java.lang.ArithmeticException 算术运算异常,例如除数为0,所以引发了算数异常 2.Java.lang.StringIndexOutOfBoundsException:  这是截取字符串substring()产生的下标越界异常.原因是可能是字符串为空,或长度不足1 3.Java.lang.NullPointerException空指针异常 出现该异常的原因在于某个引用为null,但却调用了它的某个方法,这时就会出现该异常 4.ClassCastException

Java基础笔记-异常

Java中的异常机制: Throwable类是 Java 语言中所有错误或异常的超类.主要包括两个子类: Error和Exception. 一般中要处理的异常是Exception. Java中最常见的处理方式是try catch finally.格式为: try { 需要被检测的异常. } catch(异常类 变量) { 处理异常的代码()处理方式 } finally { 一定会被执行的代码语句 } 一个简单的异常处理代码及有关函数的应用: 1 /* 2 异常:Exception. 3 处理异常

sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class异常解决方法

package com.wzs; import java.lang.reflect.ParameterizedType; public class T1<T> {     private Class classt;     public T1() {         ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();         this.classt = (Class)

Java中的异常和处理详解

原文出处:代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. Java提供了更加优秀的解决办法:异常处理机制. 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰. Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手

多线程之同步synchronized的使用不当造成java.lang.IllegalMonitorStateException 异常

package com.bjsxt.d822.a2; public class SubThread9 extends Thread { /* * 当多个对象同时对同一个资源操作,则必须使用同步机制来控制. * * 1.当方法去操作共享资源时,则该方法必须通过 synchronized关键字来修饰. * 2.当方法被 synchronized 关键字修饰时,还需要 wait() 和 notify()两个方法配合使用. * wait()方法是让当前线程对象进入等待状态. * notify()方法是让

getActionBar().setTitle(); Java.lang.NullPoint异常解决方案

getActionBar().setTitle(); Java.lang.NullPoint异常解决方案,是由于低版本不支持直接获取的缘故,修改方案: try changing your theme to this <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> and not the AppCompat Version 另外一种情况,如果是低版本,API低于

JAVA中的异常(异常处理流程、异常处理的缺陷)

异常处理流程 1)首先由try{...}catch(Exception e){ System.out.println(e); e.printStackTrace(); }finally{...}结构 2)当JVM遇到异常时,会产生一个Exception对象 或 继承自Exception的子类的对象. 3)将异常对象向上层(调用它的代码块)抛出,知道碰到一个catch块(作相应处理) 或 一直抛到了最外层(导致程序异常终止).(并停止异常之后的代码的执行,但是finally块中的代码还会执行!换句

java中关于异常的处理

初学java的时候,当我们碰到异常时,一般会把异常直接throws抛出去,或则在catch的时候,简单的写一句打印异常信息,但是在实际开发中,是不能这么做的.如果我们将底层的某一个异常简单的print出去,那么这个异常的捕获是没有起到任何作用,反而给编译器一个"异常已处理"的假象,导致有异常的程序会继续往下执行,这是不允许的:如果我们直接将异常抛出去,抛给上一层,也是徒劳的,反而给上一层带来麻烦. 为了避免这样的情况发生,我们一般会将异常进行转换,将编译时异常转变成运行时异常,再thr

JAVA之IO技术-将java程序的异常信息保存在文件中

package ioTest.io2; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Properties; /* * 将应用程序的异常信息输出到指定的log文件中 */ public class ExceptionToFile { public static void main(String[] args) throws FileNotFoundException { int