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

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

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

Object newLock = new Object();

lock = parallelLockMap.putIfAbsent(className, newLock);

if (lock == null) {

lock = newLock;

}

操作lock其他逻辑……

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

java.lang.ClassLoader.getSystemClassLoader()

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

(5)hashCode和equals方法重写可参考:java.lang.StackTraceElement

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

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

public interface CookiePolicy {

public static final CookiePolicy ACCEPT_ALL = new CookiePolicy(){

public boolean shouldAccept(URI uri, HttpCookiecookie) {

return true;

}

};

public static final CookiePolicy ACCEPT_NONE = newCookiePolicy(){

public boolean shouldAccept(URI uri, HttpCookiecookie) {

return false;

}

};

public static final CookiePolicy ACCEPT_ORIGINAL_SERVER  = new CookiePolicy(){

public boolean shouldAccept(URI uri, HttpCookiecookie) {

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

}

};

public boolean shouldAccept(URI uri, HttpCookie cookie);

}

(8)192.168.11.11在Java里您如何存储?字符串么?起始用一个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;

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

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

java 编程规范 check list相关推荐

  1. java编程规范换行_Java编程规范整理

    近期即将开始编码阶段,特地整理一下各方面的编程规范与命名约定,以便内部团队风格统一. 文章大多从网络上收集汇总而来,参考列表附在文章末尾. Java编程规范整理 基本命名规范 包命名 包名按照域名的范 ...

  2. JAVA编程规范总结

    JAVA编程规范总结: 1.编码规范好处: 1.减少维护成本和时间 2.增加可读性,方便自己和维护的技术人员二次改善 3.提高开发效率,团队协作 4.养成好习惯,提高自身修炼 2.命名规范: 1.尽量 ...

  3. java 标识变量_Java变量与数据类型之一:Java编程规范,关键字与标识符

    原标题:Java变量与数据类型之一:Java编程规范,关键字与标识符 大家好,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字 ...

  4. java与数据类型相关的十个关键字_乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符...

    大家好,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对代码进行合理注释 ...

  5. 阿里巴巴Java开发规范线程池_阿里巴巴java编程规范.pdf

    阿里巴巴java编程规范 目录 一.编程规约1 (一) 命名规约1 (二) 常量定义3 (三) 格式规约4 (四) OOP 规约6 (五) 集合处理 10 (六) 并发处理 12 (七) 控制语句 1 ...

  6. Java编程规范(一)

    Java编程规范 编程规约 命名风格 常量定义 代码格式 OOP约束 来源:阿里巴巴 编程规约 命名风格 不能以下划线或者美元符号开始或结束 **反例**:_name / __name / $name ...

  7. sun公司java编程规范【转载】

    java编程规范要学习的大致内容有如下部分,一个目录: Java编码规范 1 1.说明 3 1.1为什么要有编码规范 3 1.2版权声明 3 2.文件名(File Names) 3 2.1文件后缀(F ...

  8. 基于华为Java编程规范的Eclipse checkStyle.xml

    发现项目组成员代码规范存在较大的问题,于是就在华为编程规范的基础上制定了这份checkStyle.xml文档,至于Eclipse怎么安装checkStyle插件以及该插件怎么使用请自行Google之. ...

  9. html 注释_java基础- Java编程规范与注释

    一 前言 java编程规约是指在java代码编写过程中通俗的约定:通常我们是要遵守这些规范:这好比我们在生活中要遵守的道德准则,如果你做的事情超出了道德的底线,那就有可能会受到社会抨击:在java编程 ...

  10. java编程规范每行代码窄字符,wiki/0xFE_编程规范.md at master · islibra/wiki · GitHub

    0xFE_编程规范 使用UTF-8编码 使用空格缩进 命名 清晰表达意图, 少用缩写(行业通用除外, 如: request=req, response=resp, message=msg), 不应使用 ...

最新文章

  1. torch.randn torch.rand区别
  2. (一四三)类设计回顾
  3. ajax获取session值_java程序员你真的了解session与cookie吗?
  4. deployment:声明式的升级应用
  5. Vsftpd 虚拟用户配置参考---终极版
  6. android中的屏幕单位介绍
  7. 从0开始搭建基于Zookeeper的Spark集群
  8. 递归函数 二分查找法 的一些用法
  9. H264码流中SPS PPS详解
  10. Laravel文档梳理1、安装与初步配置
  11. linux命令之文件和目录操作
  12. html水晶按钮图片,css 如何实现一个水晶按钮的效果呢?
  13. 小srf的游戏 题解
  14. GO 重新进阶学习(四)
  15. cadence 通孔焊盘_过孔上焊盘,电源笑开颜
  16. 通过js实现页面布局
  17. jenkins流水线构建入门(单机容器形态)
  18. We trust you have received the usual lecture from the local System
  19. Windows下的二进制文件工具
  20. matlab基于SVM的手写字体识别,机器学习SVM--基于手写字体识别

热门文章

  1. Bootstrap页面布局4 - 嵌套布局
  2. WITH (NOLOCK)提高查询效率
  3. fg、bg、jobs、、ctrl + z命令
  4. 回忆大学到现在为止学到了什么?
  5. Silverlight 功能其全的PDF 控件
  6. JavaScript(3):JS和Html
  7. 良好的代码风格之if else?
  8. 现在生活好累啊。。。
  9. 人工智能实战2019 - 第4次作业(团队后期项目)- 就起这个名字吧
  10. HDU 2148 Score