一、Java中没有全局变量的概念,变量分为类的成员变量、静态成员变量和方法中的局部变量
1、局部变量,基本类型的局部变量变量名和值都存放在虚拟机栈中,引用类型的局部变量变量名存放在栈中,而变量指向的对象存放在堆中。记也很好记,因为局部变量属于方法里面的,而方法都是在栈里面。
2、成员变量:不论基本类型还是引用类型,变量名和值都随着类的实例(对象)而创建,所以存放在堆中。记也很好记,成员变量一定要有类的实例对象,类的实例对象肯定是在堆里面。
3、类的静态变量,它比较特殊,是属于类的变量,在jdk7及之前的版本,随类存放在方法区中。在jdk8之后,由于虚拟机内存结构的变化,静态变量和常量池一起被迁移到了堆中。因为静态变量是随着类加载一起加载,因为类是在方法区加载的,所以1.7是存在方法区。
二、常量有三种类型:静态常量、成员常量和局部常量
其实也就是被Final修饰的变量,分为常量名,常量值
1、局部常量:
2、成员常量:常量存放在常量池中,而常量池在堆内存中(1.7方法区,1.8堆)
3、静态成员常量:存放在全局数据区内存中-堆中
三、基本类型、引用类型、包装类型
Java提供了两个类型系统,基本类型与引用类型 (包装类是一种引用类型,而基本数据类型是一种值类型),使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类。
Java中每一种基本类型都会对应一个唯一的包装类,基本类型与其包装类都可以通过包装类中的方法进行转换。每种基本类型及其包装类的对应关系如下,值得注意的是,所有的包装类都是final修饰的,也就是它们都是无法被继承和重写的。