必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-08-19 12:11:03来源:IT技术作者:seo实验室小编阅读:89次「手机版」
 

成员变量

存储区域:

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

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

局部变量放在栈中,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);解决问题。

相关阅读

IO和NIO的区别

主要内容 NIO 简介 Java NIO 是 java 1.4, 之后新出的一套 IO 接口 NIO 中的 N 可以理解为 Non-blocking,不单纯是 New。NIO 的特

AVC与H264 区别

AVC 实际上是 H.264 协议的别名。 但自从H.264协议中增加了SVC的部分之后,人们习惯将不包含SVC的H.264协议那一部分称为 AVC,而将S

三者有什么区别?

日前,高通在香港召开新品发布会,正式发布了骁龙653、骁龙626以及骁龙427三款全新的移动处理器,均为类似于骁龙821的&ldquo;小改升级

Qt 中static_cast 和 reinterpret_cast的区别

Qt 中static_cast 和 reinterpret_cast的区别 1. C++中的static_cast执行非多态的转换,用于代替C中通常的转换操作。因此,常做为隐

你真的明白用户体验设计师和用户界面设计师的区别么?

笔者曾经有一段在猎头公司实习的经历,当时为一家世界500强公司的亚太分部招用户体验方面的设计师,奈何笔者当时学疏才浅,对互联网的

分享到:

栏目导航

推荐阅读

热门阅读