zoukankan      html  css  js  c++  java
  • Object和异常类

    一、Object类

    Object类:是所有类的祖先类。

    在重写equals方法的同时,一般也要重写hashCode方法。当且仅当两个对象变量引用同一个对象时,equals才返回真。相等对象必须具有相等的哈希值。

    任何对象在装载到内存时都会自动生成一个有关类字节码class文件的对象,用object类对象的getClass()可获取到这个对象。同一个类产生的所有对象它们的class文件对象都是相同的。

    Object对象的toString()方法返回的是 object对象的getClass().getName()+"@"+Interger.toHexString(hashCode());

    二、异常

    异常是在运行时间发生的不正常现象。在java中用类的形式对不正常情况进行描述和封装。描述不正常情况的类就称为异常类,以前正常代码和异常代码相结合,现在将正常流程代码和问题处理代码分离,提高了阅读性。

    异常的体系:

     Throwable

      1.Error

        通常出现重大问题,如运行的类不存在或内存溢出等。一般不编写针对代码对其处理。

         是由jvm抛出的严重性问题。

           2.Exception

        在运行时出现的一般情况,可通过try catch  finally捕获。

    Error和Exception子类名都是以父类名作为后缀。

    该体系的特点是Throwable以及所有的子类都具有可抛性。

     可以自定义异常,但是想让一个类成为异常类,必须继承异常体系,因为只有继承异常体系的子类才具有可抛性,才能被两个关键字所操作:throw throws。

    class FuShuIndexException extends Exception
    {
         FuShuIndexException(){}
         FuShuIndexException(String msg)
         {
        super(msg);
       } }
    class Demo { public int method(int[] arr,int index) throws FuShuIndexException /*throws用在函数声明中,用于声明异常*/ { if (arr==null) { throw NullPointException("数组的引用不能为空!"); } if (index>=arr.length) { /*throw有在函数体内*/ throw new ArrayIndexOutOfBoundsException("数组的角标越界!“+index); } if (index<0) { throw new FuShuIndexException("角标不能为负"); } } }

    Exception异常可分为:

    1.编译时检查的异常:Exception及其子类都是(除了RuntimeExcepion子类体系),一般用throws声明,在编译时抛出异常。

    2.编译时不检查的异常,只在运行时检查的异常:RuntimeExcepion子类体系。它是在正常运行期间发生的异常,可能在执行期间抛出,但未被捕获的RuntimeException任何子类无需用throws进行声明。这类异常让调用者调用时的程序强制停止,让调用者对其程序进行修正。

    自定义异常时一般要么继承Exception,要么继承RuntimeException。

    throw和throws的区别:

    1.throws使用在函数定义上,throw使用在函数内

    2.throws抛出的是异常类,可同时抛出多个,用逗号隔开。而throw抛出的是异常对象

    异常除了throw抛出,用throws声明外,还可以用try/catch/finally来捕捉。

    对于一个try来说,可以有多个catch。

    try
    
    {
    
        int c=method(arr,-30)
    
    }
    
    catch(FuShuIndexException e)
    
    {
    
        System.out.println(e.getMessage());
    
        System.out.println(e.toString());
    
        e.printStackTace(); //JVM默认的异常处理机制就是调用异常对象的这个方法,可指明错误位置
    
    }
    catch(NullPointException e)
    {
    System.out.println(e.toString());
    }

     finally中的内容一定会被执行,比如:

    try
    {
         int i=method(arr,-30);  
    }
    catch(FuShuIndexException e)
    {
        System.out.println(e.toString());
        return ;
    }
    finally
    {
         System.out.println("finish");
    }
    System.out.println("over");

    当上述代码发生异常时,虽然在catch中有return;语句,使得System.out.println("over");语句执行不到,但是finally中的语句一定会被执行。当然如果将return;换成System.exit(0);直接关闭虚拟机,那么finally中的内容也就不会执行了。

    当子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或该异常的子类异常。如果父类方法没有抛出异常,那么子类覆盖时也不能抛出异常,只能用try。

  • 相关阅读:
    BlockingQueue(阻塞队列)详解
    支付宝系统架构(内部架构图)
    微博的消息队列
    JVM源码分析之堆外内存完全解读
    滑动冲突的补充——Event的流程走向
    BaseFragment的定义—所有Fragment的父类
    BaseActivity的定义——作为所有Activity类的父类
    BGARefreshLayout-Android-master的简单使用
    分析BGARefreshLayout-master
    简便数据库——ORMLite框架
  • 原文地址:https://www.cnblogs.com/jsddj/p/7616766.html
Copyright © 2011-2022 走看看