摘要:
左移(<<) 将一个数对应的二进制表示整体左移,不考虑符号位,左边超出的部分舍弃,右边补零。 正数 以数字10为例,二进制表示为 00000000 00000000 00000000 00001010 第一位为符号位,0表示正数,1表示负数。左移1位之后为 00000000 00000000 000 阅读全文
摘要:
前言 Objenesis是一个小的java库,主要用来实例化类对象,java本身仅支持通过构造器实例化,实例化时必须使用合适的构造器,但有些情况下不能使用这种方式实例化: 构造器需要参数 构造器有副作用 构造器会抛异常 一些常见的类库都要求类包含一个默认的无参构造器,而Objenesis可以绕过构造 阅读全文
摘要:
前言 在看objenesis(一个提供多种实例化对象的方式的库)的源码时,发现其中使用到了ReflectionFactory类,它会绕过构造器来实例化对象,且会跳过类成员变量的初始化。 简单使用 使用反射实例化对象 import java.lang.reflect.Constructor; publ 阅读全文
摘要:
第一种方法 public class TestClosest2NthPower { public static void main(String[] args) { System.out.println(test(-1));//1 System.out.println(test(1));//1 Sy 阅读全文
摘要:
前言 Unsafe类位于sun.misc包下,它是java实现高并发的基础,通过它可以执行一些不安全的操作,如像C语言一样直接操作内存资源, 它提供的这些方法增强了java对底层资源的操作能力,但同时也增加了程序出错的风险,所以对它的使用一定要慎重。 核心功能介绍 Unsafe提供的API大致可分为 阅读全文
摘要:
简单使用 import java.util.function.Consumer; public class TestLambda { public static void main(String[] args) { Consumer<String> consumer = System.out::pr 阅读全文
摘要:
死锁定义 线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。 由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1, 它们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。 产生死锁的4 阅读全文
摘要:
前言 Spring Expression Language(简称 SpEL)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言, 它的语法类似于传统 EL(如jsp中的EL表达式),但提供额外的功能,最出色的就是函数调用和简单字符串的模板函数。 SpEL 作为Spring框架的基础,但并不依 阅读全文
摘要:
前言 jsr305是一个规范,具体来说是一套用来给代码分析工具(如IDEA)检查代码缺陷用的注解,类似jsr303(Bean Validation规范)。今天在学习Spring源码时,发现其中使用到了jsr305中的注解。 Spring中的NonNull注解中使用到了jsr305中的Nonnull注 阅读全文
摘要:
定义 表示一个作用于某对象结构中的各元素的操作,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 结构 Visitor,访问者接口,每个具体元素类对应一个访问操作,参数类型标识了被访问的具体元素。 ConcreteVisitor,具体的访问者对象,实现了访问者接口。 Element, 阅读全文