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。

  • 相关阅读:
    月经贴——.net前景何妨!
    [Asp.net 5] Options-配置文件之后的配置
    [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable<>补充)
    [Asp.net 5] Logging-其他日志系统的实现
    [Asp.net 5] Logging-日志系统的基本架构(下)
    [Asp.net 5] Logging-日志系统的基本架构(上)
    [Asp.net 5] Logging-新日志系统目录
    [Asp.net 5] Localization-简单易用的本地化
    [Asp.net 5] Localization-Asp.net运行时多语言
    java-多线程安全问题
  • 原文地址:https://www.cnblogs.com/jsddj/p/7616766.html
Copyright © 2011-2022 走看看