类体中包括成员变量和局部变量,而成员变量又可以细分为实例变量和类变量,在声明成员变量的时候,用static给予修饰的称作类变量,否则称作实例变量。(类变量也称为static变量,静态变量)
成员变量:在类体中定义的变量为成员变量,作用范围(scope)是整个类,只要在这个类中都可以访问到它。
类体里面定义的变量叫做成员变量;
如果在变量有static关键字修饰,就叫作静态变量或类变量;
如果该变量没有static关键字修饰,就叫作非静态变量或实例变量;
局部变量:在一个方法或方法中的代码块(code block)中定义的变量。局部变量是在方法或代码块被执行的时候被创建,在方法或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或赋值,否则出现编译错误。
方法内定义的变量、形参、代码块中定义的变量都叫做局部变量;
成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。
还有,在内存中的位置也不一样。成员变量在所在类被实例化后,存在堆内存中(静态变量存在于方法区中);局部变量在所在方法调用时,存在栈内存空间中。
public class Demo
{
String id; //实例变量
private String colorType; //实例变量
private int size; //实例变量
private static String depart; //类变量
final String design="yangzi"; //常量
}
代码中的实例变量、类变量、常量都属于成员变量,那么其区分的依据是什么?这与变量的修饰符有关系,也就是上面代码中的private、static、final等修饰符。
那什么是变量?变量就是内容可以改变的量,它与常量相对应。而这三大变量实际上是从变量的作用域来定义和划分的。
1、类变量,是归属类的变量,它是通过在定义类的属性的时,增加static修饰符,所以又称为静态变量。类变量不仅可以直接通过类名+点操作符+变量名来操作,也可以通过类的实例+点操作符+变量来操作,大多数情况下,采用前者操作方式,一来不能够有效地使用该变量,二来能够表示该变量就是类变量。
2、实例变量,是归属于类的实例的变量,又称为成员变量,没有经过static修饰。实例变量只能通过类名的实例+点操作符+变量来操作。
不管是类变量,还是实例变量,都可以设置Java的访问修饰符,若是需要公开操作,你可以在这些变量前面添加public访问权限;若是只限于所在类中操作,你可以在这些变量前面添加private访问权限。
3、局部变量就是在类中方法体里面所定义的变量,不管是方法的形参,还是方法体内所定义的变量都是局部变量。局部变量的作用域是以其所在方法体的头大括号开始到尾大括号结束。
4、所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
变量名首写字母使用小写,如果由多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。如果局部变量的名字和成员变量的名字相同,要想在该方法中使用成员变量,必须使用关键字this.
简单介绍一下JAVA实例变量和静态变量的区别:
1,实例变量所属于对象。所以也称为对象变量。 静态变量所属于类。所以也称为类变量。
2,实例变量存在于堆内存中。 静态变量存在于方法区中。
3,实例变量随着对象创建而存在。随着对象被回收而消失。 静态变量随着类的加载而存在。随着类的消失而消失。
4,实例变量只能被对象所调用 。 静态变量可以被对象调用,也可以被类名调用。
所以,实例变量可以称为对象的特有数据,静态变量称为对象的共享数据。
列表对比:
实例变量、局部变量、静态变量的区别
| 实例变量 | 局部变量 | 静态变量 |
定义位置 | 在类中,方法外 | 方法中,或者方法的形式参数 | 在类中,方法外 |
初始化值 | 有默认初始化值 | 无,先定义,赋值后才能使用 | 有默认初始化值 |
调用方式 | 对象调用 | — | 对象调用,类名调用 |
存储位置 | 堆中 | 栈中 | 方法区 |
生命周期 | 与对象共存亡 | 与方法共存亡 | 与类共存亡 |
别名 | 对象变量 | — | 类变量 |