一. Java中变量的分类
Java中变量根据声明位置不同可以分为:局部变量和成员变量,成员变量如果使用static关键字修饰又称为静态成员变量,如果没有static修饰又称为实例成员变量。下面分别阐述一下他们三者之间联系和区别。
public class Variable {
//静态成员变量(静态变量)
static int x=10;
//实例成员变量(成员变量)
int y=20;
public static void main(String[] args) {
//局部变量
int num=30;
}
}
二 .局部变量、成员变量、静态变量三者的区别
变量声明位置内存位置生命周期初始化局部变量方法中或方法声明上(形参)栈随着方法的调用而创建,随着方法的消失而消失初始化必须赋值实例变量类中方法外堆随着对象的创建而创建,随着对象的消失而消失有默认初始化值静态变量类中方法外方法区的静态区随着类的加载而加载,随着类的消失而消失有默认初始化什么时候使用静态变量?
当一个类的所有对象的某个“属性值”不会随着对象的改变而变化时,为了节省堆内存,我们可以将该属性定义为类级别的属性,也就是声明为静态变量,上升为“整个族”的数据,这样的变量不需要创建对象直接使用“类名”即可访问。
成员变量表面区别使用场景调用方法内存位置实例变量无static修饰对于类中每个对象都是特有的属性只能通过对象名调用堆区静态变量被static修饰对于类中每个对象一致的属性可以使用类名调用,也可以使用对象名调用(不推荐)方法区的静态区举例:
public class ManTest {
public static void main(String[] args) {
Man man=new Man("小明");
//实例变量使用对象名调用
System.out.println("名字"+man.name);
//静态变量可使用类名调用(推荐)
System.out.println("性别"+Man.sex);
//静态变量也可以通过对象名调用(不推荐)
System.out.println("性别"+man.sex);
}
}
class Man{
//实例变量
String name;
//静态变量
static char sex='男';
Man(){}
Man(String name) {
this.name = name;
}
}
几点注意
就近原则
局部变量和成员变量名称一致时,在方法中使用,采用的是就近原则。作用域
同一个域中变量名不能重名,不同的域变量名可以相同,java遵循就近原则会自动访问离他最近的数据。
关于变量的有效范围,我们记住一句话:出了大括号就不认识了。