「java静态变量实例」java静态方法中的变量
本篇文章给大家谈谈java静态变量实例,以及java静态方法中的变量对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中静态变量和实例变量的生命周期有什么区别?
- 2、java中静态变量和实例变量的区别
- 3、Java中局部变量,静态变量和实例变量的区别
- 4、JAVA中静态变量和实例变量的区别
- 5、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静态变量实例的信息别忘了在本站进行查找喔。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。