黑马程序员技术交流社区
标题:
静态变量和实例变量的区别?
[打印本页]
作者:
官珺伟
时间:
2014-4-20 19:45
标题:
静态变量和实例变量的区别?
本帖最后由 官珺伟 于 2014-4-20 22:00 编辑
public class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()
{
staticVar++;
instanceVar++;
System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);
}
复制代码
这段代码在主函数上要怎样才能运行,看到打印结果
作者:
程序爱好者
时间:
2014-4-20 19:55
(0)
摘要:
在语法定义上的区别:静态变量前要加
static
关键字,而实例变量前则不加。
在语法定义上的区别:静态变量前要加
static
关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的
实例变量才会被分配空间,
才能使用这个实例变量。
静态变量不属于某个实例对象,
而是属
于类,
所以也称为类变量,只要程序加载了类的字节码,
不用创建任何实例对象,
静态变量
就会被分配空间,
静态变量就可以被使用了。
总之,
实例变量必须创建对象后才可以通过这
个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个
staticVar
变
量,并且每创建一个实例对象,这个
staticVar
就会加
1
;但是,每创建一个实例对象,就
会分配一个
instanceVar
,即可能分配多个
instanceVar
,并且每个
instanceVar
的值都只自
加了
1
次。
public
class
VariantTest
{
public
static
int
staticVar
=
0;
public
int
instanceVar
=
0;
public
VariantTest()
{
staticVar++;
instanceVar++;
作者:
忘川
时间:
2014-4-20 19:58
本帖最后由 忘川 于 2014-4-20 19:59 编辑
public class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()//你已经在构造函数里打印了你定义的这两个变量,所以new 一个对象时执行到这里,控制台自然就会看到输出
{
staticVar++;
instanceVar++;
System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);
}
}
class Demo
{
public static void main(String[] args)
{
VariantTest test=new VariantTest( );//new 一个对象,调用构造函数进行初始化操作
}
}
复制代码
作者:
程序爱好者
时间:
2014-4-20 20:00
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
作者:
菠萝包丶
时间:
2014-4-20 20:22
本帖最后由 菠萝包丶 于 2014-4-20 20:59 编辑
实例变量和类变量(静态变量)的区别:
1.存放位置:类变量(静态变量)随类加载存在于方法区中,实例变量随对象建立存在于堆内存中
2生命周期:类变量(静态变量)随类的加载而加载,随类的消失而消失,生命周期最长。
由于静态先存在,对象后存在。所以生命周期最长
class demo
{
public static int staticVar=0; //静态变量
public int instanceVar =0;
public void VariantTest() //别忘了,函数返回值类型为void
{
staticVar++;
instanceVar++;
System.out.println("staticVar="+staticVar+",instanceVar="+instanceVar);
}
}
class ceshi
{
public static void main(String[] args)
{
demo ce =new demo(); //初始化对象
ce.VariantTest(); //通过对象调用类中的函数
}
}
复制代码
这样就可以运行了。
楼主要注意函数前面写上返回值类型,你前面的有些格式错误。
只要在主函数中建立对象,并调用函数,就可以实现了
只要调用一次函数就会实现两个数各+1一次
QQ图片20140420204715.jpg
(10.67 KB, 下载次数: 43)
下载附件
2014-4-20 20:47 上传
作者:
\(^o^)/
时间:
2014-4-20 20:25
class AA
{
public static void main(String[] args)
{
new VariantTest();
}
}
class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()
{
staticVar++;
instanceVar++;
System.out.println("staticVar=" + staticVar + ",instanceVar=" + instanceVar);
}
}
复制代码
作者:
官珺伟
时间:
2014-4-20 20:35
package InterviewQA;
public class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()//你已经在构造函数里打印了你定义的这两个变量,所以new 一个对象时执行到这里,控制台自然就会看到输出
{
staticVar++;
instanceVar++;
System.out.println("staticVar=" + staticVar +",instanceVar=" + instanceVar);
}
}
class Demo
{
public static void main(String[] args)
{
VariantTest test=new VariantTest( );//new 一个对象,调用构造函数进行初始化操作
}
}
复制代码
作者:
skill20
时间:
2014-4-20 20:36
public class VariantTest
{
public static int staticVar = 0; //静态成员变量随类的加载存在;可以VariantTest.staicVar访问
public int instanceVar = 0; //成员变量存在对象中,要先有对象才能访问。
public VariantTest()//对对象的初始化。
{
staticVar++;
instanceVar++;
System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instanceVar);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2