day05-【异常、Object类】

1.Object 类

Object类是所有类的父类,是最顶层的父类。

当一个类没有直接继承其他父类时,这个类的直接父类就是Object类;
class Person{
    ....    
}
等价于
class Person extends Object{
    ...
}

1.equals方法:
    boolean equals(Object obj):判断当前对象与obj对象的地址是否一样,如果一样就返回true,否则返回false;
2.重写equals方法:
    应为object类自带的equals方法不能满足需求,所以重写;

    重写的目标:
        1.如果两个对象的地址一样就返回true;
        2.否则 如果两个对象中数据都一样也返回true;
        3.否则 返回false;
    重写的代码不需要自己写,可以使用eclipse快捷键生成;

3.String toString()方法:
    是用来返回对象的字符串表示;

    Object类中的toString方法默认返回对象的地址;

4.重写toString()方法:
    因为我们希望toString返回的是对象的内容,而不是地址:
    重写的目标:
        Person[name="冬冬",age=25];

2.异常

Java代码中出现的不正常的情况;

Throwable类是异常类的继承结构中最顶层的异常类;

Throwable
    |--Error:错误,java代码中出现非常严重的问题,不修改代码问题解决不了,就象人患了癌症,不动手术活不下去;
    |--Exception:异常,java代码中出现一般的问题,只要处理一下就解决了.就象人患了感冒,发烧,只要吃点药就可以了.
        |-运行时异常:RuntimeException:NullPointerException,ArrayIndexOutOfBoundsException;
        |-编译时异常:FileNotFoundException,IOException;

    通常说的异常值的是Exception,不是Error.

    怎么区分是Error还是Exception?
        异常的名字如果是以Error结尾的,表示这个异常是一个错误: java.lang.OutOfMemoryError
        异常的名字如果是以Exception结尾的,表示这个异常是一个普通的异常:java.io.FileNotFoundException

    常见的异常:
        1.空指针异常:NullPointerException;
        2.数组索引越界的异常:ArrayIndexOutOfBoundsException;
        3.文件找不到的异常:FileNotFoundException;
        4.类型转换异常:ClassCastException;
        5.IO异常:IOException;

1.JVM处理异常的过程:
    1.程序执行到出错的那一行代码时,JVM创建了一个异常对象:new ArrayIndexOutOfBoundsException(5);
    2.JVM会把异常对象抛出给这一行代码所在的方法:printArray(int[] iArray);
    3.由于printArray方法没有处理异常,所以这个方法会把异常抛给方法的调用者main方法;
    4.main方法接收到异常对象后也没有处理,所以main方法把异常对象抛给它的调用JVM;
    5.JVM接收到异常之后,打印异常信息,结束程序的运行;


2.自己在程序中创建异常对象并抛出

    1.确定出错的那一行代码;
    2.在满足某个条件后,创建异常对象:
        new 异常类名(异常的描述信息);
    3.使用throw关键字把刚才创建的异常对昂向外抛出:
        throw new 异常类名(异常的描述信息);

