• 多态与异常处理


    TestInstanceof验证:

    public class TestInstanceof

    {

    public static void main(String[] args) 

    {

    //声明hello时使用Object类,则hello的编译类型是ObjectObject是所有类的父类

    //hello变量的实际类型是String

    Object hello = "Hello";

    //StringObject类的子类,所以返回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));

    }

    }

    TestCast的验证:

    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;

    }

    }

    多态的最基本的特征就是父类变量可以引用子类变量对象。Parent p=new child();

    总是可以让更一般的对象容纳更具体化的对象。子类对象可以直接赋值给基类对象。基类对象要赋值给子类对象,必须执行类型转换。语法结构是:子类对象变量=(子类名)基类对象名;也不能乱转换,如果类型转换失败java会抛出以下这种异常:ClassCastException

    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调用。如果子类被当做父类使用时,则子类访问的字段是父类的。

    异常处理

    import javax.swing.*;

    class AboutException {

       public static void main(String[] a) 

       {

          int i=1, j=0, k;

          k=i/j;

    try

    {

    k = i/j;    // Causes division-by-zero exception

    //throw new Exception("Hello.Exception!");

    }

    catch ( ArithmeticException e)

    {

    System.out.println("0.  "+ e.getMessage());

    }

    catch (Exception e)

    {

    if (e instanceof ArithmeticException)

    System.out.println("0");

    else

    {  

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

    }

    }

    finally

         {

          JOptionPane.showConfirmDialog(null,"OK");

         }

      }

    }

    public class CatchWho { 

        public static void main(String[] args) { 

            try { 

                try { 

                    throw new ArrayIndexOutOfBoundsException(); 

                } 

                catch(ArrayIndexOutOfBoundsException 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"); 

            } 

        } 

    }

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

            } 

        } 

    }

    public class EmbededFinally {

        

    public static void main(String args[]) {

            

    int result;

            

    try {

                

    System.out.println("in Level 1");

               

      try {

                    

    System.out.println("in Level 2");

      // result=100/0;  //Level 2

                   

      try {

                       

      System.out.println("in Level 3");

                          

      result=100/0;  //Level 3

                    

                    

    catch (Exception e) {

                        

    System.out.println("Level 3:" + e.getClass().toString());

                    

    }

                    

                    

    finally {

                        

    System.out.println("In Level 3 finally");

                    

    }

                    

                   

    // result=100/0;  //Level 2

                

    }

                

    catch (Exception e) {

                   

      System.out.println("Level 2:" + e.getClass().toString());

               

      }

      finally {

                    

    System.out.println("In Level 2 finally");

               

     }

                 

    // result = 100 / 0;  //level 1

            

            

    catch (Exception e) {

                

    System.out.println("Level 1:" + e.getClass().toString());

            

    }

            

    finally {

               

    .   System.out.println("In Level 1 finally");

            

    }

        

    }

    }

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

            }

       }

    }

    // UsingExceptions.java

    // Demonstrating the getMessage and printStackTrace

    // methods inherited into all exception classes.

    public class PrintExceptionStack {

       public static void main( String args[] )

       {

          try {

             method1();

          }

          catch ( Exception e ) {

             System.err.println( e.getMessage() + " " );

             e.printStackTrace();

          }

       }

       public static void method1() throws Exception

       {

          method2();

       }

       public static void method2() throws Exception

       {

          method3();

       }

       public static void method3() throws Exception

       {

          throw new Exception( "Exception thrown in method3" );

       }

    }

    import java.io.*;

    public class ThrowMultiExceptionsDemo { 

        public static void main(String[] args) 

         { 

          try { 

                throwsTest(); 

           } 

            catch(IOException e) { 

                System.out.println("捕捉异常"); 

            }

        }

        private static void throwsTest()  throws ArithmeticException,IOException { 

            System.out.println("这只是一个测试"); 

            // 程序处理过程假设发生异常

            throw new IOException(); 

            //throw new ArithmeticException(); 

        } 

    }

    import java.io.*;

    public class OverrideThrows

    {

    public void test()throws IOException

    {

    FileInputStream fis = new FileInputStream("a.txt");

    }

    }

    class Sub extends OverrideThrows

    {

    //如果test方法声明抛出了比父类方法更大的异常,比如Exception

        //则代码将无法编译……

    public void test() throws FileNotFoundException

    {

                //...

    }

    }

    /**

     * 自定义的异常类

     * @author JinXuLiang

     *

     */

    class MyException extends Exception

    {

        public MyException(String Message) {

            super(Message);

        }

        public MyException(String message, Throwable cause) {

            super(message, cause);

        }

         public MyException( Throwable cause) {

            super(cause);

        }

    }

    public class ExceptionLinkInRealWorld {

       public static void main( String args[] )

       {

          try {

             throwExceptionMethod();  //有可能抛出异常的方法调用

          }

          catch ( MyException e )

          {

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

             System.err.println(e.getCause().getMessage());

          }

          catch ( Exception e )

          {

             System.err.println( "Exception handled in main" );

          }

          doesNotThrowException(); //不抛出异常的方法调用

       }

       public static void throwExceptionMethod() throws MyException

       {

          

          try {

             System.out.println( "Method throwException" );

             throw new Exception("系统运行时引发的特定的异常");  // 产生了一个特定的异常

          }

          catch( Exception e )

          {

             System.err.println(

                "Exception handled in method throwException" );

             //转换为一个自定义异常,再抛出

             throw new MyException("在方法执行时出现异常",e);

             

          }

          finally {

             System.err.println(

                "Finally executed in throwException" );

          }

     

          // any code here would not be reached

       }

       public static void doesNotThrowException()

       {

          try {

             System.out.println( "Method doesNotThrowException" );

          }

          catch( Exception e )

          {

             System.err.println( e.toString() );

          }

          finally {

             System.err.println(

                "Finally executed in doesNotThrowException" );

          }

          System.out.println(

             "End of method doesNotThrowException" );

       }

    }

  • 相关阅读:
    Python 3学习 ——目录 Json Pickle
    Python 3 学习——函数扩展and迭代器生成器装饰器
    Python 3 学习——深浅拷贝以及函数
    Python 3 学习的第七小节——Linux-Ubuntu
    Python 3 —— 文件操作
    Python 3 学习的第五小节——字符编码与三级菜单实践
    关于PHP代码复用‘traits’的一段代码
    一个将对象彻底冻结的函数
    详解vue-cli脚手架项目-package.json
    关于element-ui日期选择器disabledDate使用心得
  • 原文地址:https://www.cnblogs.com/11-05/p/4967460.html
Copyright © 2020-2023  润新知