JAVA编码规范细节整理

1  enum不能用作 变量名

备注:java 5以后enum是关键字

2  equals(obj)和hashCode()应该同时被重写

备注:特殊情况下我们要重写equals用来实现某些功能,但是同时必须要重写hashCode;如果obj1.equals(obj2) = true则obj1和obj2对应的内存地址应该相同,hashCode()返回的就是obj的对应的内存地址

3  equals(T obj)和compareTo(T obj)应该一起被重写

备注:严格要求来讲equals没有必定要和compareTo一起被重写,但是从正常的逻辑角度来说obj.equals(obj2) = true应该是obj.compareTo(obj2) = 0

4  java.lang.Error不应该被继承

备注:Error和他的子类代表异常的情况,例如内存溢出,通常只有java虚拟机(jvm)会接触到。

5使用object ==null替代object.equals(null)

备注:如果object为null使用object.equals(null)会抛出空指针异常

6  switch语句至少要含有3个分支

备注:如果只有2个分支,使用if else来进行逻辑处理

7  switch语句不应该包含不是case的标签

备注:switch(variable){

case 0:

myLabel:

result = 0 ;

break ;

case 1:…

default:…

}(错误的写法)

switch(variable){

case 0:…

case 1:…

}(正确的写法)

8匿名类的长度不应该太长(建议的长度是不超过20行)

备注:匿名类代码长度过长,应该新建一个类(从代码可读性的角度)

9[](数组符号)应该放在方法签名的类型后面

备注:int[]   foo();(正确的写法)int foo()[];(错误的写法)

10[]应该放在类型的后面而不是变量名的后面

备注:int[] arr ;(正确的写法)int arr[] ;(错误的写法)

11不应该在一条表达式里面含有子表达式

备注:int a = 10 + 12 ; System.out.println(a);(正确的做法)

System.out.println(10 + 12) ;(错误的代码)

这样的好处是代码可读性强

12避免数组的循环

备注:使用System.arrayCopy方法替代数组循环来拷贝数据2个数组之间的数据

13避免使用assert作为标识

14避免捕获空指针异常

备注:正常情况下代码不会抛出空指针异常,catch模块会隐藏原有的异常,导致其他更多微妙的错误

15避免代码注释掉的行

16在BigDecimal的构造方法中,避免使用数字的构造方法

备注:new BigDecimal(.1)这个不等于0.1其实是等于.1000000000000000055511151231257827021181583404541015625,因为0.1不等用二进制数来表示,建议使用new BigDecimal(“0.1”)来代替

17避免抛出 空指针异常

备注:很多人猜测这是虚拟机抛出的异常,考虑使用IllegalArgumentException(非法参数异常)

18避免复杂度过高的类

19避免太复杂的方法

20整数实例化

备注:不要创建已经存在的整数,如BigInteger.ZERO, java 1.5以后的BigDecimal.ZERO ,BigDecimal.ONE

21布尔对象的实例化

备注:避免创建布尔值,可以使用Boolean.TRUE /Boolean.FALSE或者Boolean.valueOf();

22有问题的空检查

备注:如果一个对象为null ,调用这个对象的方法会出现空指针异常,有可能是因为你用||替代了&&

23大小写不敏感的字符串比较,不应该通过中间变量来进行比较

备注:boolean result = foo.equalsIgnoreCase(bar)(正确的写法);

boolean result = foo.toLowerCase().equlas(bar.toLowerCase());(错误的写法)

第二种写法效率比较低

24  ToArray类型转换的异常

备注:如果你想要得到某个集合类的数组,你需要传递一个指定类的数组参数到toArray方法中,否则你会得到类型不匹配的异常

25类的命名需要遵循命名规范

备注:命名规范一般是大写字母开头,一般有camel命名规则

26类的变量不应该用public修饰

备注:public修饰变量不遵循java的封装原则

27在com.sun.*和sun.*的包 不应该被使用

备注:在com.sun.*和sun.*的类是被认为某些方法的具体的实现,但是他们不是java api的一部分,当jdk的版本发生变化,可能会出现问题。

28关闭资源

备注:保证资源(像Connection Statement ResultSet)在使用过后关闭

29  if语句应该被合并

备注:if(condition1 ){ if(condition2) {…}}(错误的写法)

if(condtion1 && condition2) {…}(正确的写法)

30使用Collection.isEmpty()来判断Collection是否为空

