zoukankan      html  css  js  c++  java
  • 各种异常 及异常类和Object类 Math类

    Day05 异常 Object

    equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。

    2. 描述人这个类,并定义功能根据年龄判断是否是同龄人

    由于要根据指定类的属性进行比较,这时只要重写Object中的equals方法

    在方法体中根据类的属性值进行比较(比较的内容)

     */

    class Person extends Object{

    int age ;

    //复写父类的equals方法,实现自己的比较方式

    public boolean equals(Object obj) {

    //判断当前调用equals方法的对象和传递进来的对象是否是同一个

    if(this == obj){

    return true;

    }

    //判断传递进来的对象是否是Person类型

    if(!(obj instanceof Person)){

    return false;

    }

    //obj向下转型为Perosn引用,访问其属性

    Person p = (Person)obj;

    return this.age == p.age;

    }

    }

    注意在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

     

    java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?

    l 1,创建一个异常对象。封装一些提示信息(信息可以自己编写)。

    l 2,需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw就可以完成。throw 异常对象;

    throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。

    抛出异常throw

    声明异常throws

    声明:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理(稍后讲解该方式),那么必须通过throws进行声明,让调用者去处理。

    声明异常格式:

    修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2… {   }

    声明异常的代码演示:

    3捕获异常trycatchfinally

    捕获:Java中对异常有针对性的语句进行捕获,可以对出现的异常进行指定方式的处理

    try:该代码块中编写可能产生异常的代码。

    catch:用来进行某种异常的捕获,实现对捕获到的异常进行处理。

    finally有一些特定的代码无论异常是否发生,都需要执行。另外,因为异常会引发程序跳转,导致有些语句执行不到。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。

    l 运行时异常被抛出可以不处理。即不捕获也不声明抛出  因为发生运行时异常程序停止, 程序员需要修改代码

    如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是他的子集

    l 父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出

    当多异常处理时,捕获处理,后面的异常大是父类

    try/catch后可以追加finally代码块其中的代码一定会被执行通常用于资源释放

    4.自定义异常

     

    如果自定义异常需要异常信息,可以通过调用父类的带有字符串参数的构造函数即可。    

     

    总结一下,构造函数到底抛出这个NoAgeException是继承Exception呢?还是继承RuntimeException呢?

    继承Exception,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会继续执行

    继承RuntimeExcpetion,不需要throws声明的,这时调用是不需要编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码。

     

    编译期异常 和运行时异常的区别

     

    继承Exception,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会继续执行。

    继承RuntimeExcpetion,不需要throws声明的,这时调用是不需要编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码

    .异常_面试题之如果在finally之前有return

    main(){

    System.out.println(show());//20

    }

    public static int show(){

    int n = 10;

    try{

    n = 20;

    return n;//流程:1.先将n的值20缓存;2.执行finally3.回来将之前缓存的值20返回

    }catch(Exception e){

    n = 30;

    return n;

    }finally{

    n = 40;

    }

    }

    什么时候执行的finally?执行return语句之中

     

    5.列举出常见的四个运行期异常

    ArithmeticException(算术运算异常)

    NullPointerException(空指针异常)

    ArrayIndexOutOfBoundsException(数组下标越界)

    StringIndexOutOfBoundsException(字符串下标越界)

    String st = "abc";

    char c = st.charAt(3);//字符串下标越界

     

     

     

    l round方法,返回参数值四舍五入的结果

     

    double d1 = Math.round(5.5); //d1的值为6.0

     

    double d2 = Math.round(5.4); //d2的值为5.0

     

     

    l random方法,产生一个大于等于0.0且小于1.0的double小数

     

    double d1 = Math.random();

    l ceil方法,结果为比参数值大的最小整数的double值

    double d1 = Math.ceil(3.3); //d1的值为 4.0

    double d2 = Math.ceil(-3.3); //d2的值为 -3.0

    double d3 = Math.ceil(5.1); // d3的值为 6.0

     

     

  • 相关阅读:
    2019-9-2-C#命令行解析工具
    2018-9-20-断点调试-Windows-源代码
    2018-9-20-断点调试-Windows-源代码
    2018-8-10-dot-net-core-使用-IPC-进程通信
    2018-8-10-dot-net-core-使用-IPC-进程通信
    Java实现 LeetCode 592 分数加减运算(纯体力活)
    Java实现 LeetCode 590 N叉树的后序遍历(遍历树,迭代法)
    Java实现 LeetCode 590 N叉树的后序遍历(遍历树,迭代法)
    Java实现 LeetCode 590 N叉树的后序遍历(遍历树,迭代法)
    Java实现 LeetCode 589 N叉树的前序遍历(遍历树)
  • 原文地址:https://www.cnblogs.com/shan1393/p/8944907.html
Copyright © 2011-2022 走看看