day05-【异常、Object类】

来源:互联网 发布:php 抓取url内容 编辑:程序博客网 时间:2024/06/05 05:50

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 无效参数异常

原创粉丝点击