备注:使用Collection.size()也有同样的效果,但是Collection.isEmpty()代码更易读。

31代码注释不应该放在 代码的结尾

备注:

//correct comment

int a = 1 ;(正确的注释)

int  a = 1 ; // wrong comment(错误的注释)

32使用equals来比较2个object的引用

33常量命名需要遵循命名规范

备注:常量命名的正则表达式是^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$

34常量应该被申明为final static而不仅仅是final

备注:如果仅用final修饰变量,对于多个实例化的对象都会增加使用内存。

35常量不应在接口中被定义

36构造函数调用重写的方法

备注:调用可重写的构造方法产生对象,可能会存在风险。例如

public class SeniorClass(){

public Senior(){

return toString();

}

public String toString(){

return“Imseniorclass”;

}

}

public class Junior extends SeniorClass(){

public Junior(){

super();

name=”Junior”;

}

public toString(){

return name.toUperCase();

}

}

37逻辑控制语句,if, for, while和switch不应该嵌套太深

备注:嵌套的if, for,while,switch语句嵌套太深,可读性比较差,最多嵌套长度为3

38过时的代码应该被移除

备注:对于被用@Deprecated标注的代码,应该最终被删除

39过时的元素应该同时拥有申明并且在javaDoc中有标志

备注:public class foo(

@Deprecated

public void f1(){}(不正确的写法)

/**

* @Deprecated

*/

public void f2(){}(不正确的写法)

/**

*@Deprecated

*/

@Deprecated

public void f3(){}(正确的写法)

)

40重复的代码块

备注:重复的代码块应该被抽出来公用

41应该返回空的数组或者集合类而不是null

备注:返回空的数组或者集合,而不是null可以降低复杂度,同时减少空指针异常的概率。

42  Empty Finalizer

备注:如果finalizer()方法是空的,那么它没必要出现

43空的语句应该被删除

备注:空的方法,循环,都应该被删除

44  Enumeration不应该被实现

备注:根据oracle的java官方文档,enumeration接口是复制的iterativeor接口,而且iterator接口中,增加了可供原则的remove方法,以及更短的方法名。

45异常类应该是不可改变的

备注:异常意味着当错误出现的时候,应用的一个状态,用final修饰可以确保错误的异常状态不会被改变,例子如下

public class MyException extends Exception{

private int status ;

public MyException(String msg){

super(msg);

}

public int getStatus(){

return status ;

}

public void setStatus(int status ){

this.status = status;

}

}(错误的写法)

public class MyException extends Exception{

private final int status ;

public MyException(String msg){

super(msg);

this.status = status ;

}

public int getStatus(){

return status ;

}

}(正确的写法)

46异常处理模块应该提供上下文并且保留原始的异常信息

备注:try{…}catch(Exception e){ LOGGER.info(e)}…(错误的写法)

try{…}catch(Exception e){LOGGER.info(‘context’, e); }(正确的写法)

47异常类型不应该在catch块中使用“的instanceof”测试

备注:try{..

}catch(Exception e){

if(e instanceof IOException){…}

if(e instanceof NullPointerException){…}

}(错误的写法)

try{

}catch(IOException e){

}catch(NullPointerException e){

}(正确的写法)

48在finally块中不应该抛出异常

备注:try {

} catch(Exception e){

}finally{

throw new Exception();

}(错误的写法)

try{

}catch(Exception e){

}finally{

//clean up

}(正确的写法)

49只能由JVM出发垃圾回收的方法

备注:主动调用System.gc()或者Runtime.getRuntime().gc()不是个好主意,因为JVM的供应商,版本都未知

50表达式不应该太复杂

备注:复杂度最高为3

51变量名遵循命名规范

备注:正则表达式^[a-z][a-zA-Z0-9]*$

52有FIXME标示的地方应该要被处理

备注:FIXME标示通常是用来表示该处代码有bug,但是可能要稍后才进行处理,这条规则是要表示bug要持续追踪,并确保他不会被忽视

53通用的异常Error,RuntimeException,Throwable不应该向外抛出

备注:

public void foo() throws Throwable{ throw new Exception(“my message”) ; }(错误的写法)

public void foo(){ throw new MyException(“my message exception”)}(正确的写法)

54幂等操作

备注:避免幂等操作,如以下例子

int x = 2 ; x = x ;(错误的写法)

55  if语句条件不应该总是true或者false

备注:

