IDEA中习惯跟踪源码实现逻辑,多次碰到Objects.requireNonNull(T obj)这个方法,改方法主要用于提早判断对象是否为空,以便更早的抛出NPE 平时小组开发中强调程序健壮性,不允许组员的代码中出现明显的NPE,这样多数时候都要写判空逻辑,抛出自定义的异常 我们看下具体的源码: /** * Checks that the specified object reference is not {@code null}. * This method is designed prim…
System.out.println(Objects.hashCode(obj)); System.out.println(Objects.toString(obj)); System.out.println(Objects.requireNonNull(obj, "obj参数不能为空")); output: null Exception in thread "main" java.lang.NullPointerException: obj参数不能为空 at ja…
2017-02-10 by 安静的下雪天  http://www.cnblogs.com/quiet-snowy-day/p/6387321.html    本篇概要 Objects 与 Object 区别 Objects 各方法介绍与分析 equals    deepEquals   hashCode   hash toString   compare   requireNonNull   isNull   nonNull Objects 与 Object 区别 Object 是 Java 中…
Objects类解析 ​ JDK7新增Objects类介绍(以下程序以1.8来说明) 简介: ​ JDK7里面新增的Objects类,本人学习HashMap源码偶遇此类,所以研究一下,本类将对象常用的操作进行了封装,包括hashCode.equals.deepEquals等方法. 源码: package java.util; import java.util.function.Supplier; public final class Objects { //私有构造函数无法New对象,也无法去继…
在学习上一个类TreeMap的时候,提到了这个类,这个类是jdk1.7新增的,里面有很多实用的方法.就是一个工具类,熟悉以后,如果里面有已经实现的方法,那么就不要再去实现了,省时省力省测试. 一.简单理解 这是一个工具类,介绍相对会简单些,基本都是方法的介绍. 1.1 类名的命名 Objects是一个主要针对对象的工具类,所以它的命名只是在后面加上一个s,就像Arrays是操作数组的工具类一样.这就涉及到一种设计理念,那就是工具方法应该放在哪: 放在使用的类里 按操作属性进行归类,如String…
2017-02-10 by 安静的下雪天  http://www.cnblogs.com/quiet-snowy-day/p/6387321.html    本篇概要 Objects 与 Object 区别 Objects 各方法介绍与分析 equals    deepEquals   hashCode   hash toString   compare   requireNonNull   isNull   nonNull Objects 与 Object 区别 Object 是 Java 中…
Objects类概述 在JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode.返回对象的字符串表示形式.比较两个对象.在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题. 常用方法 public static boolean equals(Object a,…
JDK中内置了很多常用的工具类,且多以“s”结尾,如:集合工具类Collections,数组工具类Arrays,对象工具类Objects,文件工具类Files,路径工具类Paths,数学工具类Maths:但也有一些不是以“s”结尾的工具类,如TimeUnit和System. 下面就简单介绍各工具类的用法.(1)Objects中定义很多有用的API,如空指针判断,对象相等比较等.比较常用的API有以下几个: ​ 用于判断两个对象是否相等,两个参数都可以为null ​ public static b…
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/5713941.html Objects工具类 Objects工具类提供了一些静态方法,用于支持补充对象的一些基础操作.该类在Java 1.7被引入,部分方法1.8引入.某些方法对对象检查null提供一定的支持. static <T> int compare(T a, T b, Comparator<? super…
我们继续看lambda表达式的应用: public void urlExcuAspect(RpcController controller, Message request, RpcCallback done) { if (Util.isEmpty(request)) { return; } Descriptor descriptor = request.getDescriptorForType(); if (Util.isEmpty(descriptor)) { return; } Field…
ServiceLoader主要的功能是用来完成对SPI的provider的加载. 先看下它的成员: public final class ServiceLoader<S> implements Iterable<S> { private static final String PREFIX = "META-INF/services/"; // The class or interface representing the service being loaded…
45.  明智谨慎地使用Stream 46.  优先考虑流中无副作用的函数 47.  优先使用Collection而不是Stream作为方法的返回类型 48.  谨慎使用流并行 49.  检查参数有效性 大多数方法和构造方法对可以将哪些值传到其对应参数有一些限制.例如:索引必须是非负数.对象引用必须是非null.你应该清楚地在文档中记载所有这些限制,并在方法主体的开头用检查来强制执行. 每次编写方法或构造方法时,都应该考虑对其参数存在哪些限制.应该记住这些限制,并在方法体的开头使用显示检查来强制…
接口与内部类 目录 接口与内部类 1. Lambda表达式 1. 关于懒计算 2. Predicate接口 3. 关于方法引用 4. 关于构造器引用 5. 关于变量的作用域 2. 内部类 1. 局部内部类 2. 匿名内部类 本文主要整理了一些作者看JAVA核心技术卷第六章遇到的难点以及其思考, 欢迎小伙伴及时指出错误! 1. Lambda表达式 1. 关于懒计算 在JAVA8中, 提供了 Supplier这个接口实现懒计算 原理是这样的, 主要依据是以下三个原理 在JAVA8的新特性中, 只要一…
e.printStackTrace(); 先查看下源码 如图片中1所示,使用的是 PrintStreamOrWriter public void printStackTrace() { printStackTrace(System.err); } /** * Prints this throwable and its backtrace to the specified print stream. * * @param s {@code PrintStream} to use for outpu…
本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_16.html PrintStream 介绍 PrintStream 是打印输出流,它继承于FilterOutputStream.PrintStream 是用来装饰其它输出流.它能为其他输出流添加了功能,使它们能够方便地打印…
关于 I/O 的类可以分为四种: 关于字节的操作:InputStream 和 OutPutStream: 关于字符的操作:Writer 和 Reader: 关于磁盘的操作:File: 关于网络的操作:Socket( Socket 类不在 java.io 包中). 在本篇博客中主要讲述前两种 I/O,即字符流与字节流,并会提及磁盘IO.首先我们来看一下字节流与字符流的实现关系,如下图 一.字节流 在字节流的类中,最顶层的是 Inputstream 抽象类和 OutputStream 抽象类,两者定…
java的PrintStream(打印输出流)详解(java_io) 本章介绍PrintStream以及 它与DataOutputStream的区别.我们先对PrintStream有个大致认识,然后再深入学习它的源码,最后通过示例加深对它的了解. PrintStream 介绍 PrintStream 是打印输出流,它继承于FilterOutputStream.PrintStream 是用来装饰其它输出流.它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式.与其他输出流不同,Pri…
有关Assert断言大家并不陌生,我们在做单元测试的时候,看业务事务复合预期,我们可以通过断言来校验,断言常用的方法如下: public class Assert { /** * 结果 = 预期 则正确 */ static public void assertEquals(Object expected, Object actual); /** * 结果 != 预期 则正确 */ static public void assertNotEquals(Object unexpected, Obje…
前言 JDK源码解析系列文章,都是基于JDK8分析的,虽然JDK14已经出来,但是JDK8我还不会,我... 类图 实现了RandomAccess接口,可以随机访问 实现了Cloneable接口,可以克隆 实现了Serializable接口,可以序列化.反序列化 实现了List接口,是List的实现类之一 实现了Collection接口,是Java Collections Framework成员之一 实现了Iterable接口,可以使用for-each迭代 属性 // 序列化版本UID priv…
前言 JDK源码解析系列文章,都是基于JDK8分析的,虽然JDK15马上要出来了,但是JDK8我还不会,我... 类图 实现了RandomAccess接口,可以随机访问 实现了Cloneable接口,可以克隆 实现了Serializable接口,可以序列化.反序列化 实现了List接口,是List的实现类之一 实现了Collection接口,是Java Collections Framework成员之一 实现了Iterable接口,可以使用for-each迭代 属性 // 序列化版本UID pr…
单元测试可以有效的可以在编码.设计.调试到重构等多方面显著提升我们的工作效率和质量.github上可供参考和学习的各种开源项目众多,NopCommerce.Orchard等以及微软的asp.net mvc.entity framework相关多数项目都可以作为学习单元测试的参考.单元测试之道(C#版本)..NET单元测试艺术和C#测试驱动开发都是不错的学习资料. 1.单元测试的好处 (1)单元测试帮助设计 单元测试迫使我们从关注实现转向关注接口,编写单元测试的过程就是设计接口的过程,使单元测试通…
责任链模式-Chain of Responsibility 在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推. 咱们在这里换一个场景: 国王(King类), 经常会遇到各种麻烦(Trouble类), 而国王一旦遇到麻烦, 则会把麻烦交给手下去做. 国王有一天上了战场, 任务法派的顺序是这样的, 骑兵先上, 骑兵不行步兵上, 步兵不行就换贴身侍卫上. TroubleType枚举 在这里枚举了, 国王在战场上有三种事情…
Android开发中Can't toast on a thread that has not called Looper.prepare()问题 说一下问题出现场景: 在一个Android项目中,利用okhttp进行网络访问判断用户输入的账号密码,当用户密码输错时弹出 Toast 进行提示. 截取部分代码如下: 利用okhttp进行网络访问代码(其中User类是用来包装用户名和密码): import com.hzau.xiaonongfu.Entity.User; import okhttp3.…
本文较长,如果想直接看代码可以查看项目源码地址: https://github.com/hetutu5238/rpc-demo.git 要想实现分布式服务调用框架,我们需要了解分布式服务一般需要的功能点有哪些.目前要想实现一个简单的服务调用框架要做到的有以下的功能. 服务注册与发现,调用过程封装,消费负载均衡,序列化与反序列化,网关(可以用nginx实现)等.本文则从实现这些功能点的步骤出发来模拟一个 简单的服务调用框架 1.idea中创建父项目rpc-parent,子项目 rpc-common…
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. hello,同学们,大家好,我是沉默王二,在我为数不多的面试经历中,有一位姓马的面试官令我印象深刻,九年过去了,我还能记得他为数不多的发量. 老马:"兄弟,ArrayList 是线程安全的吗?"王二:"不是啊."老马:"那有没有线程安全的 List?"…
一.概述 1.1 当前现状 当前JDK中用来表达货币的类为java.util.Currency,这个类仅仅能够表示按照**[ISO-4217]**描述的货币类型.它没有与之关联的数值,也不能描述规范外的一些货币.对于货币的计算.货币兑换.货币的格式化没有提供相关的支持,甚至连能够代表货币金额的标准类型也没有提供相关说明.JSR-354定义了一套标准的API用来解决相关的这些问题. 1.2 规范目的 JSR-354主要的目标为: 为货币扩展提供可能,支撑丰富的业务场景对货币类型以及货币金额的诉求:…
Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理.举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null 或空白字符,否则根本无须进行后继的处理.这时方法的编写者通常会在…
Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理.举一个例子:有一个根据文件名获取输入流的方法:InputStream getData(String file),为了使方法能够成功执行,必须保证 file 入参不能为 null 或空白字符,否则根本无须进行后继的处理.这时方法的编写者通常会在方法体的最前面编写一段对入参进行检测…
(能用得上话的话求点赞=-=,我表达不好的话跟我说哦) 上一次我们拿到了服务器端的组数据和用户信息,这就可以为我们日后使用好友系统打下基础了! 但是光是拿到了这些东西我们怎么能够满足呢?我们一个即时通讯软件最重要的不就是要能够通讯么!所以我们下一步就要接受别人发来的数据. public static void findMan(){ System.out.println("--------find start----------"); Roster roster = connect.co…
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Net; using System.Threading…