• 二、Java面向对象(6)_深入变量


    2018-04-30

    父母在人生尚有来处,父母去人生只剩归途。

     

    深入变量

     

    一、变量的分类和初始值

      1.变量的分类

        变量根据定义位置不同而分成两大类

          1)成员变量/字段:直接定义在类{}中的变量(方法外)

          • 类成员变量(使用static修饰的字段)
          • 实例成员变量(没有使用static修饰的字段)

         2)局部(环境)变量:成员变量以外的变量,定义在方法中的变量

          • 方法内部的变量
          • 方法的形参
          • 代码块中的变量,一对{}              

      注意:变量的访问是就近原则

     

      2.变量的初始化

      • 成员变量:默认是有初始值的(看图)

            

      • 局部变量:默认没有初始值,所以必须先初始化才能使用

      注意:变量必须初始化(赋值)之后才能使用,初始化才是真正的内存分配。

     

    二、变量的作用域和生命周期

    1. 变量的作用域   

        变量根据所定义的位置不同也决定了其作用域也是不同的。看变量所在的那对花括号{}

          成员变量/字段:在所定义的类中起作用

          环境变量:从开始定义的位置开始到紧跟着结束的}之间

     

      2.变量的生命周期

        变量的作用域决定了变量的生命周期

        变量的生命周期指的是一个变量被创建并被分配内存空间开始,到该变量被销毁并清除其所在内存空间的过程。

        -------------------------------------------------------------------------------------------------------------------------   

        成员变量:  当系统加载类或创建类的实例时,系统会自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。

        -------------------------------------------------------------------------------------------------------------------------

        

    三、局部变量的初始化和在JVM中的运行机制

      局部变量定义后,必须经过显示初始化才能使用。这意味着定义了局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋值初始值时,系统才会给局部变量分配内存,并将初始值保存到这块内存中。

        与成员变量不同,局部变量不属于任何类或实例,因此它总是保存在其所在方法的栈内存中。如果局部变量是基本类型变量,则直接把变量值存放在栈中,如果是引用类型,则存放地址在栈中。

      栈内存中的变量无须系统垃圾回收,变量是随方法或代码块的运行结束而结束的。因此,局部变量的作用域是从初始化该变量开始,知道该方法或该代码块运行完成而结束。因为局部变量只保存基本类型的值或对象的引用,因此局部变量所占的内存通常较小。

    四、变量的定义和选择

      1.考虑变量的生存时间,影响系统(内存)开销

      2.扩大了作用域,不利于程序的内聚性。

    开发中应尽量缩小变量的作用域,这样在内存中停留时间越短,性能也就越高。

    尽量不使用static修饰,一般定义工具方法时或者static方法需要访问的变量,该变量属于类的时候,需要使用static修饰

    也不要动不动就使用成员变量,因为存在着线程不安全的问题。

  • 相关阅读:
    累加和最大化
    SELECT子句顺序
    Linux命令入门教程
    求字符串前缀最长的连续重复子串(不重叠)
    王道机试指南题解(C/C++版)
    C++ Primer 第 5 版 习题参考答案
    第 16 章
    第 15 章
    第 14 章
    从jvm源码解读Java运行时的类加载
  • 原文地址:https://www.cnblogs.com/sunNoI/p/8973130.html
Copyright © 2020-2023  润新知