Java成员变量、局部变量、静态变量、成员方法、全局方法等概念的区别

时间:2023-02-25 21:11:33

记得刚毕业那会儿刚开始转Java的时候,这几个概念还分不太清楚, 弄了还蛮久的,现在把之前做的笔记加上现在自己的理解记录下来。


      在Java中,一个类体由2部分构成:
一部分是变量的定义;
一部分是方法的定义(一个类中可以有多个方法)  

 

Java中的变量可以分为成员变量,全局变量

成员变量和局部变量的区别

       成员变量:(类似于C中的全局变量的概念,所以也可以说是全局变量)

          ①成员变量定义在类中,在整个类中都可以被访问。

          ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

          ③成员变量有默认初始化值。

      局部变量:

          ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

          ②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

          ③局部变量没有默认初始化值 

      在使用变量时需要遵循的原则为:就近原则

      首先在局部范围找,有就使用;接着在成员位置找。

静态变量(也叫做类变量,类属性

      由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。


成员变量和静态变量的区别

      1、两个变量的生命周期不同

            成员变量随着对象的创建而存在,随着对象被回收而释放。

            静态变量随着类的加载而存在,随着类的消失而消失。

      2、调用方式不同

            成员变量只能被对象调用。

            静态变量可以被对象调用,还可以被类名调用。

      3、别名不同

            成员变量也称为实例变量。

            静态变量也称为类变量。

      4、数据存储位置不同

            成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

            静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

列表对比:

       成员变量、局部变量、静态变量的区别 

 

成员变量

局部变量

静态变量

定义位置

 在类中,方法外

方法中,或者方法的形式参数

在类中,方法外

初始化值

有默认初始化值

,先定义,赋值后才能使用

有默认初始化值

调用方式

对象调用

---

对象调用,类名调用

存储位置

堆中

栈中

方法区

生命周期

与对象共存亡

与方法共存亡

与类共存亡

别名

实例变量

---

类变量



class Demo{
<span style="white-space:pre"></span>int x;// 非静态成员变量,又称为属性,对该类不同的对象来说,属性是不同的

<span style="white-space:pre"></span>static int y;// 静态成员变量,一个类中只有一个该变量,该类不同的对象共享同一个静态成员变量

<span style="white-space:pre"></span>public static void main(String[] args){
<span style="white-space:pre"></span>int m = 0;// 局部变量,是方法内部定义的变量,只在方法内部可见,在该方法结束后,由垃圾回收器自动回收
<span style="white-space:pre"></span>}

}


Java中的方法可以分为成员方法,全局方法,构造方法

public class Test {
private int age; //这是成员变量
public Test(int age) {//这是构造方法
this.age = age;
}
public void setAge(int age) {//这是成员方法
this.age = age;
}
public static int getAge() {//这是全局方法,加了static关键字,成员方法就变成了全局方法
return this.age;
}
}
成员方法必须用类的实例化对象进行访问,而全局方法是直接可以用类名.方法名来访问的,构造方法则是实例化对象时进行初始化的