标签:
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(); } }
①输入符合要求的正整数
②输入负数
③输入小数
④输入特殊字符
标签:
原文地址:http://www.cnblogs.com/LL66/p/4966939.html