一个关于JAVA静态问题?求解释,STATIC方法只能访问STATIC方法,非STATIC方法可以访问STATIC方法,

为什么STASIC方法不能访问非STASIC方法?既然不能访问,为什么MAIN方法属于STATIC方法可以访问任何方法和属性(也包括非STATIC方法和属性)求认真解释要详细哦 30分

你好,我觉得一句话就能说清楚,说的多了,反而让你理解的更加模糊。记住这点:
静态方法是属于类的,而普通方法是属于对象的。
属于类的静态方法可以在对象不存在的时候就能访问到,而普通方法必须先new一个对象才能用这个对象访问。当我们访问调用静态方法的时候(使用类名.静态方法名)这个时候就没有对象创建,所以普通方法是访问不到的。为了避免这种错误,所以java就不允许在静态方法中访问非静态方法。

还有纠正你的错误,main方法也满足我上面说的,你仔细看下,main方法中是不是先创建的对象,然后用对象去访问的呀。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-26
首先,main方法不能访问非静态方法和属性。
其次,你要明白这个静态的意思。有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
  声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共同拥有一个static变量。追问

你的意思就是实例成员并没有被MAIN直接访问,而是NEW一个对象之后该类所有的实例变量共同拥有一个static变量,MAIN通过这个拥有的static变量来访问这些非STATIC方法和属性,是吗?MAIN没有直接访问非STATIC方法而是间接访问的,这就是为什么所有的CLASS使用之前要NEW一下产生一个对象之后才能使用对吗?

追答

静态方法编译的时候,要求它所使用的每个变量都是一个实体,由于这时候那些非静态方法和属性还没开始编译,都不是实体,即还不存在,所以没法引用。你在静态方法里new一个对象后,这个对象就在这个静态方法里有一个实体了,就可以随意访问了。

第2个回答  2012-03-26
STATIC属于类方法,可以直接使用类.STATIC方法进行调用。但是非STATIC方法只在生成对象之后才会在内存中出现,也就是说有可能内存中存在STATIC方法但是不存在某个非STATIC方法,所以这是不能调用的。但是如果STATIC都存在了,那必然使用了此类,那么STATIC方法肯定已经有了,所以非STATIC方法能调STATIC方法。我自己这么理解的,希望对你有用。
第3个回答  2012-03-26
理解下啊 ,静态 变量 方法 属于内存里 堆,非静态属于 栈 ,就像两个区域一样,它们之间怎么联系呢,栈里面可以直接访问堆里的内容,因为堆里的东西是不变的(静态的), 然后栈里 怎么去访问堆里内容了,最简单的 通过new ,(还有其他途径啊)。 将来你学习中遇到问题很多都可以用这个去解释的。
第4个回答  2012-03-26
程序的执行是从main()方法开始的追问

程序的执行是从main()方法开始就能访问非STATIC方法吗?为什么STASIC方法不能访问非STASIC方法?

追答

不能直接访问,java是面向对象的,你得建立一个对象,然后通过对象调用非静态成员方法

相似回答