类成员变量和实例成员变量分别指什么有什么区别(举例说明)?
例如定义一个类:
class Text
{public static int number;
public int temp;}
如果你想访问temp属性,你就必须先创建一个Text的对象,才能访问:Text b = new Text();
b.temp;这就是实例成员变量。
而你想 访问number的话,不用创建Text的实例就可以访问,就像这样:Text.number.这就是类成员变量。
主要区别就是访问是需不需要创建对象,而对于类成员变量,所有对象是共享一个变量的。
扩展资料:
数据成员可以分静态变量、非静态变量两种.
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员 函数不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员函数可以直接访问类中静态的成员.
非静态成员:所有没有加Static的成员都是非静态成员,当类被 实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在 内存中..
一个类中也可以包含静态成员和非静态成员,类中也包括静态 构造函数和非静态构造函数..
分两个方面来总结,第一方面主要是相对于 面向过程而言,即在这方面不涉及到类,第二方面相对于 面向对象而言,主要说明 static在类中的作用。
参考资料:百度百科-成员变量
成员变量就是类里面的变量,不区分static
没有static的成员变量叫实例变量
加了static就叫类变量,实际上和类没啥关系,就相当于一个寄生物一样,而且除了类变量外,你喜欢叫全局变量(public 修饰)、静态变量都行
最后他俩统称类的成员变量
完善一下回答,举个栗子吧
class Test{
public static String CLASS_VAR = "test";//类变量、静态变量、全局变量
private String instance_var;//实例变量
//省略instance_var get;set;方法
}
实际使用时,实例变量是存在于类的实例中的,实例就是通过类来创建的具体某个对象,这个对象会维护自身所有的实例变量,所以相同类的不同实例间去set同名实例变量是互不影响的。
也就是要访问instance_var,需要先new一个Test对象test,再通过test.getInstanceVar()或test.instance_var来访问实例变量。
而类变量则直接通过实际的类来进行访问,也就是要访问CLASS_VAR,直接使用TEST.CLASS_VAR即可,该变量存在静态区的某个固定位置(如果是静态对象,则对象存在堆区,静态区存的是指向该对象的地址),假设在多线程下同时访问该变量,获取的永远是同一份数据,比如一个静态的对象,多线程下获取到的永远都是指向同一个对象。
类变量的使用也就引申出了多线程下类变量的安全性问题,比如一个线程获取到该变量后,另一个线程修改了它,那么原来的线程拿到的是旧值,以此为基础所做的操作就很大概率会出现不正确的结果,也就引申出锁和同步,也就是说一个线程在操作这个公共资源时,会将该变量锁住,禁止其他线程拿到修改该变量的权限,当然拿修改权限这部分是需要我们手动去写的,代码是不会乖乖地自己识别哪个公共资源被锁的。
可能有没讲明白的地方,或是错漏,请大家指正,多谢
class Text
{
public static int number;
public int temp;
}
如果你想访问temp属性,你就必须先创建一个Text的对象,才能访问:Text b = new Text();
b.temp;这就是实例成员变量。
而你想 访问number的话,不用创建Text的实例就可以访问,就像这样:Text.number.这就是类成员变量。
主要区别就是访问是需不需要创建对象,而对于类成员变量,所有对象是共享一个变量的。
跟static修饰有关?
对的。。。
2011-10-20
类成员变量:静态成员变量. 对于这个类的任何实例都是一样的值,不属于某个实例,所以叫类的成员变量
求给个程序例子说明
=====