使用static关键字过程中所遇到的问题

在进行队列实现基数排序的练习中发现之前对static关键字理解不清晰
下面为代码:

public class MyQueue {

	static int[] elements;

	public MyQueue() {
		elements = new int[0];
	}

	// 入队
	public void add(int value) {
		// 创建一个新的数组
		int[] newArray = new int[elements.length + 1];
		// 将元素复制过去
		for (int i = 0; i < elements.length; i++) {
			newArray[i] = elements[i];
		}
		newArray[elements.length] = value;
		elements = newArray;
	}

	// 出队
	public int poll() {
		if (elements.length == 0) {
			throw new RuntimeException("queue is empty");
		}
		int element = elements[0];
		// 创建一个新的数组
		int[] newArr = new int[elements.length - 1];
		for (int i = 0; i < newArr.length; i++) {
			newArr[i] = elements[i + 1];
		}
		elements = newArr;
		return element;
	}

	// 判断是否为空
	public boolean isEmpty() {
		return elements.length == 0;
	}

}
import java.util.Arrays;

public class RadixQueueSort {
	public static void main(String[] args) {
		int[] arr = new int[] { 12, 234, 5, 89, 55, 3, 348, 198, 5, 653, 22, 77, 832 };
		System.out.println(Arrays.toString(arr));
		radixQueueSort(arr);
		System.out.println(Arrays.toString(arr));
	}

	// 通过队列来实现
	public static void radixQueueSort(int[] arr) {
		// 取出数组中最大的数
		int max = Integer.MIN_VALUE;
		for (int num : arr) {
			if (num > max) {
				max = num;
			}
		}
		// 通过最大的数的位数来判断需要进行几次循环
		int maxn = (max + "").length();
		// 建立10个队列数组
		MyQueue[] myQueue = new MyQueue[10];
		// 初始化每个队列
		for (int t = 0; t < myQueue.length; t++) {
			myQueue[t] = new MyQueue();
		}
		for (int i = 0, n = 1; i < maxn; i++, n *= 10) {
			// 取出每个数的个、十、百、千位数...
			for (int j = 0; j < arr.length; j++) {
				// 计算余数
				int ys = arr[j] / n % 10;
				myQueue[ys].add(arr[j]);
			}

			// 将分好的数取出来放回去
			int index = 0;
			for (int k = 0; k < myQueue.length; k++) {
				while (!myQueue[k].isEmpty()) {
					arr[index] = myQueue[k].poll();
					// System.out.println(myQueue[k].poll());
					index++;
				}
			}
		}
	}
}

发现在MyQueue类中的int数组不小心加了static关键字static int[] elements;
导致RadixQueueSort类中的以下代码无效:

// 建立10个队列数组
MyQueue[] myQueue = new MyQueue[10];

从而导致排序算法失效,在此对static关键字进行总结:


  • static关键字修饰的静态方法表示当前类的唯一实例,也就是说在整个java项目中这个方法是唯一的。

如果static修饰了数组如:static int[] elements;

  • 不管这个类有多少个对象,这个数组都只有一个,即在整个内存中只有一份数据,可以改变,但有且只有一个,并且在main()程序开始之前就已经完成分配,并且可以访问,直到程序结束才释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值