• 多态与异常处理(课后作业)


    1、finally语句块一定会执行吗? 请通过 SystemExitAndFinally.java示例程序回答上述问题

    代码:

    public class SystemExitAndFinally
    {

    public static void main(String[] args)

    {

    try
    {


    System.out.println("in main");

    throw new Exception("Exception is thrown in main");

    //System.exit(0);


    }

    catch(Exception e)

    {

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

    System.exit(0);

    }
    finally

    {
    System.out.println("in finally");

    }

    }


    }

     截图:

    所以finally语句不一定执行。

    2、

    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;

    }
    }

    结果:

    结论:其中d=m d=c 会出错  d=m是把基类对象赋值给子类需要强制类型转换  d=c:d和c是两个不同的类的对象不能进行赋值运算

    3、


    public class ParentChildTest {
    public static void main(String[] args) {
    Parent parent=new Parent();
    parent.printValue();
    Child child=new Child();
    child.printValue();

    parent=child;
    parent.printValue();

    parent.myValue++;
    parent.printValue();

    ((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);
    }
    }

    结论:子类和父类有相同的名字的方法,并且把子类的对象赋值给了子类的对象,这是父类的parent其实是子类的类型,所以value++是加在了父类中而调用的函数是子类的所以输出的是子类的value为200

    4、

    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");
    }
    }
    }

    结论:第二个try抛出的警告被外层处理

  • 相关阅读:
    冒泡排序
    linux常用命令
    Github上将公共仓库转为私有仓库or私有仓库转为共有仓库
    使用apt更新和升级系统软件
    Django用户认证模块中继承AbstractUser与AbstractBaseUser重写User表的区别
    详解django中的collectstatic命令以及STATIC_URL、STATIC_ROOT配置
    python入门指南
    python包装不上?国内网络问题,使用豆瓣源解决
    nginx入门
    Vue 实现页面刷新(provide 和 inject)
  • 原文地址:https://www.cnblogs.com/jingjing0629/p/4967851.html
Copyright © 2020-2023  润新知