Java之成员变量、全局变量、局部变量的区别

本文解析了不同类型的变量在内存中的存储位置,包括全局变量、成员变量及局部变量,并通过一个具体的示例说明如何解决变量赋值过程中出现的问题。

存储区域:
全局变量(全局静态变量)是放在方法区中。

成员变量如果没有实例化那么变量是放在栈中;实例化了对象放在堆中,栈中放的是指向堆中对象的引用地址。

局部变量放在栈中,new的对象放在堆中,8中基本数据类型变量放在栈中,变量所对应的值是放在栈帧中。

生命周期:
全局变量:当类加载的时候,就开始被创建,在类中只有一份; 会跟着类的消失而消失,生存时间叫长。

成员变量:在对象被创建时而存在,当对象被GC回收的同时,他也会消失,生存时间适中。

局部变量:当方法被调用时而存在,当方法调用结束而消失,生存时间短。

作用域:
全局变量:作用整个类中,直接被类调用。

成员变量:作用在整个类中(除静态方法不能使用,静态方法没有隐式的this),被对象调用。

局部变量:作用在一个局部区域,比如说在一个方法中,方法调用。

在开发中遇到的问题:
问题:比如说在一个类中定义一个成员变量,在这个类中添加一个for循环,给成员变量赋不同的值,再把值放在队列中。你会发现存在队列的值都是一样的。

解决:在for循环定义一个局部变量并实例化,在把值放进去,这样就会解决值都是一样的问题。

例子:

成员变量:

方法:

public void BfdAiEvent(Object sender, BfdAiEventArgs args){

		/**
		 * 'sectionLengthPerChan * channelCount * sectionsCount' tell driver how many samples 
		 *  driver allocate memory for raw data.
		 */
		rawDataBufferLength = configure.sectionLength * configure.channelCount;
		rawDataBufferLength = Math.min(rawDataBufferLength, args.Count);
		if (dataScaled == null || dataScaled.length < rawDataBufferLength) {
				dataScaled = new double[rawDataBufferLength];
				}
		ErrorCode errorCode = wfAiCtrl.GetData(rawDataBufferLength, dataScaled, 0, null, null, null, null);
		
		if(Global.BioFaild(errorCode)){
			ShowMessage("Sorry, there're some errors occred, ErrorCode: " + errorCode.toString());
			return;
		}
		graph.Chart(dataScaled, configure.channelCount, rawDataBufferLength / configure.channelCount, xInc);			
	}

这个方法是研华采集卡动态生成数据的方法,就是一个线程一直再跑。

public void Chart(double[] data, int PlotCount, int DataCountPerPlot, double xIncBySec) {
	System.out.println("=====threadName1===="+ Thread.currentThread().getName());
	if(taskQue.putTask(data) > 5){
		TaskExecute task = new TaskExecute(taskQue);
		task.start();
	}
	Chart(data, PlotCount, DataCountPerPlot, xIncBySec, false);
}
public  int putTask(double[] data) {
	try {
		double[] newData = Arrays.copyOf(data, data.length);
		if (taskQueue.offer(newData)) {
			System.out.println("插入任务单队列成功!");
			for (double[] data1 : taskQueue ) {
				System.out.println(Arrays.toString(data1));
			}
		}
	} catch (Exception e) {
		System.out.printf("任务列中插入任务数据异常,",e);
	}
	return taskQueue.size();
}

重要的一句代码:double[] newData = Arrays.copyOf(data, data.length);解决问题。

作者:小林Java
来源:CSDN
原文:https://blog.csdn.net/demo_gsl/article/details/81123918
版权声明:本文为博主原创文章,转载请附上博文链接!

半导体器件机械和气候试验方法(英文)——第1部分:总则;——第2部分:低气压;——第3部分:外部目检;——第4部分:强加速稳态湿热试验(HAST);——第5部分:稳态温湿度偏置寿命试验;——第6部分:高温贮存;——第7部分:内部水汽含量测试和其它残余气体分析;——第8部分:密封;——第9部分:标志面耐久性;——第10部分:机械冲击;——第11部分:快速温度变化 双液槽法;——第12部分:扫频振动;——第13部分:盐雾;——第14部分:引出端强度(引线牢固性);——第15部分:通孔安装器件的耐焊接热;——第16部分:粒子碰撞噪声检测(PINT);——第17部分:中子辐照;——第18部分:电离辐射(总剂量);——第19部分:芯片剪切强度;——第20部分:塑封表面安装器件耐潮湿和焊接热综合影响;——第20-1部分:对潮湿和焊接热综合影响敏感的表面安装器件的操作、包装、标志和运输;——第21部分:可焊性;——第22部分:键合强度;——第23部分:高温工作寿命;——第24部分:加速耐湿 无偏置强加速应力试验(HSAT);——第25部分:温度循环;——第26部分:静电放电(ESD)敏感度测试 人体模型(HBM);——第27部分:静电放电(ESD)敏感度测试 机器模型(MM);——第28部分:静电放电(ESD)敏感度试验 带电器件模型(CDM)器件级;——第29部分:闩锁试验;——第30部分:非密封表面安装器件在可靠性试验前的预处理;——第31部分:塑封器件的易燃性(内部引起的);——第32部分:塑封器件的易燃性(外部引起的);——第33部分:加速耐湿 无偏置高压蒸煮;——第34部分:功率循环;——第35部分:塑封电子元器件的声学扫描显微镜检查;——第36部分:恒定加速度;——第37部分:基于加速度计的板面液滴测试方法;——第38部分:带存储器的半导体器件软误差测试方法;——第39部分:半导体元件用有机材料中水分扩散率和水溶性的测量;——第40部分:基于应变仪的板面液滴试验方法;——第41部分:非易失性存储器的标准可靠性试验方法;——第42部分:温湿度贮存;——第43部分:集成电路可靠性认证计划指南;——第44部分:半导体器件的中子辐照单粒子效应(SEE)试验。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值