1700440890
1700440891
interface S{
1700440892
1700440893
public void doSomething();
1700440894
1700440895
}
1700440896
1700440897
仔细看main方法,注意那个B接口。它调用了接口常量,在没有任何显式实现类的情况下,它竟然打印出了结果,那B接口中的s常量(接口是S)是在什么地方被实现的呢?答案是在B接口中。
1700440898
1700440899
在B接口中声明了一个静态常量s,其值是一个匿名内部类(Anonymous Inner Class)的实例对象,就是该匿名内部类(当然,可以不用匿名,直接在接口中实现内部类也是允许的)实现了S接口。你看,在接口中存在着实现代码吧!
1700440900
1700440901
这确实很好,很强大,但是在一般的项目中,此类代码是严禁出现的,原因很简单:这是一种不好的编码习惯,接口是用来干什么的?接口是一个契约,不仅仅约束着实现者,同时也是一个保证,保证提供的服务(常量、方法)是稳定、可靠的,如果把实现代码写到接口中,那接口就绑定了可能变化的因素,这就会导致实现不再稳定和可靠,是随时都可能被抛弃、被更改、被重构的。所以,接口中虽然可以有实现,但应避免使用。
1700440902
1700440903
注意 接口中不能存在实现代码。
1700440904
1700440905
1700440906
1700440907
1700440909
编写高质量代码:改善Java程序的151个建议 建议32:静态变量一定要先声明后赋值
1700440910
1700440911
这标题看着让人很纳闷,什么叫做变量一定要先声明后赋值?Java中的变量不都是先声明后使用的吗?难道还能先使用后声明?能不能暂且不说,我们先来看一个例子,代码如下:
1700440912
1700440913
public class Client{
1700440914
1700440915
public static int i=1;
1700440916
1700440917
static{
1700440918
1700440919
i=100;
1700440920
1700440921
}
1700440922
1700440923
public static void main(String[]args){
1700440924
1700440925
System.out.println(i);
1700440926
1700440927
}
1700440928
1700440929
}
1700440930
1700440931
这段程序很简单,输出100嘛!对,确实是100,我们再稍稍修改一下,代码如下:
1700440932
1700440933
public class Client{
1700440934
1700440935
static{
1700440936
1700440937
i=100;
1700440938
1700440939
}
[
上一页 ]
[ :1.70044089e+09 ]
[
下一页 ]