• Java动手动脑07


    (1)现在有三个类:

    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;

    编译错误

    d=m;d=c;

    不正确 子类对象可以直接赋给基类变量。基类对象要赋给子类对象变量,必须执行类型转换,
    其语法是:子类对象变量=(子类名)基类对象名;

     

    运行错误c=(Cat)m不正确  转换混乱。如果类型转换失败Java会抛出以下这种异常:ClassCastException

    (2)

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

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

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

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

    }

    }

    运行结果:

    原因分析:

    当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。
    如果子类被当作父类使用,则通过子类访问的字段是父类的!

    (3)

    动手动脑:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识

    (4)

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

    写出CatchWho2.java程序运行的结果:

    当有多个嵌套的trycatchfinally时,要特别注意finally的执行时机。

    请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结

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

    (5)

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

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

    所以finally块中的代码一定会执行

    (6)

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

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

    printStackTrace:打印方法调用堆栈。

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

    请通过 PrintExpressionStack.java示例掌握上述内容

    (7)

    一个方法可以声明抛出多个异常

    int g(float h) throws OneException,TwoException

    …… }

    ThrowMultiExceptionsDemo.java示例展示了相关特性

    (8)

    一个子类的throws子句抛出的异常,不能是其基类同名方法抛出的异常对象的父类。

    OverrideThrows.java示例展示了Java的这个语法特性

    (9)

    在实际开发中,经常需要将特定的“过于专业”的异常转换为一个“业务”异常,然后在调用者处进行捕获与处理。

    ExceptionLinkInRealWorld.java示例展示了典型的异常处理代码模板

    (10)

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

    要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。

    源代码:

    import javax.swing.*;

    public class Chengji {

    public static void main(String[] args){

    int a=0;

    try{

    String str=JOptionPane.showInputDialog("请输入成绩");

    a=Integer.parseInt(str);

    if(0<=a&&a<60)

    {

    JOptionPane.showMessageDialog(null,"不及格","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    else if(60<=a&&a<70)

    {

    JOptionPane.showMessageDialog(null,"及格","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    else if(70<=a&&a<80)

    {

    JOptionPane.showMessageDialog(null,"中","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    else if(80<=a&&a<90)

    {

    JOptionPane.showMessageDialog(null,"良","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    else if(90<=a&&a<100)

    {

    JOptionPane.showMessageDialog(null,"优","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    else 

    {

    JOptionPane.showMessageDialog(null,"输入超出范围","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    }

    catch(Exception e){

    JOptionPane.showMessageDialog(null, "输入错误","Result",

    JOptionPane.PLAIN_MESSAGE);

    }

    }

    }

    运行结果截图:

  • 相关阅读:
    React之React.cloneElement
    HTB-靶机-Vault
    HTB-靶机-Curling
    HTB-靶机-Zipper
    HTB-靶机-Frolic
    HTB-靶机-Carrier
    HTB-靶机-Oz
    HTB-靶机-Dab
    HTB-靶机-Waldo
    HTB-靶机-Reddish
  • 原文地址:https://www.cnblogs.com/sz20142898/p/4967025.html
Copyright © 2020-2023  润新知