加载顺序,static属性肯定先于非static加载,因此static方法不可以加载非static变量
static代表的是成员变量,有一个类下面有个属性是ArrayList类型,是static的,比如说我new了两个实例,对这个ArrayList 属性进行操作,实际上它们两个是对同一个ArrayList进行的操作。
把static去掉,你会发现,两个实例用了两个不同的ArrayList
附代码:
package test;
public class Stack {
//栈指针
private static int i = -1;
//内部数组
private static Object[]oarr =new Object[4];
//入栈
public void push(Object e) {
i++;
//检查栈是否已满,如果满了,扩容2size-1
oarr = checkStatckFull();
oarr[i] = e;
}
//出栈
public Object pop(){
if(i<0){
return "栈为空";
}
oarr[i] =null;
i--;
return i;
}
public Object[] checkStatckFull(){
if(i ==oarr.length){
Object[] oldarr =oarr;
Object[] newarr =new Object[2*oldarr.length-1];
System.arraycopy(oldarr,0,newarr,0,i);
return newarr;
}
return oarr;
}
//查看栈内元素
public void printStack(){
for(int j =0 ; j<=i ; j++){
System.out.println(oarr[j]);
}
System.out.println("数组长度:"+oarr.length);
}
public static void main(String[] args){
Stack stack1 =new Stack();
Stack stack2 =new Stack();
stack1.push("wu");
stack1.push("jie");
stack2.push("zhang");
stack2.push("san");
//stack.push("wang");
//stack.push("wu");
stack1.printStack();
System.out.println("----------------------");
stack2.printStack();
System.out.println("----------------------");
stack1.pop();
stack1.printStack();
System.out.println("----------------------");
stack2.printStack();
}
}