「java静态变量实例」java静态方法中的变量

博主:adminadmin 2022-11-27 19:38:08 83

本篇文章给大家谈谈java静态变量实例,以及java静态方法中的变量对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中静态变量和实例变量的生命周期有什么区别?

1.存储区域不同:静态变量存储在静态存储区,普通变量存储在堆中;\x0d\x0a2.静态变量与类相关,普通变量则与实例相关,说细一点:\x0d\x0aclass Demo {\x0d\x0apublic static String a;\x0d\x0apublic String b;\x0d\x0apublic static void main(String[] args) {\x0d\x0a Demo d = new Demo();\x0d\x0a d.a; // 警告,虽然可以通过编译,但没有意义\x0d\x0a d.b; // 正确\x0d\x0a Demo.a; // 对static变量的正确引用\x0d\x0a Demo.b; // 错误\x0d\x0a}\x0d\x0a3.内存分配方式不同。static字段对每个类来说都只有一份,无论你创建多少对象,该static区域都只有一份,它对于这些对象来说是共享的;而非static字段,因为其从属于对象,因此每有一个对象,就会为该变量申请一个存储空间;\x0d\x0a4.生命周期不同。从程序运行开始,static域就已经确定下来,因此在没有创建对象之前,就可以引用该区域变量及函数,而非static域的变量及函数,必须等实例化之后才可以通过对象来调用。\x0d\x0a5.理解了this之后,更能体会到static的含义。static方法就是没有this的方法,这也就是为什么在static方法中不能引用非static变量,因为该方法内没有隐含的this,编译器无从知道这个变量是属于哪一个类的。

java中静态变量和实例变量的区别

你可以这样理解:类变量相当于一个人的姓,是先于对象存在的;而实例变量是对象创建之后再存在的,相当于人的名字;

1、类变量也叫静态变量,也就是在变量前加了static 的变量;

2、实例变量也叫对象变量,即没加static 的变量;

3、区别在于:类变量和实例变量的区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;

Java中局部变量,静态变量和实例变量的区别

实例变量又称成员变量:

成员变量定义在类中,在整个类中都可以被访问

成员变量随着对象的建立而建立,随对象的消失而消失,存在于对象所在的对内存中

成员变量有默认初始值

局部变量:

定义在方法中或方法的参数列表(或者语句中)

存在于栈内存中,作用的范围结束,变量空间自动释放

默认没有初始化值,使用时需要进行初始化

静态变量又称类变量:用static修饰

存储在方法区中

随着类的加载而存在,随着类的消失而消失

可以由类名或对象调用

伪代码说明

public class Variable{     

    static int a = 0;        //类变量

    String b = "hello world";//实例变量

    public void method(){        

        int c = 0;           //局部变量

    }

}

JAVA中静态变量和实例变量的区别

Java类的成员变量有2种:一种是被static关键字修饰的变量,叫类变量或者静态变量;另一种没有static修饰,为实例变量。

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。

Java静态实例变量

问题出在这里:

static public Test getInstance(){

a=new Test();

return a;

}

每次调用getInstance()都会创建一个新的对象,并且给a赋值,所以a引用的对象每次都是不同的,加上一个判断,那么只有第一次的时候才会新建对象,后面两次都是直接返回原来的对象了

if (a == null) a=new Test();

return a;

补充:

楼主,有一个重要的概念你没有弄清楚,虽然a2,b2,c2都是使用a赋值的,但并不表示a变了它们会跟着变。

a2=a=new Test();

b2=a=new Test();

c2=a=new Test();

你理解的是最后给c2赋值的时候,因为a变了,而a2和b2是“等于”a的,所以它们也会跟着变为最后一个Test对象。

虽然看着好像符合数学上的等号传递性,但是楼主,其实不是这样的。这也是程序和数学的差别所在。

第一句a2=a=new Test()的结果是a2指向new Test(),而不是指向a。

所以第二句的a改变时,a2并没有变。同理,第三句a改变时,a2和b2也没有改变,它们分别指向三个不同的对象。

java静态变量实例的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java静态方法中的变量、java静态变量实例的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。