成员变量:类中,方法外;
类变量(值存储在方法区中):有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
}
}
分析:

本文探讨了Java中的变量类型及其作用域。成员变量(包括类变量和实例变量)分别在方法区和堆内存中存储,类变量由类加载时创建,实例变量随对象创建。局部变量存在于方法体、形参和代码块中,存储在栈中。通过一个Test3类的案例,展示了不同变量如何在不同情境下使用和访问,强调了作用域和生命周期的概念。
2925

被折叠的 条评论
为什么被折叠?



