java 编程规范 check list

简介:

共享一些最近工作中收集到的一些java小代码,不知道如何归档好,记录到这持续更新吧。

1)通过接口sun.reflect.Reflection.getCallerClass()可以得到运行时线程调用本函数的类,是不是很神奇!这样可以不用通过函数参数标识来区分函数该执行哪个分支的逻辑了,当然还可以实现其他很特别的功能(不过,除特殊需求时没办法,否则JDK是不推荐使用这类接口的)。

2ConcurrentHashMap.putIfAbsent用法实例,用Map实现缓存时常会用到。你是这样用的么?

Object newLock = new Object();

lock = parallelLockMap.putIfAbsent(classNamenewLock);

if (lock == null) {

        lock = newLock;

}

操作lock其他逻辑……

3)这样代码可得到系统类加载器:

java.lang.ClassLoader.getSystemClassLoader()

4)正无穷大的Double还可以这样表示: 1.0 / 0.0

5hashCodeequals方法重写可参考:java.lang.StackTraceElement

6StringBuilderStringBuffer都继承同一个抽象类AbstractStringBuilder,默认都初始化长度为16char数组拼接存储字符串字符信息,区别是StringBuffer通过synchronized每个方法实现了同步。注意字符串append过长时根据场景设置下初始化长度,避免char数组不停的扩展拷贝。

7)接口里不能有具体的方法实现代码对么?那请看看下面这个强大的接口神器:

public interface CookiePolicy {

    public static final CookiePolicy ACCEPT_ALL = new CookiePolicy(){

        public boolean shouldAccept(URI uriHttpCookiecookie) {

            return true;

        }

    };

    public static final CookiePolicy ACCEPT_NONE = newCookiePolicy(){

        public boolean shouldAccept(URI uriHttpCookiecookie) {

            return false;

        }

    };

    public static final CookiePolicy ACCEPT_ORIGINAL_SERVER  = new CookiePolicy(){

        public boolean shouldAccept(URI uriHttpCookiecookie) {

            return HttpCookie.domainMatches(cookie.getDomain(), uri.getHost());

        }

    };

    public boolean shouldAccept(URI uriHttpCookie cookie);

}

8192.168.11.11Java里您如何存储?字符串么?起始用一个int就够了:

// byte[4] 转换int

 int address  = addr[3] & 0xFF;

 address |= ((addr[2] << 8) & 0xFF00);

 address |= ((addr[1] << 16) & 0xFF0000);

 address |= ((addr[0] << 24) & 0xFF000000);

// int 转换byte[4]

addr[0] = (byte) ((address >>> 24) & 0xFF);

addr[1] = (byte) ((address >>> 16) & 0xFF);

 addr[2] = (byte) ((address >>> 8) & 0xFF);

addr[3] = (byte) (address & 0xFF);

9)如何将字符串"java.lang.String"转换为"java/lang/String.class"
这样就错了,会按正则表达式解析出格式非法的:

String result = name.replaceAll(".""/");

这样就对了,但效率不行,咋替换个字符这么麻烦:

String result = name.replaceAll("\\.""/");

这样就又快又清晰了:

String result = name.replace('.' ,'/');

10)为啥ConcurrentHashMap能实现分段加锁,因为它的每段是这样定义的,每段都能单独加锁释放锁。

static final class Segment<K,V> extends ReentrantLock{...}

11)想自己实现个简单的分段加锁咋办?把锁对象放到ConcurrentHashMap里就行了:

private final ConcurrentHashMap<String, Object> parallelLockMap;

12HashSet相当取巧,就是用HashMap的功能包装一下得到的,内部定义了"private transient HashMap map;",相关接口也都是在操作这个map,其中key是真实要存储的值,value对应的对象都是相同的: private static final Object PRESENT = new Object();

13LinkedHashMap构造时有个神奇的accessOrder参数,默认false代表按插入顺序排序,即我们最常使用的有序map。可当设置为true时:该哈希映射的迭代顺序就是最后访问其条目的顺序,从近期访问最少到近期访问最多的顺序(访问顺序),最近访问即最近调用get(key)的条目。

 

目录
相关文章
|
6月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
6月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
6月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
101 4
|
4月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
99 5
|
4月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
91 3
|
4月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
49 1
|
4月前
|
前端开发 Java 数据库
企业级JAVA、数据库等编程规范之命名风格 —— 超详细准确无误
文章详细阐述了企业级编程中Java和数据库等编程规范的命名风格,包括包名、类名、方法名、参数名、成员变量、局部变量、常量、抽象类、异常类、测试类、数据库及其字段和CSS等的命名规则。
76 0
企业级JAVA、数据库等编程规范之命名风格 —— 超详细准确无误
|
6月前
|
Java 数据库
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
这篇文章讲述了作者在使用SpringBoot和Mybatis-plus时遇到的一个数据库字段映射问题,即SQLSyntaxErrorException错误,原因是实体类字段和数据库字段不匹配。文章提供了两种解决方法:一是关闭自动驼峰命名转换配置,二是修改数据库字段以匹配实体类字段,最终成功解决了问题。
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
|
6月前
|
存储 安全 Java
java集合框架复习----(2)List
这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。
java集合框架复习----(2)List
|
6月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set