一、静态变量与实例变量
1、局部变量
定义:在成员方法中定义的变量称为局部变量;(方法中的形参也可以作为局部变量)
作用有效范围:局部变量在方法创建时生效,在方法结束时被销毁。
2、实例变量
定义:实例变量是类中方法外的变量,不过没有static修饰,也叫对象变量(new出来的)
作用有效范围:实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
默认值:实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
3、类变量(静态变量)
定义:类变量是类中方法外的变量,用static修饰,也叫静态变量
二、静态变量与实例变量的区别
1、 静态变量也叫类变量,变量前加static修饰符。可以使用类名调用和对象调用,所有对象的同一个类变量共享同一块内存空间。
2、实例变量也叫对象变量,没有static修饰符。只能通过对象调用, 所有对象的同一个实例变量共享不同的内存空间的。
3、静态变量是所有对象共有的,某一个对象将它的值改变,其他对象再去获取它的值,得到的是改变后的值;
4、实例变量则是每一个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。
5、静态成员变量所有的实例对象都共用一个静态变量,内存中只有同一处空间存放这个静态变量值的。因此,如果一个对象把静态变量值改了,另外一个对象再取静态变量值就是改过之后的值了。
6、在创建实例对象的时候,内存中会为每一个实例对象的每一个非静态成员变量开辟一段内存空间,用来存储这个对象所有的非静态成员变量值。即使两个不同的实例对象是属于同一个类,它们的同名非静态成员变量在内存中占用的空间是不同的。
三、静态方法和非静态方法的区别
1、在内存中的存储位置:
(1)静态方法和静态变量创建后始终使用同一块内存,是连续的。
(2)非静态方法会存在于内存的多个地方,是离散的。
2、生命周期
(1)静态方法与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。
(2)非静态方法又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。
3、效率
静态方法的使用效率比非静态方法的效率高。