文档章节

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

FansUnion
 FansUnion
发布于 2015/10/22 10:29
字数 546
阅读 7
收藏 0
点赞 0
评论 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
丰台
高级程序员

暂无文章

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
1
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
0
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
0
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
0
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
0
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部