问答详情
源自:8-9 Java 中的 static 使用之静态方法

静态与非静态调用问题。

看过这节课后,有些疑问,求会的小伙伴们帮忙解答一下。
问题如下:
    a.这节课中,看到了“静态成员”四个字字,而不是静态变量或者静态方法。
    疑问1:“成员”的意思是不是变量和方法的统称,还是单独只指代变量,不包含方法?
    b.本节课老师讲了“静态访问静态或非静态”,“普通访问静态或非静态”。
    疑问2:那么,“非静态访问静态或者非静态”呢??
    c.静态和非静态关键字就在static,用它来区分。
    疑问3:那么,除了访问方式不同,变量或者方法是否被static修饰,两者有什么本质上的意义吗?

提问者:观小呆 2019-04-10 15:52

个回答

  • tiger爱小狄
    2019-04-29 10:52:07

    这位同学很善于思考啊,我来回答一下

    1. 静态成员包含静态变量和方法,是所有用static修饰的东西的统称

    2. 非静态可以任意访问本类(注意是本类!)中的所有成员变量和所有方法

    3. 静态和非静态的本质就比较深了,涉及到java的内存处理和垃圾回收机制,你可以这样理解,静态和非静态所存储的位置是不同的,静态成员都存在静态池中,不可回收,只要程序运行起来就一直存在,非静态只有在用到是才创建,用完了就被回收了,所以程序中要尽量少用静态的东西,否则程序会越来越卡,因为静态占用了太多内存。

  • 飒灬露紫
    2019-04-10 17:16:03

    统称吧

    在同类中,静态方法可以直接调用静态成员但是不能调用非静态成员,如果想调用非静态成员,可以先创建类的对象,然后通过对象来访问非静态成员。普通方法可以调用静态和非静态的变量

    至于最后一个,个人感觉不同之处就是访问方式的不同吧

  • 微软0
    2019-04-10 16:33:29

    互相交流,希望不要嫌弃,回答全部来自老师的讲义。

    a. 1-4节中讲了成员变量和局部变量,此时的成员是指成员变量的意思,变量似乎有几哥叫法,其中还有一个叫属性

    在类中一般全部变量,称为成员变量,局部变量称为变量,在类的对象中,成员变量通常称为对象的属性

    b.  1.9 Java 中的 static 使用之静态方法

    “静态访问静态或非静态”指静态方法访问静态成员变量和非静态成员变量

    “普通访问静态或非静态”指普通成员方法访问静态成员变量和非静态成员变量

    “非静态访问静态或者非静态”指的就是普通成员方法访问静态成员变量和非静态成员变量

    老师讲过

    静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。

    在普通成员方法中,则可以直接访问同类的非静态变量和静态变量

    c. 那么,除了访问方式不同,变量或者方法是否被static修饰,两者有什么本质上的意义吗?

    Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。

    其实个人并不太理解static修饰符,下面这句话似乎好像可以加深下理解,其实还是用的少,写了项目了我们的理解会更深层的

    大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!