全局变量也叫成员变量,它是声明在类里,不在函数和静态语句块中声明的变量,全局变量又分为类变量(静态变量)、实例变量两种。

类变量:private static int i =1;存放在方法区中,随着类的消失而消失。
实例变量:private int i = 1; 若未被实例化,存放在栈中,实例化了存放在堆中。栈中放着指向堆中的引用地址。随着对象的消失而消失

类变量是可以直接被类调用的,通过类名.变量就可以调用,该类的对象也可以调用。因为有static的修饰,在类加载时就会初始化,当修改该类变量时,其他使用该变量的对象该变量的值也会修改,一处改而处处改。
而成员变量只能通过该类的对象调用,可以在不同的对象中设置不同的实例变量。

局部变量是指定义在方法中的变量。

public void method(){
	int i = 1;
}

该变量存放在栈中,没有默认初始化值,随着方法调用结束而消失。因为定义在方法中,所以不可以用public private protected修饰。

实例变量和类变量的区别
1、两个变量的生命周期不同
实例变量随着对象的创建而存在,随着对象的回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。
2、调用方式不同
实例变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3、数据存储位置不同
实例变量存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

在现代的面向对象语言如Java,C++,C#,Ruby中,由于变量都是封装在类里面的,对别的类不可见,所以已经几乎完全抛弃了全局变量的概念。然而,可以通过把一个类定义为public static,把类成员变量也定义为public static,使该变量在内存中占用固定、唯一的一块空间,来实现全局变量的功能。