zoukankan      html  css  js  c++  java
  • java课堂回答

    下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么?
      m=d;
      d=m;
      d=(Dog)m;
      d=c;
      c=(Cat)m;
    先进行自我判断,得出结论后,运行TestCast.java实例代码,看看你的判断是否正确

    编译错误

    d=m;d=c;

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

    运行错误c=(Cat)m

    不正确  转换混乱。如果类型转换失败Java会抛出以下这种异常:ClassCastException

    2可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
    Object obj="Hello";
    if(obj instanceof String)
     System.out.println("obj对象可以被转换为字符串");

    public static void main(String[] args)
     {
      //声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类
      //但hello变量的实际类型是String
      Object hello = "Hello";
      //String是Object类的子类,所以返回true。
      System.out.println("字符串是否是Object类的实例:" + (hello instanceof Object));
      //返回true。
      System.out.println("字符串是否是String类的实例:" + (hello instanceof String));
      //返回false。
      System.out.println("字符串是否是Math类的实例:" + (hello instanceof Math));
      //String实现了Comparable接口,所以返回true。
      System.out.println("字符串是否是Comparable接口的实例:" + (hello instanceof Comparable));
      String a = "Hello";
      //String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过
      //System.out.println("字符串是否是Math类的实例:" + (a instanceof Math));
     }
    }

    3

    1.   下边的程序运行结果是什么? 2.   你如何解释会得到这样的输出? 3.   计算机是不会出错的,之所以得   到这样的运行结果也是有原因的,   那么从这些运行结果中,你能总   结出Java的哪些语法特性?

     请务必动脑总结,然后修改或编写一些代码进行测试,验证自己的想法,最后再看 后面的PPT给出的结论。

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

     1)

    Parent.printValue(),myValue=100

    Child.printValue(),myValue=200

    Child.printValue(),myValue=200

    Child.printValue(),myValue=200

    3)

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

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

    5

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

    ArrayIndexOutOfBoundsException" +  "/内层try-catch

    发生ArithmeticException

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

    ArrayIndexOutOfBoundsException/外层try-catch

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

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

    8

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

    Throwable类有两个直接子类:

    1Exception:出现的问题是可以被捕获的;

    2Error:系统错误,通常由JVM处理。

    当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。
    可使用printStackTrace 和 getMessage方法了解异常发生的情况:
    printStackTrace:打印方法调用堆栈。
    每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。

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

    10

    一个方法可以声明抛出多个异常
     int g(float h) throws OneException,TwoException
      { …… }
    ThrowMultiExceptionsDemo.java示例展示了相关特性。

    11

    一个子类的throws子句抛出的异常,不能是其基类同名方法抛出的异常对象的父类。
    OverrideThrows.java示例展示了Java的这个语法特性。

    12

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

    13

  • 相关阅读:
    团队项目-第一阶段冲刺7
    团队项目-第一阶段冲刺6
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(七) 实用技术篇
    Spring Boot 揭秘与实战(六) 消息队列篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(五) 服务器篇
    Spring Boot 揭秘与实战(四) 配置文件篇
  • 原文地址:https://www.cnblogs.com/1716467267-wang/p/4963540.html
Copyright © 2011-2022 走看看