java中静态成员变量的使用

1 篇文章 0 订阅

static首先是全局共享的一个资源的引用,或者是一个常量的引用 . . .

这里提出一个这种机制下可能造成的影响:近日在做一个C#的小项目时有这样一个需求,点击A窗口按钮弹出B窗口,B窗口的按钮点击后释放掉AB窗口,如图

在这里插入图片描述

点击此按钮后

在这里插入图片描述

此时我点击新窗口中的销毁按钮,窗口正常关闭,反复也都正常,但是当我点击初始化按钮多次,而在新窗口出现后不立即关闭,这样就会出现多个新窗口。

这时候问题就出现了:

在这里插入图片描述

无论点击那个窗口的销毁按钮都只能关闭最新的窗口,其他的只能够通过右上角X号关闭,这样分析一波代码如下:

	//新窗口初始化方法
 	public static Form2 ff;
 	//初始化按钮点击事件
        private void button1_Click(object sender, EventArgs e)
        {
            ff = new Form2();
            ff.Show();
        }
	//新窗口按钮销毁事件
  	private void button1_Click(object sender, EventArgs e)
        {
            Form1.ff.Close();
        }

当点击一次按钮时创建一个Form2的对象窗体,并显示出来,点击关闭后正常关闭,但是当点击多次初始化按钮,由于static关键字的特性,全局共享这一个引用,这个时候初始化创建了一个新对象,但是也将这个static修饰的ff指向了新对象,那么就造成老对象变成了无引用状态,内存中做的事情如下:

在这里插入图片描述

即由于static的特性,ff始终只有一个,但是new出来的对象却有多个,就会造成老对象栈中无引用,造成无法调用的结果

针对上述需求,解决方案如下

	//每次使用到Form2窗口时都new出来一个新的窗口
 	private void button1_Click(object sender, EventArgs e)
        {
            Form2 ff = new Form2();
            ff.Show();
        }
	//新窗口销毁按钮点击事件
 	private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

解释下,这里就是将原来静态成员变量ff改为局部变量,这样每次方法体内的ff就会随着每次调用init方法从新申请的栈中从新创建一个ff的引用,即ff不再唯一,而销毁按钮可以利用this调用是因为button是处在Form2容器中的,即在form2中this即代表窗体,this.close()即表示button所在窗体资源的释放,内存中所做的事情如下:

在这里插入图片描述
jiang

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值