多态与异常处理

(1)怎样判断对象是否可以转换?参看实例: TestInstanceof.java

运行结果:

 

(2)运行TestCast.java

 

d=m;d=c;c=(Cat)m;出现错误

(3)运行ParentChildTest.java

1.程序运行结果是什么?

 

  1. 你如何解释会得到这样的输出?

第一个输出创建了一个Parent对象,所以调用父类的构造函数。

第二个输出创建了一个Child对象,所以调用子类的构造函数。

将子类child对象赋值给父类,将父类覆盖调用了子类的创建方法。

第四个parent.myValue++是对父类的变量进行运算,而parent.myValue()实际上调用的还是子类的构造方法。

第五个((Child)parent).myValue++强制类型转化。

子类和父类具有相同的方法和字段,定义的parent为父类,child为子类,所以parent调用父类的方法,child调用子类型的方法。子类中的myValue值代替或隐藏父类值。

3.   计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?

当子类与父类拥有一样的方法,并且让父类变量引用一个子类对象时,到底调用那个方法,由对象自己真实类型决定:对象时子类的,它就调用子类的方法,是父类型的,它就调用父类型的方法。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

如果子类被当作父类使用,则通过子类访问的字段是父类的。

阅读并运行AboutException.java示例

 

EmbedFinally.java程序运行的结果

 

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

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

 

不一定执行。Try块中有System.exit(0);这样的语句,finally语句不会执行。

 PrintExpressionStack.java示例

 

 

Java异常处理总结:

一般构造如下

try{程序代码}catch(异常类型异常的变量名1){程序代码}catch(异常类型异常的变量名2){程序代码} finally{程序代码}

catah可以有多个,用来匹配多个异常,匹配上多个中的一个后,执行catch语句块时仅仅执行匹配的异常。Catch的类型是自己定义的,表示代码抛出异常类型,异常的变量名表示抛出的异常对象的引用。

ExceptionLinkInRealWorld.java运行

 

 

动手动脑:

实验要求:

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

源代码:

import java.util.InputMismatchException;

import java.util.Scanner;

 

public class Test {

 

public static void main(String[] args) {

// TODO 自动生成的方法存根

int n;             

Scanner sc=new Scanner(System.in);

System.out.println("请输入一个整数(0~100):");

int i=0;  //控制出入正确时,判断完成结束程序

for(;;)   //循环,直到输入正确

{

try

{

  n=sc.nextInt();

  if(n<0||n>100){  //判断整数范围是否正确

  System.out.println("输入整数不在范围!");

  }

  else{

  

       i=1;

       if(n<60&&n>=0){

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

          }

       else if(n<70){

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

          }

       else if(n<80){

        System.out.println("");

          }

       else if(n<90){

            System.out.println("");

          }

       else if(n<=100){

        System.out.println("");

          }

      }

 }

        catch(InputMismatchException e)

{

         sc.next();//读取到有效字符后才可以结束输入

         System.out.println("输入格式不正确,请输入整数(0~100)");

            

}

if(i==1)//结束循环

{

break;

}

 

}

}

 

}

运行结果截图:

 

posted @ 2015-11-13 18:02  听你笑  阅读(369)  评论(0编辑  收藏  举报