为什么非静态方法不可以调用该类静态的方法或静态的变量?


为什么非静态方法不可以调用该类静态的方法或静态的变量?

慕沐2402639
浏览 5110回答 5
5回答

慕雪5558698

无语了,前三楼是没仔细读清题就瞎回答...

十三灬叔

这是因为jvm加载java文件顺序的问题。先加载静态变量,静态方法,静态代码块。然后才加载变量,非静态方法。所以在静态方法中如果调用非静态方法或者静态变量,非静态的变量和方法还没有被jvm加载,所以会报编译错误。

不斯文败类

首先要理解面向对象,搞清楚什么是“类”,什么是“对象”。静态变量又叫类变量,静态方法又叫类方法。为什么这么叫,因为他们是属于类的,而不是类的对象的。拿类变量来说:public class Test {     private int a =5;     public static int b = a;}在部署类的时候就已经生成类变量(此处的b)了,而实例变量(即非static修饰,此处的a)需要在当前类实例化(即生成对象,编程初期可以简单理解为new)的时候才会生成。也就是说,当你程序跑起来的时候,即使从运行到结束都没用过Test类,变量b都存在,而变量a需要等到new Test()的时候才会存在。已经存在的东西去访问未存在的东西,这显然是不合理的。所以不允许。再深层一点,还可以探索到类变量和实例变量在内存中存储的关系,当然这是如何理解static的问题,不是static能否访问非static的问题,就不说了。

慕田峪6141110

XTTWSORRNAKTMZPSPLQTNMMYILMSSWPZCRTWOYUXEEUYQRHLEUQDDEATTIPHDNWPMTXJQZMMLIIYTPYKCSCWCYVPKMCJGTPYBCDQMITUHOYBYLGJLFZFJAZAJTVZWPVIKDIHACLLLCMFZWGSUGRLTPAQNXIEGGNXJGWKKGYDHAVOBQYRQJFZWBXUXDDFENQGDZSPJMDJICMCFLYEEPVHKHQWXGNBCZPXQXRXDNNWZFYUULYBHHLXKYHRUERBOCUCZPFATMJQMWVMACMFLZCIAJDGKGMZWZXJMFFVJSSTZPIRXHDJSCPVLTTMMCMWQJJJRKANGCJPGCHQZZFYYRLLRASCSTZQJWJAQWTMIOOOXLOLKTOEXEDMTRUQZCFVTGWTJCFKUDKDJJMQEUNIVSZIVSSOUNQTEHJZGGOQJMSSLHNRUHNOCYLROEYIAGSCANTGSZZOATZFWFTCLOSIUXRUZCTZPXTSKGMQQWOVCOJJGJTXGUAAJSYEPBERDJZRHXXAUQGHTZZCMMJFWRIFRTKRVYIIIVYEHQXHKQFLJTOGJYHOLHRANSKXUASVYVJGFSSJJSCPZWTUWZMWGPTGVSHQBBEWCIPTQVBLIICJZNDMJVOVHKYOEJAUGVILZNTQTQNDMXUPFOSCPBHQSOLBIOTNEHOOVSWSPNLEATKQDNTAEUIGZMGQHEKFINADAAUIIYFIIBKSYDGGAFZZTWHETSTQANPBXCSFVPMZEOATGQQQVLIFZLOFSSKHAWQBDQDUBXQPWXFYKHRRBOEQGKWPQZWMJFROEKDUEOVZICSLDQDNKDOELYEATXGDWYKIYPBOZWJMWWTTVCDQTNIOYSBOUQHXKBZJATSLOVBFBQKCPMOCPBICWWZZ

慕妹5461943

AAAXUHTJAZTTDKNAXUCDNYSFKBHLPISOZZGJKAMJGBVNKWWGWITSWZCCGTLKJPCHBJZIFROLVHDQKDPQAREEYKAUIZZSZQYFVWCFGCWQTKRKRDAEKUDANBOZGQQNUDKFVELOEIERUYBLOVFFCVVRVGATGXEDNJJTQPSAGNAKWYPWPSWZZCTWQIYZMJNGAXMWQCMERARCTDAWNJPJMZFNDLLWQCIJRCCCWTQDSLRYCUEZWLSJZRHUXZSJTGWWEGMPTMQARYLTJCRLLEBAEIPSQCICVOLSCCWWUHWDEFJTDUDHHLKXRUOTGEAYUSWHVYJXEFQUTFVVMFSZZJWADFIVWAWDAPZZZEEKHKIPMNUALAGDKXPPZQJTRUUSVARLFDXDDAAALOZBOOLLUVVBIKAGCZQZQCFTAEELKBRAVYUBOZZNKHVDNJZKLSBRNYOZMILURCZPJQTGFSLSBCPJGVSIXXFBFMPDFJWAPLSSTDRLYTJTLERORUOYVRFQQGPVPMCSFMMTUAJHERXDAYLOEAASFZSMJTJGUUAQKNEJKBKRHXTJCNUXYSIFOSYURSXBUYIOGCSSLTWGQQQGMIXHAUNTQXEKLEERTPCIJGNQFTKNAXEVWWJNMDQMXKRRKLBDIIVJWQTTWDRUXDVSTHZVCDGQMSWARBANAHMWDPCNSMCYSWPTBVYRBEPDZXWKFBCWZTESSPVZWIPKXADRULRCRLQDQUKANEOHGJMKHBEOKBLSKJEXPWZVPJGSONUQTGFPAEBQXPWZZVFMVZGWNGTWWDANSMGFKTLHEAWUAUHSYRBAQTDDDQJJHDZPTQUHRBSBTOOVEOEDUNKQCBZPZNMSYZJZNTAMQQGJJHNXKUDIYFOHHULAIXXNKDZSPSSPQWQEHVBPVPFVVRHUAQGPJMMCEDAAIOUAUHRVQFNUEQAZZNDLEOHSBYKGKEUVLNQYSIBLBZMI

hello_world_mk

public class StaticTest { public static void main(String[] args) { } static void test(){ new StaticTest().test1(); } void test1(){ test(); } }不能直接调用

我不会你还让我

非静态方法可以调用该类的静态方法和静态变量;静态方法不能调用该类的非静态方法和非静态变量
打开App,查看更多内容
随时随地看视频慕课网APP