public void foo() { if(true){doSomething(); }}(错误的写法)

public void foo() {doSomething(); }(正确的写法)

56  if else for while do语句应该使用大括号

备注:

if(condition) foo(); foo1();(错误的写法)

if(condition){

foo();

}

foo1();(正确的写法)

57低效的字符串缓冲

备注:避免在Stringbuffer中连接非文字或者使用append()方法

58实例化获取类

备注:避免通过实例化一个类来获取类例如Class c = new String().getClass() ;应该写成Class c = String.class;

59单元测试覆盖不到的分支

备注:分支覆盖率要达到65%

60整数的实例化

备注:在jdk 1.5版本中使用new Integer()可能会导致内存分配问题,Integer.valueOf()内存分配更加合理

61接口名称应该遵循命名规范

备注:^[A-Z][a-zA-Z0-9]*$

62  IP地址 不应该被硬编码

备注:IP地址 应该写在配置文件中

63应该用java的集合类如List代替特定的类的实现如LinkedList

备注:

public HashSet foo(){

return new HashSet();

}(错误的写法)

public Set foo(){

return new HashSet();

}(正确的写法)

64  Labels不应该被使用

备注:label在java里面并不经常使用,而且很多开发者并不清楚,他是如何工作的;

65左大括号应该放在代码的同一行最后面

备注:

if(condition){

}(正确的写法)

if(condition)

{

}(错误的写法)

66局部变量名和各个方法参数名 需要遵循命名规则

备注:^[a-z][a-zA-Z0-9]*$

67局部变量不应该和类中的属性名称一样

备注:局部变量和类中的属性一样的话会导致代码可读性变差

class Foo{

int name = 12;

public Foo(int name){

this.name = name;

}(正确的写法)

public void doSth(){

int name = 123;

System.out.println(name);

}(错误的写法)

}

68  Logger应该要用private static final修饰,并且应该共享一个命名约定

备注:LOG(?:GER)?

69  Long类型 后缀应该要用L来表示

备注:小写的”l”,很容易和1混淆

70循环的计数器不应该被在循环内部修改

备注:

String[] names = new String[]{“a”,”b”};

for(inti = 0 ; i < names.length ; i++){

if(name[i]== null){

i = names.length ;(错误的写法)

break;(正确的写法)

}

}

71在循环体中不应该包含超过1个的continue或者break语句

备注:

for(inti = 0 ; i < 10 ; i++){

if(i% 2 == 0){

continue ;

}

if( i % 3 == 0){

continue ;

}

}(错误的写法)

for(inti = 0 ; i < 10 ; i++){

if(i % 2 == 0 || i % 3 == 0){

continue ;

}

}(正确的写法)

72方法名应该遵循命名规范

备注:^[a-z][a-zA-Z0-9]*$

73方法的参数名,不应该被重新分配

备注:

public MyClass{

public String name =“12”;

public MyClass(String name){

name = name ;(错误的写法)

this.name = name ;(正确的写法)

}

public int add(int a , int b ){

a = a + b ;

return a ;(错误的写法)

return a + b ;(正确的写法)

}

}

74  equals方法名应该加上@Override的注解

备注:equals方法名应只用于重写object.equals(o),通过这样来防止混淆

75方法体 不应该为空

备注:

public void foo(){

}(错误的写法)

public void foo(){

//do something

}(正确的写法)

76方法名称不应该被命名为hashCode

备注:命名为hashCode有2种情况

1是个bug应该加上@Override的注解

2这不是个bug,但会使其他的开发人员混淆

77方法不应该含有太多的参数

备注:一个方法最多含有7个参数

78在一个不能实例化的类中,方法名丢失static修饰符

备注:一个不能被实例化的类,而且没有任何静态方法不能被使用

79修饰符应该有特定顺序

备注:一般按照如下的顺序来修饰

public protected private abstract static final transient volatilesynchronizednative strictfp

80没有注释的代码的语句的行数

备注:NCSS原则(没有注释的源码语句)

81代码嵌套块不应该留空

备注:for(int i = 0;i < 10 ; i++){  }(错误的写法)

for(inti = 0 ; i < 10 ; i++);(正确的写法)

82嵌套的代码块不应该被使用

备注:public voidevaluate(int operator){

switch(operator){

case ADD : {

int a = stack.pop();

int b = stack.pop();

int result = a + b ;

stack.push(result );

break ;

}

}

}(错误的写法)

