为了账号安全,请及时绑定邮箱和手机立即绑定
请问静态变量和成员变量之间有什么不同??

正在回答

9 回答

1.静态成员变量是属于整个类的全局变量,它不单属于某一个对象;普通成员变量是属于类中的对象,它不能被所有对象共享。

2.静态成员变量必须在全局进行定义,而由于普通成员变量在创建一个对象的时候可以对它进行初始化,因此就不需要单独对它进行定义,只要声明即可。

3.静态成员变量在没有对象之前就存在。

42 回复 有任何疑惑可以回复我~
#1

再去西藏 提问者

非常感谢!
2014-11-25 回复 有任何疑惑可以回复我~
#2

风中过客

同问, 同感谢!
2015-04-12 回复 有任何疑惑可以回复我~
#3

舞有涵意

请问能举个例子说明不能被所有对象共享吗?
2015-11-13 回复 有任何疑惑可以回复我~
#4

舞有涵意

请问能举个例子说明不能被所有对象共享吗?
2015-11-13 回复 有任何疑惑可以回复我~
#5

cicineer 回复 舞有涵意

你可以这样想,我们没有对类的成员变量赋初值,然后类的构造方法有两个,一个是无参数的,一个是有参数的(这个含有参数的构造方法给类的成员变量赋初值了),然后分别通过无参构造方法和有参构造方法创建两个对象出来,然后通过这两个对象调用同一个方法,你会发现成员变量的值不同了,这就表明成员变量没有被所有对象共享这个值了。但是静态变量就不一样了,我们不需要给静态变量赋初值,就可以直接调用,而且不管是有参还是无参构造方法出来的对象都可以共享这同一个静态变量,所以就成为类变量或者类成员。。个人理解。。
2016-01-14 回复 有任何疑惑可以回复我~
#6

Uestc_L 回复 舞有涵意

这个问题你清楚了吗
2016-01-22 回复 有任何疑惑可以回复我~
#7

Uestc_L 回复 舞有涵意

这个问题你清楚了吗
2016-01-22 回复 有任何疑惑可以回复我~
查看4条回复

通俗来讲,多个静态变量都分配在同一位置,一个改变其他都会改变;

而多个成员变量分别分配在不同位置,一个改变其他不受影响

2 回复 有任何疑惑可以回复我~

1.public class HelloWorld{

String var ="i love math";

public static void main(String[] args){

HelloWorld a =new HelloWorld();

HelloWorld b =new HelloWorld();

a.var ="我喜欢数学";

System.out.println(a.var);

System.out.println(b.var);

}

}

输出:

我喜欢数学

i love math

2.

public class HelloWorld{

static String var ="i love math";

public static void main(String[] args){

HelloWorld a =new HelloWorld();

HelloWorld b =new HelloWorld();

a.var ="我喜欢数学";

System.out.println(a.var);

System.out.println(b.var);

}

}

输出:

我喜欢数学

我喜欢数学


2 回复 有任何疑惑可以回复我~

我个人是这样理解的:
类是封装对象属性和行为的载体
属性:成员变量 行为:成员方法
成员变量又分为:1.普通成员变量 属于对象 用对象.普通成员变量名调用 2.静态成员变量 属于类 用类名.静态变量名来调用
成员方法:普通成员方法和静态成员方法 调用方法同上
个人理解,欢迎大神指点

1 回复 有任何疑惑可以回复我~

public class HelloWorld {

       static String className = "静态";//声明个静态变量

        String cheng="成员";//声明个成员变量

public static void main(String[] args) {

        HelloWorld n=new HelloWorld();//创建两个对象以便于比较

        HelloWorld v=new HelloWorld();

   //从下面这段代码可以看出只要一个对象把静态变量的值变了,那所有的对象的都跟着变,这就是所谓的全员共享

        System.out.println(n.className); //输出结果:静态

        System.out.println(v.className); //输出结果:静态

        n.className="静态2";

        System.out.println(n.className);//输出结果:静态2

        System.out.println(v.className);//输出结果:静态2

        //从下面这段代码可以看出对象n只能改变自己关于成员变量的值,改变不了别的对象关于成员变量的值

        System.out.println(n.cheng);//输出结果:成员

        System.out.println(v.cheng);//输出结果:成员

        n.cheng="成员2";

        System.out.println(n.cheng);//输出结果:成员2

        System.out.println(v.cheng);//输出结果:成员

  //原因是因为不同对象关于成员变量的值在内存中储存的位置不同

  //但静态的大家都是在同一个地方储存,所以一个变,其他的都跟着变了

}

}


51 回复 有任何疑惑可以回复我~
#1

若不极致便平庸

补充一下,通俗易懂的讲:就是类被调用之时静态变量就开始存在了,所以最后老师提示了这句话:"要注意哦:静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!~~并且在内存中占个位置"。但成员变量却不是,他在对象没调用它之前是虚无的,每一个对象对它的调用都会在内寸中占一个新的位置,A B C D四个对象调成员变量四次就在内存中占四个不同的位置,所以你改A的 B C D不会变,因为位置不同。但A B C D这四个对象调静态变量都是同一个位置,所以你改A的,B C D都跟着变。
2016-10-06 回复 有任何疑惑可以回复我~
#2

qq_八月的雨_0

如果声明类的时候没有对cheng赋值,然后创建对象n是时对其赋值为“成员”,那么v.cheng是什么?
2016-10-26 回复 有任何疑惑可以回复我~
#3

若不极致便平庸 回复 qq_八月的雨_0

声明类的时候如果没有赋值,系统会自动为其赋默认值,所以v.cheng的值就是默认值。n对象赋值的cheng不会影响到v对象的cheng值,所以v.cheng的值就是默认值。
2016-11-16 回复 有任何疑惑可以回复我~
#4

qq_兵冰宾缤_0

淋漓尽致
2017-04-12 回复 有任何疑惑可以回复我~
#5

牛爷爷3330985

兄弟真不错!
2022-04-12 回复 有任何疑惑可以回复我~
查看2条回复

对贡献做一下补充

比如一个没有加Static的成员变量,如果想用构造函数中的this去调用,是不行的,因为成员变量是针对每一个对象而言的,只有加了static这个成员变量才能被this所调用

1 回复 有任何疑惑可以回复我~
#1

顾呆呆

不明白
2015-11-03 回复 有任何疑惑可以回复我~
#2

疯狂的你我他

不明白,在类中定义的全局变量,在构造方法中也可以用this的吧
2015-11-03 回复 有任何疑惑可以回复我~
#3

舞有涵意

没有加static的成员的变量,在方法中使用this也是可以访问的,就算是不适用this,构造方法也是可以直接使用成员变量的呀
2015-11-13 回复 有任何疑惑可以回复我~

THX

0 回复 有任何疑惑可以回复我~

静态变量由类名直接调用

3 回复 有任何疑惑可以回复我~
#1

saly2

哈哈哈哈
2015-09-13 回复 有任何疑惑可以回复我~

补充一下

第二点这里是将静态变量可以看作全局变量看待,拥有全局变量的特性

第三点这里是说静态变量在类加载的时候就已经存在了

1 回复 有任何疑惑可以回复我~
#1

奋斗的蚁族

我想问一下 哪些情况下 类的对象不能使用成员变量?
2015-10-28 回复 有任何疑惑可以回复我~
#2

吾怯二日 回复 奋斗的蚁族

我也想问这个
2016-02-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信