• 多态与异常处理


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

       }

    }

  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/11-05/p/4967460.html
Copyright © 2020-2023  润新知