zoukankan      html  css  js  c++  java
  • 7 动手动脑及小程序

    1.PPT  9页)http://dev.21tx.com/2004/12/15/12360.shtml

    现在有三个类:

    class Mammal{}//

    class Dog extends Mammal {}//

    class Cat extends Mammal{}//

    针对每个类定义三个变量并进行初始化

    Mammal m=null ;

    Dog d=new Dog();

    Cat c=new Cat();

    下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?

    m=d;

    d=m;

    d=(Dog)m;

    d=c;

    c=(Cat)m;

      先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确.

    1)事前判断

         m=d是可以的,表示我定义了一个Mammal类型的引用,指向新建的 Dog类 型的对象,即父类的引用指向了自己的子类的对象。由于 Dog是继承自它的父类Mammal,所以Mammal类型的引用是可以指向Cat类型的对象的。。但是d=m不行,因为不能把父类对象引用赋给子类对象引用变量,除非进行强制转化,也就是向下转型(父类转子类)d=(Dog)m

         d=c也会引起编译错误(把d=m注释掉),父类型的引用必须指向子类的对象,即指向谁才能转换成谁,则因为父类引用指向的是Cat类的对象,而要强制转换成Dog类,这是不可能的。

    2)运行结果

      

    2.运行以下测试代码(PPT  10页)

     1)左边的程序运行结果是什么?

         

     2)你如何解释会得到这样的输出?

        public class ParentChildTest {

    public static void main(String[] args) {

    Parent parent=new Parent();

    parent.printValue();//输出100

    Child child=new Child();

    child.printValue();//输出200

            /*父类的引用指向自己的子类对象,所以输出200*/

    parent=child;

    parent.printValue();

            /*在上列中父类parent的引用指向自己的子类对象child,由于printValue()方法在父类与子类中都有定义,则子类child覆写了这个方法,输出200*/

            parent.myValue++;

    parent.printValue();

            /*通过强制转换,把父类对象的引用赋给子类对象,然后加1,所以输出201*/

    ((Child)parent).myValue++;

    parent.printValue();

    }

    }

    class Parent{

    public int myValue=100;

    public void printValue() {

    System.out.println("Parent.printValue(),myValue="+myValue);

    }

    }

    class Child extends Parent{

    public int myValue=200;

    public void printValue() {

    System.out.println("Child.printValue(),myValue="+myValue);

    }

    }

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

         父类的引用可以指向了自己的子类的对象,而该引用只能调用父类中定义的方法和变量;如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。

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

      

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

      

    5.写出CatchWho2.java程序运行的结果。(PPT  25页)

    6.请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。(PPT 26页)

     

    7.辨析:finally语句块一定会执行吗?请通过 SystemExitAndFinally.java示例程序回答上述问题。(PPT 27页)

     

    只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行。如果在try语句块之前返回(return)或者抛出异常,try对应的finally语句块就不会执行。

    8.如何跟踪异常的传播路径?

     Ø   当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。

    Ø可使用printStackTrace 和 getMessage方法了解异常发生的情况:

    Ø    printStackTrace:打印方法调用堆栈。

    Ø    每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在    Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。

    9.PrintExpressionStack.java运行结果:

      

    10.动手动脑

       编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。

       1)源代码

        

    import java.util.*;
    
    public class GradeScore {
    
        public static void Chuli(){
    
              
               try{
                   Scanner sc = new Scanner(System.in);
                   System.out.print("请输入分数:");
                   int score=sc.nextInt();
                   if(score>100||score<0)
                   {
                       System.out.println("请输入正整数!");
                       score=sc.nextInt();
                       }
                   else{
                       if(score>=0&&score<60)   System.out.println("不及格");
                          else if(score>=60&&score<70)   System.out.println("及格");
                          else if(score>=70&&score<80)   System.out.println("中");
                          else if(score>=80&&score<90)   System.out.println("良");
                          else    System.out.println("优");
                   }
                   
               }catch(InputMismatchException e){
                   System.out.println("请输入正整数!");
                   Chuli();
                   }
        
             
        }
        public static void main(String[] args){
            Chuli();
        }
        }

      ①输入符合要求的正整数

       

      ②输入负数

       

      ③输入小数

       

      ④输入特殊字符

       

  • 相关阅读:
    Keras学习笔记——Hello Keras
    记一次线上事故的JVM内存学习
    postgresql中的search_path
    CentOS7安装setuptools
    CentOS7安装EPEL的两种方式
    Ncures库的介绍与安装
    CentOs6.5 安装Zlib
    Centos 安装zlib
    Windows如何压缩tar.gz格式
    nginx运行文件出错env: /etc/init.d/nginx: No such file or directory
  • 原文地址:https://www.cnblogs.com/LL66/p/4966939.html
Copyright © 2011-2022 走看看