成员变量:类中,方法外;
类变量(值存储在方法区中):有static修饰;随着类的加载而加载,随着类的消失而消失;被所有对象共享。
实例变量(值存储在堆内存中):没有static修饰;随着对象的创建而创建,随着对象消失而消失。
局部变量:方法体中,形参,代码块{}中。值存储在栈中。
就近原则:谁离得近先找谁,如下图红线所指;this.则如下图蓝线所指;作用域是{ }之间可访问变量的一段代码, i 的作用域到 } 结束。
案例:
public class Test3 {
static int s; //成员变量,类变量
int i; //成员变量,实例变量
int j; //成员变量,实例变量
{
int i = 1; //非静态代码块中的局部变量 i
i++;
j++;
s++;
}
public void test(int j){ //形参,局部变量,j
j++;
i++;
s++;
}
public static void main(String[] args) { //形参,局部变量,args
Test3 obj1 = new Test3(); //局部变量,obj1
Test3 obj2 = new Test3(); //局部变量,obj2
obj1.test(23);
obj1.test(10);
obj2.test(15);
System.out.println(obj1.i + "," + obj1.j + "," + obj1.s); //2,1,5
System.out.println(obj2.i + "," + obj2.j + "," + obj2.s); //1,1,5
}
}
分析: