文档章节

OpenJDK源码研究笔记(一)-参数检查&抛出带关键错误提示信息的异常

FansUnion
 FansUnion
发布于 2015/10/22 10:29
字数 546
阅读 7
收藏 0

OpenJDK源码研究笔记系列文章,是我在阅读OpenJDK7源码的过程中的一些体会、收获、看法。

把研究过程中的成长和收获一点点地整理出来,是对自己研究学习的一个小结,也有可能给学习Java的一些同学带来一些启发。

我打算每篇只讲解一点,这样篇幅较小,读起来没有太大压力。

写起来压力也小,抽出10到20分钟就可以写1篇。

本篇简要介绍,方法(函数)体内的参数检查,遇到不合法的输入参数时,抛出带关键错误提示信息的异常。

/**
     * Initializes a new instance of this class.
     *
     * @param channel
     *            The channel upon whose file this lock is held
     *
     * @param position
     *            The position within the file at which the locked region
     *            starts; must be non-negative
     *
     * @param size
     *            The size of the locked region; must be non-negative, and the
     *            sum <tt>position</tt> + <tt>size</tt> must be
     *            non-negative
     *
     * @param shared
     *            <tt>true</tt> if this lock is shared, <tt>false</tt> if it is
     *            exclusive
     *
     * @throws IllegalArgumentException
     *             If the preconditions on the parameters do not hold
     *
     * @since 1.7
     */
    protected FileLock(AsynchronousFileChannel channel, long position,
            long size, boolean shared) {
        if (position < 0)
            throw new IllegalArgumentException("Negative position");
        if (size < 0)
            throw new IllegalArgumentException("Negative size");
        if (position + size < 0)
            throw new IllegalArgumentException("Negative position + size");
        this.channel = channel;
        this.position = position;
        this.size = size;
        this.shared = shared;
    }


当输入参数position<0的时候,抛出IllegalArgumentException(postion为负数)。

当输入参数size<0的时候,抛出IllegalArgumentException(size为负数)。

当输入参数position和size的和<0的时候,抛出IllegalArgumentException(position+size为负数)。

这样,当输入参数不合法的时候,程序就不会再顺序执行下去。

通过抛出异常的方式,避免了程序进一步不合理的执行。

从异常的类型IllegalArgumentException来看,一看就知道是参数不合法造成的。

从异常的错误提示信息来看,“postion为负数”、“size为负数”、“position+size为负数”,准确地告诉了我们哪个参数不合法。

简而言之,异常的构造非常准确和友好,值得学习。

原文参见:http://FansUnion.cn/articles/2772


版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
FansUnion
粉丝 57
博文 858
码字总数 825464
作品 0
丰台
高级程序员

暂无文章

js 对象赋值 去除关联性。

js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象 我最近在做一个vue 项目的时候,遇到了一个对象的问题。 当我们在项目需要 复制一个对象到另一个对象...

xiaogg
5分钟前
0
0
art-template4.0使用

art-template javascript 模板引擎,官网:https://github.com/aui/art-template 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出HTML 流程控制 遍历 调用自定义函数方法 ...

不负好时光
5分钟前
0
0
HANA tenant backup

HANA tenant backup Hello, Script from note 1651055 - Scheduling SAP HANA Database Backups in Linux isn't Multi-Tenant complient. I modified script to be able to backup tenant da......

rootliu
7分钟前
0
0
Java并发编程:阻塞队列

本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。 ...

Java小铺
10分钟前
0
0
mysql8添加用户帐户

版本8.0 MySQL 8.0参考手册 / ... / 添加用户帐户 6.3.2添加用户帐户 要创建MySQL帐户,请使用用于创建帐户和建立其权限的帐户管理语句,例如CREATE USER和 GRANT。这些语句使服务器对基础授...

SunHacker
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部