实例变量(全局变量)
1个回答
展开全部
实例变量声明在一个类中,但在方法、构造方法和语句块之外实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
当一个对象被实例化之后,每个实例变量的值就跟着确定。实例变量在对象创建的时候创建,在对象被销毁的时候销毁。如果调用某个对象的某个方法去改变实例变量多次,那么这个实例变量的值就是多次改变的结果。
小测试:
输出结果:
实例变量属于类对象的,也就是说,属于对象实例私有,在虚拟机的堆中分配。
实例变量是实例对象私有的,系统只存在一个实例对象,则在多线程环境下,如果值改变后,则其它对象均可见,故线程非安全;如果每个线程都在不同的实例对象中执行,则对象与对象间的修改互不影响,故线程安全。
从程序截图中,我们可以看到,当为单例模式时,会产生资源冲突,当非单例模式时,则不会产生线程冲突。
局部变量是定义在方法内部的变量。从程序截图中可以看出,局部变量在多线程下没有产生资源冲突的问题。因为每个线程执行时都会把局部变量放在各自的帧栈的内存空间中,线程间不共享,故不存在线程安全问题。
当一个对象被实例化之后,每个实例变量的值就跟着确定。实例变量在对象创建的时候创建,在对象被销毁的时候销毁。如果调用某个对象的某个方法去改变实例变量多次,那么这个实例变量的值就是多次改变的结果。
小测试:
输出结果:
实例变量属于类对象的,也就是说,属于对象实例私有,在虚拟机的堆中分配。
实例变量是实例对象私有的,系统只存在一个实例对象,则在多线程环境下,如果值改变后,则其它对象均可见,故线程非安全;如果每个线程都在不同的实例对象中执行,则对象与对象间的修改互不影响,故线程安全。
从程序截图中,我们可以看到,当为单例模式时,会产生资源冲突,当非单例模式时,则不会产生线程冲突。
局部变量是定义在方法内部的变量。从程序截图中可以看出,局部变量在多线程下没有产生资源冲突的问题。因为每个线程执行时都会把局部变量放在各自的帧栈的内存空间中,线程间不共享,故不存在线程安全问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询