java 编程规范 check list

共享一些最近工作中收集到的一些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)的条目。

 

时间: 2024-08-05 18:18:03

java 编程规范 check list的相关文章

实现高效Java编程规范的十一条基础规则

编程|规范 本文介绍的Java规则的说明分为5个级别,级别1是最基本也是最重要的级别,在今后将陆续写出其他的规则.遵守了这些规则可以提高程序的效率.使代码有更好的可读性等. (1) 避免使用NEW关键字来创建String对象 把一个String常量copy到String 对象中通常是多余.浪费时间的. Public class test{ Public void method(){ System.out.print (str); } private String str = new String

JAVA 编程规范

编程|规范 1. 应用范围 本规范应用于采用J2EE规范的项目中,所有项目中的JAVA代码(含JSP,SERVLET,JAVABEAN,EJB)均应遵守这个规范.同时,也可作为其它项目的参考. 2. 设计类和方法 2.1 创建具有很强内聚力的类 方法的重要性往往比类的重要性更容易理解,方法是指执行一个统一函数的一段代码.类常被错误的视为是一个仅仅用于存放方法的容器.有些开发人员甚至把这种思路作了进一步的发挥,将他们的所有方法放入单个类之中. 之所以不能正确的认识类的功能,原因之一是类的实现实际上

升级 Java 编程规范的6个约定

作为 Java 开发人员,我们会遵循一系列的编码风格和开发习惯.习惯使然是一方面,另一方面,我们也从不停下脚步质疑这些习惯.一段时间以后,笔者养成了一些不同于常人的编码风格和开发习惯.当第一次了解到这些编码风格时,笔者感到又惊又气.但是,花了一段时间践行这些习惯之后,笔者意识到它们的确能造就更加简洁可控的代码库,同时也让开发者更加省心. 不要因这些想法的另类而否定它们,笔者建议你用几周时间尝试其中的一两条,如果你仍然不喜欢它们,换回以前的代码风格也用不了多久时间. 零注释(公共 API 除外)

11个PHPer必须要了解的编程规范_php技巧

本文将讨论常用的良好的代码习惯,或者称为代码规范,在PHP领域. 1,错误报告开启 错误报告是在PHP中一个非常有用的功能,应同时在开发阶段启用. 这可以帮助我们确定我们的代码中的问题. 最常用的功能是"E_ALL",这有助于我们发现所有的警告和严重错误. 必须指出的是,我们把我们的代码投入上线前,我们应该关闭这个功能提示,否则会在浏览器上的暴漏所有潜在错误及警告. 2,使用DRY原则 'Do not Repeat Yourself',DRY原则指的是不要重复你的代码.. 这个概念是一

Java 编程技术中汉字问题的分析及解决(转)

编程|汉字|解决|问题 Java 编程技术中汉字问题的分析及解决 段明辉自由撰稿人2000 年 11月 8日内容: 汉字编码的常识 Java 中文问题的初步认识 Java 中文问题的表层分析及处理 Java 中文问题的根源分析及解决 Java Servlet 中文问题的根源 修改 Servlet.jar 中文乱码的处理函数 参考资料 作者简介在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Jav

仔细触摸Java编程中的“文档”和“包”

编程 什么是包 Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface).Java语言的包可以被另一个Java开发包所使用.如果我们要引用某个包中的类,用import关键字来标明即可.比如: import java.util. date=new Date  提示:import java.util.表示java.util中的所有公有类和接口被引入到当前包.这里的匹配符可以调入多个类名. 常用的Java标准包 JDK为我

Java 编程技术中汉字问题的分析及解决,文件操作

编程|汉字|解决|问题 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的 乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java 语言 默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编 码呢?本文将从汉字编码的常识入手,结合 Java 编程实例,分析以上两个问题并提出 解决它们的方案. 现在 Java 编程语言已经广

Java编程准则

编程|准则 Java编程准则内容摘录自:<Java 编程思想>第2版<附录C J a v a 编程准则>/(美) 埃克尔(Eckel,B)著:候捷译的,机械工业出版社,2002.9 版权归原作者和原出版社. 这份附录所提供的建议,可以帮助你进行低阶的程序设计,并帮助你写码. 当然,这些都只是一种方针而不是硬性规则.你应该视它们为一种灵感来源.记住,某些情况下你需要加以变通或甚至打破规则.设计 1. 优雅需要付出代价.从短期利益来看,对某个问题提出优雅的解决方法,似乎可能花你更多的时

Java 编程技术中汉字问题的分析及解决(转自IBM)

编程|汉字|解决|问题 Java 编程技术中汉字问题的分析及解决 段明辉自由撰稿人2000 年 11月 8日 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java 语言默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将从汉字编码的常识入手,结合 Java 编