今天看到一句private final static XPathFactory factory=XPathFactory.newInstance();
private私有,static公有,放在一起不知怎么理解
private 作用在本类,而静态可以通过类名在任何地方调,不是矛盾了
追答哦,我搞错了,这里修饰的是变量factory不是方法,也是静态的意思,就是这个变量在这个类的所有实例里共享为一个,private代表是私有变量,只有这个类的实例内部能够访问,final是代表这个变量一旦被初始化,就不能更改了。final static同时修饰一个变量的时候,也可以认为是一个常量,只是实现的方式和真正意义的常量有点区别而已。
追问其他类可以调这个常量吗
追答声明成private就不行了,你可以声明成public,但在上面的例子里没有必要声明成public,factory代表一个工厂实例,应该是内部使用的。这个变量对于其他类没有意义,声明成public不会对你的程序带来好处,反而增加不必要的误解。如果其他类想使用这个工厂实例不应该依赖当前的类,它可以自己定义自己的factory=XPathFactory.newInstance();使用。
追问那他定义一个static不是很没有必要
追答就当前类来说,定义成static是有好处的,其一是当前类永远都只使用一个实例;其二是当前类所有使用的地方只需要使用factory变量就可以了。否则所有调用的地方都要使用XPathFactory.newInstance();来获取一个实例,代码不够简洁,而且如果要换一个比如SubXPathFactory.newInstance();来代替当前实例,就要更改所有地方了。
声明成public不会带来好处,因为其他类使用都要调用当前类.factory而不是factory来使用,不简洁,另外如果这样使用,其他类就要依赖当前类,当前类的这个变量不是稳定的,显然这个代价比其所带来的使用方便性要高得多。