public void evaluate(int operator){

switch(operator){

case ADD:

foo();

break;

}

}

private void foo(){

int a = stack.pop();

int b = stack.pop();

stack.push(a + b);

}

83非构造方法的方法名不应该和类名相同

备注:

class Foo{

public Foo(){} ;

public int Foo(){ return 0 ; }(错误的写法)

public int foo(){return 1 ; }(正确的写法)

}

84非静态类初始化不应该被使用

备注:非静态类初始化很少被使用,有时候能迷惑开发者。如以下代码

class MyClass{

private static final Map MY_MAP = new HashMap(){

{

put(“a”,”b”);

}

};(错误的写法)

private static final Map MY_MAP = ImmutableMap.of(“a”,”b”);(正确的写法)

}

85  Object.finalize()不应该被重载

备注:Object.finalize()是通过垃圾回收机制(GC)在对象不被引用的时候进行调用的

public void finalize(int someParam){

}(错误的写法)

public void someBetterName(int param){

}(正确的写法)

86当重写Object.finalize()方法时 应该用protected进行修饰

备注:一般而言Object.finalize()只有GC来调用,如果用public进行修饰,他意味着任意一个caller都能调用他

87不应该使用8进制数

备注:

int myNumber =010 ;(错误的写法)

int myNumber = 8 ;(正确的写法)

88重写方法不仅仅是调用父类中的方法

备注:

@Override

public void doSth(){

super.doSth();

}(错误的代码)

@Override

public void doSth(){

super.doSth();

doOther();

}(正确的写法)

89包名应该遵循命名规范

备注:^[a-z]+(\.[a-z][a-z0-9]*)*$

90不应该只为了toString方法而实例化一个元素

备注:

String a = new Integer(myInteger).toString()(错误的写法)

String a = Integer.toString(myInteger);(正确的写法)

91  public方法最多抛出一个异常

备注:为了对调用者保持复杂度,方法不应该抛出1个以上的异常

public void delete() throws IOException, SQLException{

}(错误的代码)

public void delete() throws SomeLevelException{

}(正确的代码)

92不应该在if - else的代码块中返回布尔值

备注:

if(condition){

return true ;

}else{

return false ;

}(错误的写法)

return condition ;(正确的写法)

93  return语句不应该出现在finally模块

备注:在finally模块会强制执行所有语句,之前有可能在try或者catch模块应该返回的是error但是在finally模块返回的却是OK

94右括号应该和下一个next ,catch ,finally在同一行

备注:

if(con1){

}

else{

}(错误的写法)

if(con1){

}else{

}(正确的写法)

95右大括号应该在放在一行的开头

备注:

if(con1){

doSomething() ;}

else{ doOther() ; }(错误的写法)

if(con1){

doSomething();

}else{

doOther();

}(正确的写法)

96安全性,数组是直接存储的

备注:数组是直接存储的拷贝的对象,这个是用来防止将来元素发生变化时,数组中的元素也会发生变化

97简化条件判断

备注:没有必要在instanceof前面调用null判断,因为如果对象是null instanceof会返回false

98奇异场

备注:如果一个属性仅仅被一个方法引用,可以考虑使用局部变量来代替这个属性

99一条语句应该放在单独的一行里

备注:

a =“aa”; b =“bb”(错误的写法)

a =”aa”;

b =”bb”;(正确的写法)

100用char实例化StringBuffer

备注:StringBuffer sb = new StringBuffer(‘c’);这个字符将要被转换成实例化StringBuffer的大小

101字符串实例

备注:避免实例一个String,这不是必须的

102字符串不应该重复

备注:

public void foo(){

System.out.println(“action”);

System.out.println(“action”);

System.out.println(“action”);

}(错误的写法)

public void foo(){

String str =“action”;

System.out.println(str);

System.out.println(str);

System.out.println(str);

}(正确的写法)

103  String调用toString方法

备注:避免调用String的toString方法

104  String.valueOf()不应该直接加在一个String后面

备注:增加String.valueOf()到一个String后面 减少代码的可读性,传递到String.valueOf()的参数 应该直接加到String上面

105当检查字符串是否相等的时候,常量应该放在等式的左边

备注:

String myString = null ;

System.out.println(“equals=”+ myString.equal(“foo”))(错误的写法)

String myString = null ;

System.out.println(“equals=”+”foo”.equals(myString));(正确的写法)

106  String需要用equals来进行比较

