局部变量
何为局部变量?
局部变量就是方法里定义的变量。
局部变量仅作用在局部区域中,从定义开始到大括号或者return结束,生命周期短。
局部变量存储:基本数据类型变量放在栈中,引用数据类型放在堆中
局部变量可以先定义再初始化,也可以定义的同时初始化,局部变量没有默认初始值。
class test{ public static void main (String args[]) { int a; System.out.println(a); //错误: 可能尚未初始化变量a } }
成员变量
何为成员变量?
- 成员变量就是定义在类里方法外的变量,也叫全局变量。
- 成员变量又分为:实例变量和类变量。
类变量也叫静态变量,即在变量前加static 的变量;
实例变量也叫对象变量,即没加static 的变量;
区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;
而实例变量则为对象私有,某一个对象将其值改变,不影响其他对象;示例:
class Person { String name; static int age; public String toString() { return "Name:" + name + ", Age:" + age; } public static void main(String[] args) { Person p1 = new Person(); p1.name = "zhangsan"; p1.age = 10; Person p2 = new Person(); p2.name = "lisi"; p2.age = 12; System.out.println(p1); System.out.println(p2); } /* Name:zhangsan, Age:12 Name:lisi, Age:12 */ //若去掉age前的static,则输出结果为: /* Name:zhangsan, Age:10 Name:lisi, Age:12 */ }
- 成员变量的存储:没有实例化的成员变量放在栈中;实例化后的对象放在堆中,栈中放的是指向堆中对象的引用地址。
- 成员变量在对象被创建时而存在,当对象被GC回收时消失,生存周期适中。
- 成员变量作用在整个类中(静态方法除外),不能在定义的同时进行初始化,只能通过对象访问。示例:
class Person { String name; public static void main(String[] args) { Person p1 = new Person(); p1.name = "zhangsan"; System.out.println(p1); } }
注:如果局部变量和成员变量的名称相同,那么成员变量被隐藏,即方法内失效,方法中如需要访问该类中的成员变量,则需要加上关键字this。
全局变量
何为全局变量?
- 全局变量就是定义在类里方法外的变量。作用于整个文件中,直接被类调用。
- 全局变量可以先定义再初始化,也可以定义的同时初始化
- 全局变量的存储:(static修饰的全局变量)存放于静态区,类加载时创建,在类中只有一份; 会跟着类的消失而消失,生存时间较长。
- 全局变量分为两种:static修饰的全局变量,只在该源文件中可用
- extern修饰的全局变量,可以被其他类引用,作用于整个工程中。