• JAVA学习之成员变量与局部变量


     

    成员变量:
    成员变量指的是类范围里定义的变量,也可以叫做字段,当有对应的get()/set()方法时也可以叫属性;
    成员变量被分为类属性和实例属性两种,定义一个属性时不使用static修饰的就是实例属性,使用static修饰的就是类属性。
    其中类属性从这个类的准备阶段起开始存在,直到系统完全销毁这个类,类属性的作用域与这个类的生存范围相同; 
    而实例属性则从这个类的实例被创建开始起存在,直到系统完全销毁这个实例,实例属性的作用域与对应实例的生存范围相同.
    其实成员变量就是普通的变量,可以为它设置初始值,也可以不设,如果不设,会有一个系统默认的初始值,

    局部变量:
    局部变量指的是一个方法内定义的变量。
    又根据定义形式的不同,分为三种: 

    1.方法的参数签名/形式参数:在定义方法签名时定义的变量,形式参数的作用域在整个方法内有效.   
    如: void method(String name){}
    这里的参数变量,name就是一个形式参数,其作用范围在这个方法内有效

    2.方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量 的地方生效,到该方法结束时消失  
    如: void method(){
    int i=0;

    这里的变量i,有效范围是从定义的地方开始,直到方法的结束都有效

    3.代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效. 
    如:for(int i=0;i<5;i++){},
    就只在for循环的代码块内有效,出在for的范围,i无效

    局部变量除了形参之外,都必须显式初始化.
    也就是说,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们. 

    在同一个类里,不能定义两个同名的成员变量,即使一个是静态的,一个不是静态的也不行;
    一个方法里不能定义两个同名的局部变量,即使一个是方法局部变量,一个是代码块局部变量或者形参也不行,或者一个形式参数也不行。
       
    但是,JAVA允许局部变量和成员变量同名,
    如果方法里的局部变量和成员变量同名,
    直接使用时就只是使用局部变量,如果需要在这个方法里使用成员变量,
    则可使用this关键字(对于实例属性)或类名(对于类属性)作为调用者来限定访问成员变量。

    成员变量的初始化和内存中的运行机制
    当系统加载类或创建该类的实例时,系统自动为成员变量分配内存空间,并在分配内存空间后,自动为成员变量指定初始值。
    并和类或者实例一起,都是存在于堆内存中的,与类或实例共存.如果类或实例销毁了,成员变量也不存在了

    局部变量的初始化和内存中的运行机制 
    局部变量定义后,必须经过显式初始化后才能使用,系统不会为局部变量执行初始化,
    这意味着定义局部变量后,系统并未为这个变量分配内存空间,直到等到程序为这个变量赋初始值时,
    系统才会局部变量分配内存,并将初始化值保存到这块内存中。   
    与成员变量不同,局部变量不属于任何类或实例,
    它总是保存在其所在方法的栈内存中的。
    如果局部变量 是基本类型的变量,则直接把这个变量的值保存在该变量对应内存中;
    如果局部变量是一个引用类型的变量,则这个变量里存放的是地址,通过该地址引用到该变量实际引用的对象或数组。
    (注意这里只讨论局部变量,而不是局部变量所代表的类型,局部变量有可能是值类型,也有可能是引用类型)

    不管是成员变量、还是局部变量,都是叫变量,都应该遵守相同的命名规则,都应该遵守JAVA的名称规范,

    总结,
    成员变量和局部变量的相同点,
    都是变量,都应该遵守JAVA命名规范,都有一定的作用范围,都可以是JAVA中的数据类型
    成员变量和局部变量的不同点,
    成员变量是在类的内部声明的,局部变量是在方法内部声明的(或者形式参数的形式),
    成员变量可以不用初始化,系统会给它赋一个默认的初始值,局部变量要初始化,否则编译出错
    成员变量是和类或者类的实例一起,存储在堆内在中的,局部变量是存储在栈内存中的,
    成员变量是由垃圾回收器销毁的,局部变量会自动销毁的

  • 相关阅读:
    CSS background API
    Vistual Studio 2019下载离线包与离线包更新
    flex布局属性速查表
    Vuex-核心概念-State 学习笔记
    前端环境搭配ESLint和Prettier
    Windows下VScode Scss开发环境配置
    Vue2.5开发去哪儿网App 从零基础入门到实战项目之6-1 Vue项目预热
    Webpack深入与实战 慕课网 免费 讲师qbaty 学习笔记
    Linux安装RabbitMQ
    docker-compose 搭建 kafka 集群
  • 原文地址:https://www.cnblogs.com/fylx/p/3957401.html
Copyright © 2020-2023  润新知