备注:String和其他的Object应该使用equals来进行比较

if(variable==“foo”) {}(错误的写法)

if(“foo”.equals(variable)){}(正确的写法)

107当重写Object.clone()方法的时候应该调用super.clone()

备注:根据Oracle的java文档中关于Object.clone()说明

1  x.clone() != x ;

2  x.clone().getClass() == x.getClass();

3  x.clone().equals(x);

4  super.clone()返回一个实例

5  super.clone()返回调用者的一个实例

6  object.clone()展现的是一个调用者的实例

class BaseClass implements Cloneable{

@Override

public Object clone() throws CloneNotSupportedException {

return new BaseClass() ;(错误的写法)

return super.clone();(正确的写法)

}

}

108  super.finalize()应该在实现object.finalize()后调用

备注:

protected void finalize(){

releaseResource() ;(错误的代码)

}

protected void finalize(){

releaseResource() ;

super.finalize();(正确的写法)

}

109  switch语句应该要添加结束语句(break , return , continue)

备注:switch(variable){

case 0 : doSomething ();(错误的写法阿)

case 1: doOther(); break ;(正确的写法)

default:

doSomthing();

}

110  switch中的case不应该含有太多行

备注:一般一个case最多5行

switch(variable){

case 0 :

System.out.println(“11”);

System.out.println(“11”);

System.out.println(“11”);

break;(正确的写法)

default:

System.out.println(“11”);

System.out.println(“11”);

System.out.println(“11”);

System.out.println(“11”);

System.out.println(“11”);

break;(错误的写法)

}

111  switch应该在最后含有default语句

备注:

switch(state){

case 0

case 1:

System.out.println(“11”);

break;

}(错误的写法)

switch(state){

default:

System.out.println(“12”);

break;

case 0 :

System.out.println(“12”);

}(错误的写法)

switch(state){

case 0 :

System.out.println(“12”);

break ;

case 1:

break;

default:

System.out.println(“123”);

break;

}(正确的写法)

112同步类Vector Hashtable StringBuffer不应该被使用

备注:这些Vector Hashtable StringBuffer在早期的JAVA API中是被设计成线程安全的,但是在表现方面并不理想,即使是在单线程的情况下使用,现在可以使用不同步的方法来进行替代,使用ArrayList ,LinkedList代替Vector;HashMap替代Hashtable,StringBuilder替代StringBuffer

113  System.exit();Runtime.getRuntime().exit()不应该被调用

备注:调用System.exit(int status )和Runtime.getRuntime().exit(int status )会导致整个java虚拟机的关闭,要小心使用;例如他不应该由在一个J2EE容器内的应用进行调用。

114  System.out和System.err不应该像logger一样被使用

备注:logger必须满足的2个条件:用户能容易的得到日志;日志信息有一定的格式 确保用户能容易的浏览他们

115制表符(Tab)不应该被使用

备注:开发人员不应该因为要去阅读源码而去设置Tab的长度,tab应该被禁止。

116默认没有名称的包名 不应该被使用

117一个接口或类的定义应该按照预先定义的顺序

备注:1变量定义2构造方法3函数

public class Foo (){

public static final int OPEN = 4 ;

private int field = 0 ;

public Foo(){}

public void doSomething(){}

}(正确的写法)

public class Foo (){

public Foo(){}

public void doSomething(){}

public static final int OPEN = 4 ;

private int field = 0 ;

}(错误的写法)

118  Object.finalize()方法不应该被调用

备注:根据java的官方文档Object.finalize()是被GC调用的。

119  Object.finalize()方法不应该被重写

备注:Object.finalize()没有明确的保证当一个对象的引用被除去的时候,finalize()方法会被立即的调用,其中间隔可能有几毫秒到几分钟,当一些系统资源需要处理一个对象,最好不要依赖这个异步机制来处理它们。

120  Thread.run()和Runable.run()不应该直接被调用

备注:使用Thread.run()和Runable.run()的目的是执行代码在一个独立的线程,直接调用这些方法并没有意义,因为这些处理代码是在当前的线程中。

Thread myThread = new Thread(runnable) ; myThread.run()(错误的写法)

Thread myThread = new Thread(runnable) ; myThread.start()(错误的写法)

121  Throwable和Error类不应该被捕获

备注:Throwable是所有Error和Exception的父类,Error是所有error的父类,不应该由应用进行捕获,只有Exception和他的子类才能被捕获

