您的位置:首页 > 编程语言 > Java开发

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

2017-11-27 13:37 567 查看
转自: http://blog.csdn.net/s1amduncan/article/details/52089944#comments

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


      在Java中,一个类体由2部分构成:

一部分是变量的定义;

一部分是方法的定义(一个类中可以有多个方法)  

 


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

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

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

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

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

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

      局部变量:

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

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

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

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

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

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

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

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

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

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

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

      2、调用方式不同

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

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

      3、别名不同

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

            静态变量也称为类变量。

      4、数据存储位置不同

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

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


列表对比:

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

 
成员变量
局部变量
静态变量
定义位置
 在类中,方法外
方法中,或者方法的形式参数
在类中,方法外
初始化值
有默认初始化值
无,先定义,赋值后才能使用
有默认初始化值
调用方式
对象调用
---
对象调用,类名调用
存储位置
堆中
栈中
方法区
生命周期
与对象共存亡
与方法共存亡
与类共存亡
别名
实例变量
---
类变量
[java] view
plain copy

class Demo{  

           int x;// 非静态成员变量,又称为属性,对该类不同的对象来说,属性是不同的  

           static int y;// 静态成员变量,一个类中只有一个该变量,该类不同的对象共享同一个静态成员变量  

           public static void main(String[] args){  

                int m = 0;// 局部变量,是方法内部定义的变量,只在方法内部可见,在该方法结束后,由垃圾回收器自动回收  

          }  

}  


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

[java] view
plain copy

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;  

    }  

}  

成员方法必须用类的实例化对象进行访问,而全局方法是直接可以用类名.方法名来访问的,构造方法则是实例化对象时进行初始化的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