打字猴:1.700438976e+09
1700438976
1700438977 以上代码中,定义了一个PI字符串类型的常量,又定义了一个abs方法,与静态导入的相同。首先说好消息:编译器没有报错,接下来是不好的消息了:我们不知道哪个属性和哪个方法被调用了,因为常量名和方法名相同,到底调用了哪一个方法呢?我们运行一下看看结果:
1700438978
1700438979 PI=祖冲之
1700438980
1700438981 abs(100)=0
1700438982
1700438983 很明显是本地的属性和方法被引用了,为什么不是Math类中的属性和方法呢?那是因为编译器有一个“最短路径”原则:如果能够在本类中查找到的变量、常量、方法,就不会到其他包或父类、接口中查找,以确保本类中的属性、方法优先。
1700438984
1700438985 因此,如果要变更一个被静态导入的方法,最好的办法是在原始类中重构,而不是在本类中覆盖。
1700438986
1700438987
1700438988
1700438989
1700438990 编写高质量代码:改善Java程序的151个建议 [:1700438078]
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{
1700439010
1700439011 Person person=new Person();
1700439012
1700439013 person.setName(“混世魔王”);
1700439014
1700439015 //序列化,保存到磁盘上
1700439016
1700439017 SerializationUtils.writeObject(person);
1700439018
1700439019 }
1700439020
1700439021 }
1700439022
1700439023 这里引入了一个工具类SerializationUtils,其作用是对一个类进行序列化和反序列化,并存储到硬盘上(模拟网络传输),其代码如下:
1700439024
1700439025 public class SerializationUtils{
[ 上一页 ]  [ :1.700438976e+09 ]  [ 下一页 ]