try{…} catch(Throwable t){}(错误的写法)

try{…} catch(Error e){}(错误的写法)

try{…} catch(Exception e){}(正确的写法)

122  Throw.printStackTrace()从来不应该被调用

备注:应该使用logger来代替

123抛出的声明不应该是多余的

备注:抛出相同的异常;RuntimeException或者是他的子类;子类和父类

void foo() throws MyException , MyException{}(错误的写法)

void foo() throws Throwable , Excepion{}(错误的写法)

void foo() throws RuntimeException {}(错误的写法)

void foo() throws    MyException{}(正确的写法)

void foo() throws Throwable {}(正确的写法)

void foo() {}(正确的写法)

124  TODO标志应该被处理

125  Try-catch块不应该嵌套

备注:

try{

try{

doSomething();

}catch(RuntimeException r){

}

doSomething();

}catch(RuntimeException e){

}(错误的写法)

private void dedicatedMethod(){

try{

doSomething();

}catch(RuntimeException e){

}

}

try{

dedicatedMethod();

doSomething();

}catch(Exception e){

/**  */

}(正确的写法)

126参数类型的命名需要遵循命名规范

备注:^[A-Z]$

class MyClass(){

 void addAll(Collection c){}

}(错误的写法)

class MyClass(){

 void addAll(Collection c){}

}(正确的写法)

127在return语句之前不必要的局部变量

备注:避免创建不必要的局部变量

128没被使用的参数

备注:避免给一个方法或者构造函数传递参数,但是却不使用这个参数

129没有被使用的局部变量

备注:当检测到一个局部变量声明或分配,但未使用。应该删除这个变量

130没有使用的修饰符

备注:在接口中的属性或方法含有默认的修饰符,变量默认的修饰符是public static final方法的修饰符是public abstract,嵌套在接口中的类或者是接口是public static

131检查完对象是否为null然后调用equals方法

备注:在检查完object1 != null调用object1.equals(obj2)而不是obj2.equals(object1)

132没有使用的私有字段

备注:当检测到一个私有字段声明分配一个值,但没有使用。

133没有使用的私有方法

备注:没有被使用的私有方法,意味着dead code而dead code意味着没有存在的必要,也就是说应该被删除,这样能够减少代码量,也能减少引入bug

134数组转化为List

备注:使用Arrays.asList()将数组转化为List

135使用字符的索引

备注:当检查单个字符的索引是,使用String.indexOf(char)来获得,这样速度快

136使用String Buffer的长度

备注:使用StringBuffer.length()来决定StringBuffer的长度,而不是使用StringBuffer.toString().equals()或者StringBuffer.toString().length()

137没有用到的import应该被删除

备注:java文件的导入部分,应该由IDE自动生成而不是依靠人工生成的,没有使用的或者无用的导入会导致代码的可读性降低,应该把这些删除

138对不可变的对象 操作是无效的

备注:对一个不可变对象(BigDecimal或者BigInteger)进行操作,不会改变这个对象本身,操作的结果是一个全新的对象,因此忽视操作的结果是个错误

139表达式不需要括号应该删除,以免引起误解

备注:使用括号有时候能引起误解,所以有的时候应该被删除。

return 3 ;(正确的写法)

return (x);(错误的写法)

return (x + 1);(错误的写法)

int  x = (y/2 + 1) ; (错误的写法)

int  y = ( 4 + x) *y(正确的写法)

140工具类不应该有公共的构造方法

备注:工具类意味着一群静态方法的结合,这意味着这个类并不需要被实例化,因次这不应该有公共的构造方法,java默认的给每个类添加一个公共的构造方法,因此至少一个非公用的构造方法应该添加到代码中

class StringUtils{

public static String add(String s1 , String s2){

return s1 + s2 ;

}

}(错误的写法)

class StringUtils{

private StringUtils(){

}

public static String add(String s1, String s2){

return s1 + s2 ;

}

}(正确的写法)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,295评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 传送门 解读阿里Java开发手册(v1.1.1) - 异常日志 前言 阿里Java开发手册谈不上圣经,但确实是大量...
    kelgon阅读 4,300评论 4 50
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,486评论 1 114
  • 11个站,终于出了地铁。 路上都是穿着白衬衫,黑长裤的毕业生,小曼穿着红色便服,走在人群中被推着走,竟然稍显突兀。...
    南国小曼阅读 208评论 1 0