常量与变量2020-04-09

1、常量和变量的定义

不管是常量还是变量,都是储存数据的,都会存在内存中的一块存储区域;

常量:它所代表的这个内存区域里的值,是在运行期间不能改变的;

变量:它所代表的这个内存区域里的值,是在运行期间可以改变的;


2、常量的分类

1)字面常量:在代码中写死的; <>如例:final int a=10  中的10,即实际值;

2)声明的常量:声明时用到的字符;<>如例:final int a=10  中的a;


3、变量的分类

按数据类型分

1)基本数据类型的变量:储存的是数据值;

2)引用数据类型的变量:储存的是地址值,指向另一块储存区域;

按声明位置分

1)成员变量:在类的{}中,在方法、代码块、构造器外面;

     成员变量又分两种:

             静态变量:用static修饰,随着类的加载而加载,整个类及类的实例都可用;

             非静态变量:没有static修饰,随着对象的生成而加载,类的每个实例可用;

2)局部变量

      ①在方法的形参列表、方法体{}内;

      ②构造器的形参列表、构造器{}内;

      ③代码块内;

注意:在方法、代码块、构造器外都可以声明成员变量,但不能写其他执行语句;

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

    A:静态变量

    B:非静态变量

    C:局部变量

1)声明位置不同

2)变量在内存中的分配的位置不同

    A:静态变量:在方法区中;

    B:非静态变量:在堆中;

    C:局部变量:在栈中;

3)初始化方式不同

    A:静态变量:①在类加载时加载,如果没有显式赋值,则有默认值;

                            ②也可在静态、非静态代码块,构造器、静态、非静态方法、内部类、内部接口中多次赋值;

                            ③重新赋值以后影响全局该变量的值;(图1:静态变量的赋值)

    B:非静态变量:①在新建对象前加载,如果没有显式,则有默认值;

                                ②可在非静态代码块,构造器,非静态方法,非静态内部类、非静态内部接口中多次赋值;

                                ③不能在静态代码块、静态方法中赋值;

                                     原因:因为静态随着类加载,不一定会新建对象;

                                ④重新赋值不影响其他对象,自影响该对象;(图2:非静态变量的赋值)

    C:局部变量:在方法、构造器、代码块、内部类、内部接口被加载或调用时赋值;如果没有显式赋值会报错,没有默认赋值;(图3:局部变量的赋值)(图4:内部类、内部接口中赋值)

4)生命周期不同:

   A:静态变量:随着类加载而加载,和类的生命周期一样长,只要类没被卸载就一直存在;

   B:非静态变量:在新建对象之前加载,和对象的生命周期一样长,而且每个对象是独立的;

   C:局部变量:随着方法、代码块、构造器的调用而加载,运行结束就回收;每一次方法调

          用是独立的,而且不同线程调用也是独立的;

5)作用域不同:

   A:静态变量:在整个类、类的实例中都能调用,在一个地方重新赋值会影响这个类及类的实例;

   B:非静态变量:在整个类的非静态成员中都能调用,在静态成员中无法调用;在一个实例中重新赋值不影响其他实例中的该非静态变量;

   C:局部变量:作用域窄,从声明开始,到方法、代码块、构造器或者一个循环结构中、运行结束;

6)修饰符

  A:静态变量权限修饰符、static、final、...

  B:非静态变量:权限修饰符、final、...

  C:局部变量:只有一个修饰符:final;默认是不带修饰符的(不是缺省)

图1:静态变量的赋值
图2:非静态变量的赋值
图3:局部变量的赋值


图4:内部类、内部接口中赋值;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容