java private和static放在一起该怎么理解?

今天看到一句private final static XPathFactory factory=XPathFactory.newInstance();
private私有,static公有,放在一起不知怎么理解

刚刚和同事研究了一下,就来回答回答吧。
首先你的思想上有一个误区,认为static是存放在方法区里面是共享的。
这是不对的,你要去了解一下JVM运行时各个数据区的作用,private、public、protect、default这一类访问权限修饰符才是控制是不是共享的方法的。
实际上你要把private 和 static 分开来理解;
static的作用是JVM初始化的时候的时候把变量加载进来的一个作用,让对象在运行的时候不需要在实例化就可以使用,因为在JVM初始化的时候就已经实例化过了,这才是static的作用。
而private、puiblic、protect这一类的修饰符才是限制使用范围。
理解之后意义就清晰了,意思就是private static只有自己能使用这个jvm启动的时候就加载进来的方法或者变量。
不知道你理解了没。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-18
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来使用,不简洁,另外如果这样使用,其他类就要依赖当前类,当前类的这个变量不是稳定的,显然这个代价比其所带来的使用方便性要高得多。

本回答被提问者采纳
第2个回答  推荐于2017-10-12
java程序中只有变量用private定义的,此变量就只能在当前的类中使用。
java程序中只有变量用static定义的,此变量就能直接被虚拟机识别,可直接在main函数中调用。
第3个回答  2014-08-18
static不是共有,是指静态的, public是公有的,这些关键字的作用还是要记一下的,最好能自己写个简单的例子测试下,能加深印象
第4个回答  2014-08-18
static 不对,是指静态的
final 是常量的意思,就是不会改变
private 私有
public 公用
default 默认
product 受保护
相似回答