4.处理异常

    第一种处理方法:

        捕获式处理:

            使用try{}catch{}代码块包裹住可能会出现异常的代码.

            格式1:
                    /*
                     * 第一种处理方式的格式:
                     *   try{
                     *      可能会出现异常的代码;
                     *   }catch(异常类名 异常的对象名){
                     *      处理异常的代码;
                     *   }
                     * 
                     */

                    示例代码:
                        public static void printArray(int[] iArray){

                            System.out.println(iArray[0]);
                            // 捕获处理异常
                            try{
                                // 可能会出现异常的代码
                               System.out.println(iArray[5]);
                               System.out.println("我是也是try里面的代码....");
                            }catch(ArrayIndexOutOfBoundsException e){
                                // 处理异常的代码;
                                System.out.println("数组的长度不能小于6!");
                            }

                            // try..catch语句之后的代码,在捕获住异常之后,会继续被执行
                            System.out.println("程序要没有结束..try..catch语句之后的代码..");
                        }


            格式2:
                    /*
                     * 第二种处理方式的格式:
                     *   try{
                     *      可能会出现异常的代码;
                     *   }catch(异常类名 异常的对象名){
                     *      处理异常的代码;
                     *   }finallay{

                            不管程序是否抛出异常,都必须要执行的代码写在这个位置;
                         }
                     }
                     * 
                     */


                      不管try代码块中的程序是否抛出异常,finally代码块中的程序都会被执行;

                    示例代码:
                        public static void main(String[] args) {
                            FileWriter fw = null;
                            try{
                                // 可能会出现异常的代码
                                fw = new FileWriter("D://a.txt");
                                // 如果上面一行抛出异常,下面这行代码将不会被执行
                                fw.write("hello");
                            }catch(IOException e){
                                System.out.println("文件找不到或者写入数据错误!");
                            }finally{
                                // 不管try代码块中的程序是否抛出异常,finally代码块中的程序都会被执行;
                                System.out.println("finally代码块...");
                                try {
                                    fw.close();
                                }catch (NullPointerException e) {
                                    System.out.println("空指针异常!");
                                }catch (IOException e) {
                                    System.out.println("IOException!");
                                }
                            }
                            // 上面的异常如果被捕获住了,下面的代码会继续被执行
                            System.out.println("try...catch..finally语句之后的代码....");
                    }


        捕获处理的好处:

            可以自己捕获和处理异常,并让try...catch..语句之后的代码继续执行;




    第二种处理方式:
        声明式处理:

            在方法的小括号后面使用throws 关键字,把方法中可能会抛出的异常类名列出来,多个异常类名之间用逗号隔开;

            格式:

                修饰符 返回值类型 方法名(参数列表) throws 异常名1,异常名2...{
                    方法体;
                }

                意思是告诉这个方法的调用者必须处理声明出来的异常;

            示例代码:
                public static void method03() throws IOException,NullPointerException{

                        FileWriter fw = null;
                        fw = new FileWriter("S://a.txt");
                        fw.write("hello");
                        fw.close();
                }

3.自定义异常

 因为JDK中提供的异常类不能满足我们的需要,或者异常的类名太长,或者不好学习,所以我们要自定义异常类;

如何自定义异常呢?

    jdk定义异常的特点:
        1.写一个类,继承异常类(既可以是Throwable类,也可以是它的子类);
        2.在类中定自己的构造方法;
        3.在自己的构造方法中调用父类的构造方法;


    自定义异常,按照jdk的定义方式:
        1.写一个类,继承异常类(既可以是Throwable类,也可以是它的子类);
        2.在类中定自己的构造方法;
        3.在自己的构造方法中调用父类的构造方法;

    示例代码:
        //1.写一个类,继承异常类(既可以是Throwable类,也可以是它的子类);
        public class NoAgeException extends RuntimeException{

            // 2.在类中定自己的构造方法;
            public NoAgeException(){

                //3.在自己的构造方法中调用父类的构造方法;
                super();
            }

            public NoAgeException(String message){
                //3.在自己的构造方法中调用父类的构造方法;
                super(message);
            }
        }

    使用自定义异常:

        1.创建异常对象;
        2.使用throws关键字抛出;

        示例代码:

            public class Person {
                ....

                public void setAge(int age) {

                    if(age > 150 || age < 0){
                        throw new NoAgeException("年龄不能大于150,不能小于0!");
                    }
                    this.age = age;
                }

                ....

            }

5.补充

 异常的分类 

* Exception : 所有异常子类,编译异常
* RuntimeException : 所有异常子类,运行异常
*
* 编译异常: 调用了一个抛出异常的方法,必须要处理,不处理编译失败
* throws try catch
*
* 运行异常: 方法抛出异常,都是RuntimeException类或者是他的子类
* 方法定义上,不需要写throws, 调用者不用处理
* 设计思想: 一旦发生,不要进行try..catch处理
* 必须程序停止运行,修改源代码
*
* 运行异常:
* 不需要写throws
* 只要发送,请你修改源码
*
* 举出常见的4个运行时期的异常 面试题
* NullPointerException 空指针异常
* ArrayIndexOutOfBoundsException 数组越界异常
* ClassCastException 类型转换异常
* IllegalArgumentException 无效参数异常

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值