1700438960
1700438961
public static int abs(int abs){
1700438962
1700438963
return 0;
1700438964
1700438965
}
1700438966
1700438967
public static void main(String[]args){
1700438968
1700438969
System.out.println(“PI=”+PI);
1700438970
1700438971
System.out.println(“abs(100)=”+abs(-100));
1700438972
1700438973
}
1700438974
1700438975
}
1700438976
1700438977
以上代码中,定义了一个PI字符串类型的常量,又定义了一个abs方法,与静态导入的相同。首先说好消息:编译器没有报错,接下来是不好的消息了:我们不知道哪个属性和哪个方法被调用了,因为常量名和方法名相同,到底调用了哪一个方法呢?我们运行一下看看结果:
1700438978
1700438979
PI=祖冲之
1700438980
1700438981
abs(100)=0
1700438982
1700438983
很明显是本地的属性和方法被引用了,为什么不是Math类中的属性和方法呢?那是因为编译器有一个“最短路径”原则:如果能够在本类中查找到的变量、常量、方法,就不会到其他包或父类、接口中查找,以确保本类中的属性、方法优先。
1700438984
1700438985
因此,如果要变更一个被静态导入的方法,最好的办法是在原始类中重构,而不是在本类中覆盖。
1700438986
1700438987
1700438988
1700438989
1700438991
编写高质量代码:改善Java程序的151个建议 建议11:养成良好习惯,显式声明UID
1700438992
1700438993
我们编写一个实现了Serializable接口(序列化标志接口)的类,Eclipse马上就会给一个黄色警告:需要增加一个Serial Version ID。为什么要增加?它是怎么计算出来的?有什么用?本章就来解释该问题。
1700438994
1700438995
类实现Serializable接口的目的是为了可持久化,比如网络传输或本地存储,为系统的分布和异构部署提供先决支持条件。若没有序列化,现在我们熟悉的远程调用、对象数据库都不可能存在,我们来看一个简单的序列化类:
1700438996
1700438997
public class Person implements Serializable{
1700438998
1700438999
private String name;
1700439000
1700439001
/*name属性的getter/setter方法省略*/
1700439002
1700439003
}
1700439004
1700439005
这是一个简单JavaBean,实现了Serializable接口,可以在网络上传输,也可以本地存储然后读取。这里我们以Java消息服务(Java Message Service)方式传递该对象(即通过网络传递一个对象),定义在消息队列中的数据类型为ObjectMessage,首先定义一个消息的生产者(Producer),代码如下:
1700439006
1700439007
public class Producer{
1700439008
1700439009
public static void main(String[]args)throws Exception{
[
上一页 ]
[ :1.70043896e+09 ]
[
下一页 ]