成员变量和局部变量的定义
局部变量:如果一个变量的定义的位置是在方法的内部,此时该变量被称为局部变量。
局部变量在使用的前必须要赋值。
成员变量:如果一个变量定义的位置在方法的外部,在类的内部,此时该变量被称为成员变量。成员变量不是必须要赋值,成员变量是有默认值的,具体的值是根据数据类型来定。
静态变量:Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。静态变量是成员变量的一种。
各种变量的示例 帮助理解
public class MemberLocal{
static String name; //静态变量 由 static修饰 又称全局变量 可以被静态方法使用
int num=10;//成员变量 又称实例变量 一般使用在其他需要的方法中 使用时需要new一下
public static void A() {
int num=20; //局部变量 在这个方法内使用
System.out.println("我是静态变量name 我的值是初始值"+name);
System.out.println("我是局部变量num 我需要赋值后使用 我的值是"+num);
name = "被A修改过的name";
}
public static void B(int param) { //方法的参数就是局部变量
//参数在方法调用的时候必然是会被赋值的
System.out.println("我是局部变量parame 我需要赋值后使用 我的值是"+param);
System.out.println("我是静态变量name 我的值是"+name);
}
public static void main(String[] args){
int numB = 100;
A();
B(numB);
}
}
多个类中的调用
//类Test1
public class Test1 {
int a=10; //成员变量 示例变量
public static void main(String[] args) {
Test1 test1 = new Test1();
int a = test1.a; //局部变量a
System.out.println(a);
test1.sys();
}
public void sys() {//示例方法
System.out.println(a);
}
}
//类Test2
public class Test2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Test1 test1=new Test1();
int a=test1.a;
System.out.println(a);
}
}
变量类型区别表
变量类型 | 定义位置 | 作用范围 | 默认值 | 在内存中的位置 | 生命周期 |
---|---|---|---|---|---|
成员变量 | 类中,方法外部 | 整个类 | 具有默认值 | 位于堆内存 | 方法进栈而存在,方法出栈而消失 |
局部变量 | 方法内部 | 只能在方法中使用 | 无默认值(不赋初值报错) | 位于栈内存 | 对象创建而存在,对象被回收而消失 |
静态变量 | 方法外部 | 整个类 | 具有默认值 | 位于方法的静态区 | 随着类的加载而加载,随着类的消失而消失 |
使用详解
静态变量(属于以static修饰的成员变量)
静态变量在类中,但在方法、构造方法、语句块之外;
系统会自动根据其所属类型给定初始化值(变量的值可在声明时设定,也可在构造方法中设定。此外,静态变量还可以在静态语句块中初始化);
对象. 或 类名. 两种形式调用;
存储在方法区的静态方法区;
生命周期是 随类加载而加载,类消失而消失;
无论一个类创建了多少个对象,类只拥有静态变量的一份地址拷贝;
为了对类的使用者可见,大多数静态变量声明为public类型;
成员变量
成员变量在一个类中,但在方法、构造方法和语句块之外;
系统会自动根据其所属类型给定初始化值(变量的值可在声明时设定,也可在构造方法中设定);
访问修饰符public、private等可以修饰实例变量;
对象. 一种形式调用;
存储在堆内存中;
生命周期是 随对象创建而存在,对象消失而消失;
成员变量的值至少被一个方法、构造方法或语句块引用,使得外部能够通过这些方法获取实例变量信息;
实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下用private修饰,通过使用访问修饰符可以使实例变量对子类可见;
局部变量
局部变量声明在方法、构造方法、语句块中;
局部变量没有默认值,所以声明后必须经过初始化才可使用;
没有调用方式,在范围内直接用;
存储位置在栈中;
生命周期与所在区域保持一致;
访问修饰符public、private等不能用于修饰局部变量;
注意事项
当成员变量与局部变量名相同时,使用就近原则,只要你能访问到,哪个声明的地方离你近就访问的是哪个,必须访问成员变量时,使用this访问。
每个对象都有自己的成员变量,并不是共享一份,而静态变量则是所有对象共享一份。
静态变量的访问,一般使用‘类名.变量名’进行访问,也可使用‘对象名.变量名’进行访问,但不推荐,因为静态变量并不属于某个对象,而属于整个类
有关变量的理解
点击跳转 Java变量简介