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

      Object类和异常

    1. Object类是所有类的父类(超类, 基类,上帝类);
    里面有两个常用的方法:
    1> public String toString();// 默认输出对象的地址值的字符串表示形式
    2> public boolean equals(Object obj);// 默认比较的是两个对象的地址值.

    Object中第一个比较常见的方法
    public String toString();// 默认输出对象的地址值的字符串表示形式
    注意点:
    一个对象在使用println进行输出的时候默认就是调用了Object中的toString方法,从而显示的是地址值
    只不过JDK中很多的类都已经重写(覆盖)了Object中的toString所以显示的不是地址值.
    这样的类目前: String, StringBuilder, ArrayList

    如果自定义的类需要输出对象里面的内容, 那么也需要重写Object中的toString方法;

    Object中第二个比较常见的方法
    public boolean equals(Object obj);// 默认比较的是两个对象的地址值.(eclipse中自动生成equals方法, alt + shift + s 在按h)

    注意点:
    对于基本数据类型来讲, == 比较的是数值
    对于引用数据类型来讲, == 比较的是地址值

    对于引用数据类型来讲,直接比较两个对象的地址值,没有任何意义,所以JDK中的很多类已经覆盖了Object中的
    equals方法,比如String类
    我们自定义的类如果要想比较对象的内容是否相等, 也需要重写Object中的equals方法.

    2. 异常:
    在java中所有的错误或者是异常都可以使用一个类来表示: java.lang.Throwable;
    里面有很常用的三个类来表示:
    Error: 表示错误的信息,一旦出现程序立即停止
    Exception: 表示异常(编译时的异常)的信息,一旦出现处理完程序正常运行.
    RuntimeException: 表示运行时候的信息,是Exception的子类.

    3.如何自定义一个异常呢?

    JDK中提供的异常都是一些常用的类的信息, 不能把实际业务场景当中的异常全部都考虑进去,那么这个时候就需要自定异常

    比如: 现实生活中,比如分数不能为负数, 比如: 处理年龄为负数的情况,需要自定义异常了.

    如何自定义一个异常呢?
    需要入伙.
    编译时异常: 需要定义类继承自Exception
    格式: public class 类名 extends Exception{...}

    运行时异常: 需要定义类继承自RuntimeException
    格式: public class 类名 extends RuntimeException{...}

    4. 异常的解析流程:
    1> 一旦程序出现异常,JVM自动创建异常类的对象(如果是自定义的异常需要手动创建)
    2> 一旦检测到异常产生,JVM就会马上抛出异常,(如果是自定义的异常需要手动抛出)
    3> 接下来需要处理抛出来的异常,有两种方式:
    方式一: 使用关键字throws 抛
    格式: public static void method() throws 异常类名{...}

    方式二: 使用try_catch的方式处理(真处理)
    格式:
    try{
    // 用来编写可能出现问题的代码
    }catch(异常类名 对象名){
    // 处理异常的一种方式,预案
    }finally{
    // 一般不管怎么样都会执行的,用来使用释放资源
    }

    注意点:
    1> 在使用throws声明抛出异常的时候,如果异常之间存在继承关系,只需要写父类异常即可.
    2> 如果有多个异常,不存在继承关系,可以使用逗号隔开.

    如果自定创建一个异常类对象,该如何抛出,需要使用到关键字throw
    throw: 主动将产生的对象进行抛出
    格式: throw 异常对象;

    --福利:面试题:
    public class Demo {

    public static void main(String[] args) {
    int number = getElemet();

    System.out.println("number = " + number);// 30

    System.out.println("程序结束了");
    }

    public static int getElemet(){

    int num = 10;
    try{
    // 一旦产生异常,try中后面的代码不运行了.
    int a = 1/0;

    System.out.println("try : num = " + num);

    return num;
    }catch(ArithmeticException e){
    num = 20;
    return num;// 做两件事情,1. 将num的值保存一份到缓冲区, 2. 然后再去执行finally中的代码

    }finally{
    num = 30;
    System.out.println("finally中的代码执行了 num " + num);
    return num;// 1.将num的值保存一份到缓冲区,现在的值变成了30;
    }
    }
    }
    return做两件事情:
    1> 返回一个值给调用方
    2> 结束当前方法, 如果碰到异常中有finally先执行finally中的代码. 然后再结束方法.


    5. 在使用try_catch处理异常的时候,根据实际情况还有几种格式:
    1> try_catch结构中,如果出现类多个异常,想要一种处理方式,异常之间不存在继承关系,可以在catch中并列写出多个异常
    格式: try{}catch(异常类名 A | 异常类名B 变量名){}finally{...}

    2> try_catch结构中,如果出现多个异常存在继承关系,大的异常需要写在后面,并且希望单独去处理每一个异常,使用多个catch
    格式: try{}catch(异常类名A 变量名A){...}catch(异常类名B 变量名B){...}....

    3> try_catch结构中,可以省略catch,确认没有什么异常要抓取,可以省略掉catch,配合finally
    格式: try{}finally{}

    4> try_catch结构中,可以没有finally.一般对于没有什么资源想要释放的.
    格式: try{}catch(异常类名 变量名){}

    5> try_catch结构中,任何结构中不能省略try, 并且不能只有try

    6. 在继承结构体系中,如果子类重写了父类的方法,异常该如何处理
    1> 如果父类方法没有异常, 那么子类中出现了异常不能抛(throws), 只能try.(父亲不坏, 儿子不能坏)
    2> 父类中如果方法有异常, 子类中的异常和父类中异常如果有继承关系,那么不能大于父类异常.(父亲坏, 而不能更坏)
    (实际使用场景,父类什么异常子类什么异常就好了.)

  • 相关阅读:
    从点子到产品
    基础设计模式
    SpringBoot单元测试
    结构化思维
    考试脑科学读书笔记
    爆发式成长的思维
    人人都是产品经理笔记
    文本处理工具awk
    CSP-S2019【绍兴一中集训】
    寒假集训【1.28】
  • 原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/8119781.html
Copyright © 2011-2022 走看看