博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java多态与异常处理——动手动脑
阅读量:4975 次
发布时间:2019-06-12

本文共 3065 字,大约阅读时间需要 10 分钟。

代码一:

class Mammal{}

class Dog extends Mammal {}

class Cat extends Mammal{}

public class TestCast {

    public static void main(String args[])  {   

        Mammal m;   

        Dog d=new Dog();   

        Cat c=new Cat();  

        m=d;   

        d=m;  

        d=(Dog)m;   

        d=c;  

        c=(Cat)m;

       }

}

结果截图:

错误分析:

1、子类对象可以直接赋给基类变量。

2、基类对象要赋给子类对象变量,必须执行类型转换,其语法是:子类对象变量=(子类名)基类对象名;也不能乱转换。如果类型转换失败Java会抛出以下这种异常:ClassCastException

代码二:

import javax.swing.*;

class AboutException {   

   public static void main(String[] a) {     

        int i=1, j=0, k;      

        k=i/j;  

   try  

  {   

        k = i/j;    // Causes division-by-zero exception  

        //throw new Exception("Hello.Exception!");

   }

   catch ( ArithmeticException e)  

   {  

       System.out.println("被0除.  "+ e.getMessage());

   }  

   catch (Exception e)  

   {  

          if (e instanceof ArithmeticException)    

          System.out.println("被0除");   

          else  

         {     

                System.out.println(e.getMessage());    

         }

    }

    finally    

   {       

         JOptionPane.showConfirmDialog(null,"OK");     

    }   

  }

}

结果截图:

结果分析:

1、把可能会发生错误的代码放进try语句块中。

2、当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。

3、catch语句块中的代码用于处理错误。

4、当异常发生时,程序控制流程由try语句块跳转到catch语句块。
5、不管是否有异常发生,finally语句块中的语句始终保证被执行。

6、如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

代码三

public class CatchWho {

    public static void main(String[] args) {
        try {
            try {
                throw new ArrayIndexOutOfBoundsException();
            }
            catch(ArrayIndexOutOfBoundsException e) {
               System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");
            }
 
            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println("发生ArithmeticException");
        }
        catch(ArrayIndexOutOfBoundsException e) {
           System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");
        }
    }
}

结果截图:

代码四:

public class CatchWho2 {
    public static void main(String[] args) {
        try {
            try {
                throw new ArrayIndexOutOfBoundsException();
            }
            catch(ArithmeticException e) {
                System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");
            }
            throw new ArithmeticException();
        }
        catch(ArithmeticException e) {
            System.out.println("发生ArithmeticException");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");
        }
    }
}

结果截图:

结果分析:

1、可以有多个catch语句块,每个代码块捕获一种异常。在某个try块后有两个不同的catch 块捕获两个相同类型的异常是语法错误。

2、使用catch语句,只能捕获Exception类及其子类的对象。因此,一个捕获Exception对象的catch语句块可以捕获所有“可捕获”的异常。

3.将catch(Exception e)放在别的catch块前面会使这些catch块都不执行,因此Java不会编译这个程序。

代码五:

public class EmbededFinally {

     public static void main(String args[]) {          

        int result;          

   try {               

            System.out.println("in Level 1");

            try {                    

                       System.out.println("in Level 2");   // result=100/0;  //Level 2                   

                       try {                        

                                  System.out.println("in Level 3");                           

                                   result=100/0;  //Level 3                    

                             }                     

   catch (Exception e) {                          

                                       System.out.println("Level 3:" + e.getClass().toString());                   

                                }                                    

    finally {                          

                     System.out.println("In Level 3 finally");                   

              }                                    // result=100/0;  //Level 2

    }                

  catch (Exception e) {                   

                                   System.out.println("Level 2:" + e.getClass().toString());              

                               }     

  finally {                     

                  System.out.println("In Level 2 finally");               

            }                 // result = 100 / 0;  //level 1        

        }           

catch (Exception e) {        

                                   System.out.println("Level 1:" + e.getClass().toString());        

                              }          

 finally {     

                   System.out.println("In Level 1 finally");     

            }    

      }

}

结果截图:

结果分析:当有多层嵌套的finally时,异常在不同的层次抛出 ,在不同的位置抛出,可能会导致不同的finally语句块执行顺序。

 

转载于:https://www.cnblogs.com/dongge0611/p/4964254.html

你可能感兴趣的文章
小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(四)Alert View视图 学习笔记...
查看>>
百度SDK的使用第一天
查看>>
bzoj3156 防御准备
查看>>
XE7/X10.2 Datasnap使用 dbExpress 连接MySQL数据库
查看>>
Eclipse修改编码格式
查看>>
生成器和协程 —— 你想知道的都在这里了
查看>>
初级算法-6.两个数组的交集 II
查看>>
欧拉函数 / 蒙哥马利快速幂 / 容斥
查看>>
Makefile
查看>>
软件开发文档以及项目开发流程理解
查看>>
2019微软Power BI 每月功能更新系列——Power BI 4月版本功能完整解读
查看>>
truncate 、delete、drop的区别
查看>>
DynamoDB 中的限制
查看>>
mysql做主从配置
查看>>
Docker练习例子:基于 VNCServer + noVNC 构建 Docker 桌面系统
查看>>
《码出高效 Java开发手册》第六章 数据结构与集合
查看>>
Python获取本机外网IP
查看>>
sleep和wait的区别
查看>>
[导入]弯管机3D DEMO
查看>>
关于51单片机使用printf串口调试
查看>>