实例变量和类变量的区别,实例成员和类成员的区别
实例变量和类变量的区别,实例成员和类成员的区别详细介绍
本文目录一览: 类变量和实例变量的区别是什么?
类变量和实例变量的区别:
1、实例变量在类中声明,但在方法,构造函数或任何块之外。类变量(也称为静态变量)在
类中使用static关键字声明,但在方法,构造函数或块之外。
2、使用关键字“new”创建对象时会创建实例变量,并在销毁对象时销毁。程序启动时会创
建静态变量,程序停止时会生成静态变量。
3、可以通过调用类中的变量名来直接访问实例变量。但是,在静态方法中(当实例变量具有
可访问性时),应使用完全限定名称调用它们。可以通过使用类名ClassName.VariableName
调用来访问静态变量。
4、实例变量包含必须由多个方法,构造函数或块引用的值,或者必须在整个类中存在的对象
状态的基本部分。每个类只有一个每个类变量的副本,无论从中创建多少个对象。
实例演示代码:
public class VariableExample{int myVariable;static int data = 30;public static void main(String args[]){VariableExample obj = new VariableExample();System.out.println("Value of instance variable: "+obj.myVariable);System.out.println("Value of static variable: "+VariableExample.data);}}
运行结果:
Value of instance variable: 0Value of static variable: 30
实例变量与类变量的区别
两变量的区别:
类变量也叫静态变量,也就是在变量前加了static 的变量; 实例变量也叫对象变量,即没加static 的变量;类变量是所有对象共有的,其中一个对象的值改变,其它对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;
1、实例变量:
定义在类中但在任何方法之外,实例变量的作用域在本类中完全有效,当被其他的类调用的时候也可能有效;
2、类变量:
在java中,类的实例变量和静态变量称为类属变量或数据域。
类变量和实例变量的区别是什么?
类变量也叫静态变量,也就是在变量前加了static 的变量;
实例变量也叫对象变量,即没加static 的变量;区别在于:类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;例:public class A{
static int a = 0; //类变量
private int b = 0; //实力变量}public class B{
public void main (String[] args){
A a1 = new A();
A a2 = new A();
a1.a = 3; // 等同于 A.a = 3;a1.b = 4 ;System.out.println(a2.a); //结果为3
//类变量是针对所有对象的,所以a1改变a,a2的a也改变
System.out.println(a2.b); //结果为0
//实例只改变自身的,所以a1对象的b改变,不影响对象a2的b变量}}类变量又叫静态成员变量,它不需要创建对象就可以已经在内存中存在了。
类就像一份说明书,说明这种类的实例对象的规格。而在创建实例对象的时候,内存中会为每一个实例对象的每一个非静态成员变量开辟一段内存空间,用来存储这个对象所有的非静态成员变量值。即使两个不同的实例对象是属于同一个class类,但是它们的同名非静态成员变量在内存中占用的空间是不同的。
而静态成员变量也就是类变量不同。所有的实例对象都共用一个类变量,内存中只有一处空间是放这个类变量值的。因此,如果一个对象把类变量值改了,另外一个对象再取类变量值就是改过之后的了。
类成员变量和实例成员变量分别指什么有什么区别(举例说明)?
成员变量就是类里面的变量,不区分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修饰的为静态成员变量,没有static的为实例变量
例如定义一个类:
class Text
{public static int number;
public int temp;}
如果你想访问temp属性,你就必须先创建一个Text的对象,才能访问:Text b = new Text();
b.temp;这就是实例成员变量。
而你想 访问number的话,不用创建Text的实例就可以访问,就像这样:Text.number.这就是类成员变量。
主要区别就是访问是需不需要创建对象,而对于类成员变量,所有对象是共享一个变量的。
扩展资料:
数据成员可以分静态变量、非静态变量两种.
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员 函数不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员函数可以直接访问类中静态的成员.
非静态成员:所有没有加Static的成员都是非静态成员,当类被 实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在 内存中..
一个类中也可以包含静态成员和非静态成员,类中也包括静态 构造函数和非静态构造函数..
分两个方面来总结,第一方面主要是相对于 面向过程而言,即在这方面不涉及到类,第二方面相对于 面向对象而言,主要说明 static在类中的作用。
参考资料:百度百科-成员变量
Python里类变量和实例变量的区别
其实,从名字就能看出来,Python的类变量和实例变量的区别:
类变量:
是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的)。例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例。
实例变量:
实例化之后,每个实例单独拥有的变量。
[python] view plain copy
class Test(object):
num_of_instance = 0
def __init__(self, name):
self.name = name
Test.num_of_instance += 1
if __name__ == '__main__':
print Test.num_of_instance
t1 = Test('jack')
print Test.num_of_instance
t2 = Test('lucy')
print t1.name , t1.num_of_instance
print t2.name , t2.num_of_instance
java中类变量、实例变量和局部变量有何区别?
类变量:\x0d\x0a比较特殊的实例变量,用static修饰的,一个类共用这个变量,所有由这类生成的对象都共用这个变量,类装载时就分配存储空间。一个对象修改了变量,则所以对象中这个变量的值都会发生改变。\x0d\x0a \x0d\x0a实例变量:\x0d\x0a从属于类,由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,能通过对象的引用来访问实例变量。\x0d\x0a \x0d\x0a局部变量:\x0d\x0a方法中或者某局部块中声明定义的变量或方法的参数被称为局部变量
实例成员和类成员的区别
实例成员是实例独有的成员变量只在此对象内有用 类成员是类的静态变量static 这种变量是在任意一个该类的对象里都是相同的 你在某处改变这一静态变量 其他引用的地方也就改变了 可以想成一个全局变量
1.实例成员
实例成员包括实例成员变量和实例成员方法,实例成员变量(对象的字段)和方法(对象的方法)是隶属于对象的,实例变量的值代表了该对象的状态,实例成员方法代表了该对象的行为。只有创建了对象之后才能访问实例成员变量和实例成员方法,通过"对象名.变量名(方法名)"的方法可以访问实例成员
2.类成员
类成员(静态成员)需要用关键字static标识,类成员包括,类成员变量和类成员方法,类成员是隶属于类的,意思是说通过类名可以直接访问类成员变量或调用类成员方法,即使没有创建对象,也能够引用类成员
——来自于网络
实例成员变量:非静态成员变量 类成员变量:静态成员变量. 对于这个类的任何实例都是一样的值,不属于某个实例,所以叫类的成员变量
就是不同的编程语言下,描述高度相似/相同的一个东西的时候,用的不同名词罢了。
C++喜欢data member(数据成员),Java喜欢member variable(成员变量),C# 用上了field(字段)。
反正你就理解为,说的是同一个东西,不过在不同语言的环境下,用的不同名词罢了。
静态成员,包括静态数据成员和静态成员函数,然后数据成员当然!=成员函数了,互相无关
静态方法属于类,成员方法属于由这个类生成的对象实例的。
静态方法与成员方法或者说静态与成员的区别在于:静态是共享,成员是私有。
当你觉得这个方法或变量是需要共享的就用静态。反之成员。
类:是抽象的概念集合,表示的是一个共性的产物;类之中定义的是属性和行为(方法);
对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不用对象。
那么可以依靠一句话来总结出类和对象的区别:类是对象的模板,对象是类的实例,类只有通过对象才可以使用,而在开发之中应该先产生类,之后在产生对象。
类不能直接使用,对象可以直接使用
那么类定义完成之后,肯定无法直接使用,如果要使用,必须依靠对象,
那么由于类属于引用数据类型,所以对象的产生格式如下。
格式一:声明并实例化对象
类名称 对象名称 = new 类名称() ;
格式二:分布完成
声明对象: 类名称 对象名称 = null ;
实例化对象:对象名称 = new 类名称() ;
1.实例成员
实例成员包括实例成员变量和实例成员方法,实例成员变量(对象的字段)和方法(对象的方法)是隶属于对象的,实例变量的值代表了该对象的状态,实例成员方法代表了该对象的行为。只有创建了对象之后才能访问实例成员变量和实例成员方法,通过"对象名.变量名(方法名)"的方法可以访问实例成员
2.类成员
类成员(静态成员)需要用关键字static标识,类成员包括,类成员变量和类成员方法,类成员是隶属于类的,意思是说通过类名可以直接访问类成员变量或调用类成员方法,即使没有创建对象,也能够引用类成员
二、类变量和实例变量的区别:
1、声明的差别:没有使用static声明的为实例成员属性,用static 声明的为类成员属性。
2、存储结构的差别:对于实例变量而言,每个对象的每个实例成员变量都分配了一个存储单元使得不同对象的实例成员变量具有不同的值;而对于类成员变量只分配一个存储单元,使得所有的对象共同使用一个类成员变量。
3、引用方式的差别: 实例成员变量对于对象,通过对象进行访问;类成员变量属于类,既可以通过对象,也可以通过类访问。
java中类变量和实例变量的实质区别?
类变量(即静态变量)是全局变量,所有的实例共享的变量。如果你在一个实例中改变了其值,那么所有的实例的这个变量的都会改变
每次创建一个类的对象的时候,系统为它创建了类的每一个实例变量的副本。我们就可以从对象中访问该实例变量。
类变量或说静态变量跟实例变量是不一样的,不管为一个类创建了多少个对象,系统只为每个类变量分配一次存储空间。系统为类变量分配的内存是在执行main方法时马克-to-win, 就是在程序最最开始的时候(见下面StaticDemo的例子)。所有的对象共享了类变量。可以通过对象或者通过类本身来访问类变量。
Static fields
A field define as static, means there is only one such field shared by all objects
Instance fields
A field define without static, means each object has its own copy of fields
顺便提一句:通常用下面的形式,定义类的常量。(类或实例都可以访问)
static final double PI=3.14159;
静态方法(方法前冠以static)和实例方法(前面未冠以static)的区别
调用静态方法或说类方法时,可以使用类名做前缀,也可以使用某一个具体的对象名;通常使用类名。
非static的方法是属于某个对象的方法,而static的方法是属于整个类的,不被任何一个对象单独拥有;
由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,也即,static方法只能处理static域或静态方法。实例方法可以访问实例域, 静态域或静态方法, 记住都行。
声明为static的方法有以下几条限制: 1.它们仅能调用其他的static方法。
2.它们只能访问static数据。
3.它们不能以任何方式引用this或super(关键 字super与继承有关,在下一章中描述)。
static method Have No this Reference
All instance methods have a hidden parameter—this
So,
Static
method can’t access instance methods and fields; it can only invoke
other static class members.It can access class members only.
instance can use static method.
Instance methods:
If a method is declared without the static modifier keyword,
that method is known as an instance method. Instance methods
are associated with objects – not classes.
It can access either instance or class members.
class StaticExa {
static int a = 4;
static int b = 9;
static void call() {
System.out.println("a = " + a);//静态方法可以访问静态属性
}
}
public class Test {
static int c = 43;
public static void main(String args[]) {
/*刚运行到这一步时,debug观察,StaticExa.a的值就等于42,Test.c的值就等于43,
说明系统在我们的程序一开始时,就会给所有的类变量赋值。如果是对象参考, 就是null,
见photoshop的例子*/
System.out.println("开始观察StaticExa.a和Test.c");
。。。。。。。。。。。。。。。。详情网上找“马克-to-win”,参考他的网站或他的百度空间:java第2章的内容
类变量,成员变量,全局变量,局部变量,实例变量的区分?
一个类的类体
一部分是变量的定义;
一部分是方法的定义(一个类中可以有多个方法)
方法内定义的变量叫局部变量,因为只能在方法内部使用,固不可以用private,public,protect来修饰。
成员变量(也叫全局变量):它分为实例变量(类的对象.变量或类的对象.方法)和类变量(static
静态变量)
class
A{
int
a
;//实例变量
必须是......
答案就在这里:局部变量,全局变量,成员变量,实例变量,类变量的区别
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。