A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于冬辉 中级黑马   /  2014-10-12 21:45  /  1944 人查看  /  13 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

异常
  • 就是程序运行过程中,遇到了问题,这就叫异常。
  • 1,异常的体系
    • Throwable 其实应该分三种
      • Error
        • 通常出现重大问题如:服务器宕机数据库崩溃等。不编写针对代码对其处理。
      • Exception
        • 除了 RuntimeException 和其所有子类,其他所有的异常类都是在编译的时候必须要处理的,要么try,要么抛
      • RuntimeException
        • RuntimeException 和其所有的子类,都不会在编译的时候报异常,而是在运行时报异常,这时候我们就需要回头看看我们的代码是否有问题,比如角标越界,空指针等


  • 2,jvm是如何处理异常的
  • jvm发现运算是已经违反了数学运算规则,java将这种常见的问题进行描述,并封装成了对象叫做ArithmeticException当除0运算发生后,jvm将该问题打包成了一个异常对象.并将对象抛给调用者main函数,new ArithmeticException("/by zero");main函数收到这个问题时,有两种处理方式:1,自己将该问题处理,然后继续运行2,自己没有针对的处理方式,只有交给调用main的jvm来处理jvm有一个默认的异常处理机制,就将该异常进行处理.并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上同时将程序停止运行那么jvm里都封装了哪些对异常的处理呢
  • 3,处理异常处理方式:
    • A:try...catch
    • 格式:    try {        需要检测的代码;    }    catch(异常类  变量) {//异常类名 对象名= new 异常类名();        异常处理代码;    }世界上最真情的相依,就是你在try,我在catch,无论你发神马脾气,我都默默接受,静静处理public class Demo1_Exception {    public static void main(String[] args) {        Demo d = new Demo();                        //创建对象        try {            int num = d.div(10, 0);                 //调用div方法并将10和0给方法的参数            System.out.println(num);                //打印调用方法的结果        } catch (Exception e) {                     //当try检测出异常的时候,就跳到catch语句中                                                    //接收异常Exception e =  new ArithmeticException("/ by zero");            System.out.println(e);                  //打印异常对象的toString方法            System.out.println(e.toString());            System.out.println("错了,除数为零了"); //提示        }        System.out.println("11111111111111111111"); //异常处理完代码可以继续执行    }}class Demo {    public int div(int a,int b) {                   //a = 10,b = 0        return a / b;                               // new ArithmeticException("/ by zero");    }}
    • try...catch(...)...finally
    • 说一下final,finalize,finally的区别1,final可以修饰类,可以修饰方法,可以修饰变量2,finalize,在对象没有更多引用,垃圾回收的时候调用3,finally 关闭流,数据库等,释放资源public class Test1 {    /**     * @param args     * finally的面试题     */    public static void main(String[] args) {        Test t = new Test();                        //创建对象        int num = t.getNum();                       //调用getNum()方法        System.out.println(num);    }}class Test {    public int getNum() {        int x = 10;                                         try {            System.out.println(1/0);                //执行1/0会出现异常,创建new ArithmetiException(\ by zero);对象            return x;                               //return语句                  } catch (Exception e) {            x = 20;                                 //将x值改为20            return x;                               //return语句        } finally {            x = 30;                                 //将x值改为30            System.out.println("finally执行了吗");  //输出语句            //return x;             finally中不要写return语句        }    }    /*     * 当程序执行到try语句的时候,1/0违背了数学的运算规则出现异常,创建出new ArithmetiException(\ by zero)对象,程序跳转到catch语句中     * 当程序跳转到catch语句中,又将x值改为了20,遇到return语句,return语句会建立一个返回路径,将x里面的20相当于装到一个箱子里,准备返回,在返回之前     * 看有没有finally语句,如果有执行finally语句,但是虽然将x的值改为了30,也不会影响到返回路径中的值,所以最后的返回还是20     */}
    • 可以有下面三种搭配形式:
    • try...catch(...)try...catch(...)...finallytry...finally               是不能进行异常处理的,必须抛出
    • B:抛出 throws throw
    • throws:用于标识函数暴露出的异常。thorws用在函数上,后面跟异常类名(可以由多个,隔开)。throw:用于抛出异常对象。throw用在函数内,后面跟异常对象。new Exception();public class Demo3_Throws {    /**     * @param args     * @throws Exception      * try catch和throws的区别     * 如果后续代码想要继续执行,只能try     * 如果后续代码不想继续执行,只能throws     *      * Exception 和RuntimeException的区别     * RutimeException是运行时异常,需要程序员回来修改自己的代码     * Exception是编译时异常,遇到编译时异常,必须处理,要么try,要么throws(未雨绸缪异常)     */    public static void main(String[] args) throws Exception {        Person p = new Person();        p.setAge(-17);        System.out.println(p.getAge());        System.out.println("222222222222222222222");    }}class Person {    private int age;    public Person() {                   //alt + shift + s + c 生成空参数的构造函数        super();    }    public Person(int age) {            //alt + shift + s + o 根据字段生成有参数的构造函数        super();        this.age = age;    }    public int getAge() {               //alt + shift + s + r 生成set和get方法        return age;    }    public void setAge(int age) throws Exception {        if(age > 0 && age < 200) {            this.age = age;        }else {            /*Exception e = new Exception("年龄非法");            throw e;*/            throw new Exception("年龄非法");                    //用异常处理            //System.out.println("年龄非法");                   //以前是这样处理的        }        /*         * throw和throws的区别         * throw写在方法内,后面跟的是异常对象         * throws写在方法上,后面跟的是异常类名         */    }    @Override    public String toString() {          //alt + shift + s + s 生成toString方法        return "Person [age=" + age + "]";    }}
    • C:到底用谁?
    • 你能处理,建议处理。try...catch...finally你处理不了,抛出。在实际开发中,是分层开发,底层代码是能抛出尽量抛出,用日志记录住异常信息,并提供解决方案        
  • 4,异常体系常见方法
  • A:getMessage() :返回此 throwable 的详细消息字符串。class Throwable {    String detailMessage;    Throwable(){}    Throwable(String message) {        this.detailMessage = message;    }    public String getMessage() {        return detailMessage;    }}B:toString():获取异常类名和异常信息,返回字符串。C:printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。


File
  • 1.什么是File类
    • File类对象可以代表一个路径, 此路径可以是文件也可以是文件夹, 该类方法可以对这个路径进行各种操作
  • 2.创建对象
    • 给File类构造函数传一个String类型的路径就可以创建对象
    • 路径分为两种: 绝对路径, 相对路径
      • 绝对路径: 从盘符开始, 是一个固定的路径
      • 相对路径: 不从盘符开始, 相对于某个位置. 在Eclipse中的Java工程如果使用相对路径, 那么就相对于工程根目录. cmd则相对应于当前目录.

  • 3.常用方法
  • *****boolean exists()       判断是否存在boolean isAbsolute();       是否是绝对路径*****boolean isDirectory(); 是否是文件夹*****boolean isFile();      是否是文件boolean isHidden();         是否是隐藏getAbsolutePath();          获取绝对路径getFreeSpace();             获取当前盘符剩余空间getTotalSpace();            获取当前盘符总空间getUsableSpace();           获取当前盘符可用空间*****getParent());          获取父级路径*****getName());            获取文件或文件夹名setReadable(false);         设置是否可读setWritable(false);         设置是否可写setExecutable(false);       设置是否可执行canRead();                  是否可读canWrite();                 是否可写canExecute();               是否可执行setLastModified();          设置文件的最后修改时间*****lastModified();        获取文件的最后修改时间     *****createNewFile()        创建文件*****mkdir();               创建文件夹(仅一级)*****mkdirs();              创建文件夹(父级不存在也创建)**renameTo();               改名, 可以移动文件*****delete()               删除, 文件可以直接删除, 文件夹只能删空的*****length()               文件大小String[] list() *****File[] listFiles()  

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 很给力!

查看全部评分

13 个回复

倒序浏览
感谢楼主分享!
回复 使用道具 举报
谢谢楼主分享,不多说,复制粘贴拿走
回复 使用道具 举报
学习了感谢分享。
回复 使用道具 举报
你发就可以 ,我发警告我。。
回复 使用道具 举报
谢谢楼主分享!!!
回复 使用道具 举报
不错!!!!
回复 使用道具 举报
解冻 中级黑马 2014-10-13 21:55:01
8#
感谢分享
回复 使用道具 举报
zz_job 中级黑马 2014-10-13 22:19:46
9#
你这是什么排版啊...   能不能发代码?发帖的时候在字体那一堆图标里能找到代码的....
回复 使用道具 举报
果断收藏!!
回复 使用道具 举报
感谢楼主分享!
回复 使用道具 举报
谢谢楼主分享,一起加油
回复 使用道具 举报
感谢楼主分享
回复 使用道具 举报
黄宽 中级黑马 2014-10-14 07:00:59
14#
好羡慕。希望能早日加入黑马
:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马