public class Exam5 {
static int s; //成员变量,类变量
int i; //成员变量
int j; //成员变量
//<init>
{
int i = 1; //非静态代码块中的局部变量i
i++;
j++;
s++;
}
public void test(int j){ //形参,局部变量 j
j++;
i++;
s++;
}
public static void main(String[] args) { //形参,局部变量,args
Exam5 obj1 = new Exam5(); //局部变量obj1,对应堆里面会分配一块内存new Exam5()
Exam5 obj2 = new Exam5(); //局部变量obj2
obj1.test(10);
obj1.test(20);
obj2.test(30);
System.out.println(obj1.i + "," + obj1.j + "," + obj1.s);//成员变量i,j,共享变量s
System.out.println(obj2.i + "," + obj2.j + "," + obj2.s);
}
}
运行结果:
2,1,5
1,1,5
在做这道题之前需要知道,栈,堆,方法区中存放的都是什么类型的数据? 就近原则? 实例初始化?作用域?
- 方法区(共享空间):静态变量+常量+类信息+运行时常量池
- 堆内存:成员变量
- 栈:局部变量
- 实例初始化时加载非静态代码块
- 局部变量作用域:从声明处开始,到所属的}结束