类变量
在方法外,被static修饰
初始化后不可改变
有默认值
类变量只有一份,与对象个数无关
多用于被声明为常量(static final ),此时使用大写命名
JDK 8静态变量和常量池从方法区迁移到堆中
实例变量
声明在类中,方法或语句块外
可以被访问修饰符修饰
当对象被实例化后,每个实例变量就被确定
有默认值
随对象创建和销毁
实例变量存储在堆中
局部变量
方法内或语句块内
在方法被执行的时候创建,执行完毕后变量被销毁
访问修饰符不能修饰局部变量
没有默认值,必须初始化后,才能使用
在栈上分配
这篇博客详细总结了
Java中final、static、static final区别:
https://blog.csdn.net/qq1623267754/article/details/36190715
这篇博客详细总结了
JDK 8之前的各种变量之间的区别:
https://blog.csdn.net/woainike/article/details/6413984
博客有点老,JDK 8就没有方法区了,不过总结的很清晰,可参考