成员变量、全局变量和局部变量


小编一直分不清成员变量和全局变量,认为它们是一个东西,现在跟着小编来看一看,到底一样还是不一样呢?( *-)ρ(*╯^╰)

一、变量

  1. 什么是变量?在执行程序的过程中,值可以发生变化的量。

  2. 定义变量格式:数据类型 变量名=变量值

  3. 变量的分类(在Java中):1.类变量 2.实例变量3. 局部变量

    • 类变量就是静态变量:在方法外类之内,用static(静态的)修饰的变量
    • 实例变量就是成员变量:在方法外类之内,但没有用static修饰的变量
    • 局部变量:方法体中的变量,方法的参数列表中的变量也是局部变量。它随着所在方法的产生而产生,使用而使用,销毁而销毁。

    重点来了,,,java中没有全局变量,在C和C++中有全局变量

    全局变量的概念是在C和C++中的。

    在C中全局变量指在函数外部定义的变量,可为本文件所有函数共用的变量,作用域是从定义变量的位置开始,到整个文件结束及有extern声明的其它源文件

    1. 变量的访问规则:就近原则

      public class we {
          public static void main(String[] args) {
              int num=50;
              getNum(num);
          }
          public static void getNum(int num1){
              int num=100;
              System.out.println(num);
          }
      }
      输出结果为100.
      
      public class we {
          public static void main(String[] args) {
              int num=50;
              e  e=new e();
              e.getNum(num);
          }
      }
      class e{
          int num=100;
          public void getNum(int num){
              System.out.println(num);
          }
      }
      输出结果为50.
      
      public class we {
          public static void main(String[] args) {
              int num=50;
              e  e=new e();
              e.getNum(num);
          }
      }
      class e{
          int num=100;
          public  void getNum(int num){
              System.out.println(num);
              System.out.println(this.num);
          }
      }
      输出结果为50100.
      

二、类变量(静态变量)

声明格式:访问修饰符[非访问修饰符] static 数据类型 变量名; 或者

​ 访问修饰符[非访问修饰符] static 数据类型 变量名 = 变量值;

  1. 该变量用static修饰,即在成员变量前加static,则成员变量变静态变量

  2. 存在与方法之外类之内,存在于方法区

  3. stctic关键字修饰的变量在所在的类中是共享的。

  4. 在jdk1.8之前静态变量存储在方法区(永久代)的静态区中(被加载后的位置),在jdk1.8之后方法区(永久代)被移除了,取而代之的是元空间,元空间中存储的主要是class文件的元数据,静态变量的存储位置就转移到了堆内存中。不论是静态方法还是实例方法都是在栈内存中进行的。

  5. 每个线程都会在栈内存中开辟一个栈,在调用方法时,对应的方法都会在执行这个方法的线程的栈中创建一个“栈帧”,栈帧中保存了局部变量表(基本数据类型和对象引用)、操作数栈、动态连接和返回地址等信息。等到方法执行完毕,栈帧被销毁,对应的内存也将被释放。

  6. 类变量(静态变量)初始化后(声明时赋值后),它的值是不变

  7. 类变量在所在类被加载时优先于其他变量加载,且无论该类有多少个对象,类只拥有类变量的一份copy。

  8. 随着类的加载而加载,销毁而销毁

三、实例变量(成员变量)

小编根据实例变量中的实例理解的是:此变量在类实例化对象时可以作为对象的属性,作为对象、成员的属性所以叫做实例变量或者成员变量。小编习惯上把实例变量叫做成员变量。实例方法:相对于静态方法而言的,就是没有用static修饰的一般方法,只能用对象.方法名调用。

声明格式:访问修饰符[非访问修饰符] 数据类型 变量名; 或者

​ 访问修饰符[非访问修饰符] 数据类型 变量名 = 变量值;

  1. 在初始化对象时,每一个对象都会有相同的属性,这些属性都是由实例变量变化而来的。当一个对象被实例化之后,每个实例变量的值就跟着确定
  2. 存在与堆中
  3. 实例变量存在于方法之外类之内(声明位置),不用static修饰的变量
  4. 实例变量在对象实例化的时候创建,在对象销毁时销毁。
  5. 实例变量在声明时可以不用赋值,有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定。

四、局部变量

声明格式:数据类型 变量名 = 变量值; 或者

​ 数据类型 变量名; 但此方式在使用该变量前,要给该变量赋值。

  1. 声明在方法、语句块中。方法的参数列表中的变量也为局部变量。
  2. 局部变量在栈中分配,存在于栈中
  3. 局部变量在声明时,必须赋一个初始值,才可以使用。
  4. 随着所在方法 语句块的调用而调用,销毁而销毁。
  5. 访问修饰符、static不能修饰局部变量

访问修饰符

同类同包子类(不同包)非子类(不同包)
private
defualt
protected
public

五、实例变量与局部变量的区别

  1. 实例变量在方法、语句块之外;局部变量在方法、语句块之内
  2. 实例变量在声明时可以不用赋值,局部变量在声明时或者使用前要赋值
  3. 实例变量在堆内存中,局部变量在栈中。
  4. 实例变量可以用访问修饰符修饰,局部变量不能
  5. 实例变量是跟随与类的,局部变量是跟随与方法、语句块的。
public class we {
    String name;//name为实例变量,成员变量
    static int m=9; //m为类变量

    //构造器
    public we(String name) {//name为局部变量
        double h=1.23;//h为局部变量
        this.name = name;
    }
    public we(){
        double h=1.23;//h为局部变量
    }
    //代码块、语句块
    {
        double h=1.23;//h为局部变量
    }
    static{
        double h=1.23;//h为局部变量
    }

    public static void main(String[] args) {  //主方法中的args为局部变量
      double h=1.23;//h为局部变量
    }
    public  int getJie(int n){ //n为局部变量
        return 0;
    }
}

六、全局变量

(简单理解)

  1. Java中没有全局变量这一概念。
  2. 在C语言中的变量,从作用域来说分为全局变量和局部变量
  3. 在函数外部定义的变量,可为本文件所有函数共用的变量称作全局变量,也称外部变量
  4. 作用域是从定义变量的位置开始,到整个文件结束停止,及有extern声明的其它源文件。

其实全局变量在理解上和实例变量是一样的,但是在Java中没有全局变量这一概念,这是C语言中的概念。

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
成变量(Member Variables): - 定义:成员变量是定义在类中的变量,用于描述一个对象的属性或状态。每个类的对象都会拥有一组成员变量,它们存储在对象的内存空间中。 - 特点:每个对象都会独立拥有一份成员变量的副本,对一个对象的成员变量的修改不会影响其他对象的成员变量。 - 访问:成员变量可以通过对象名加上点操作符来访问,例如:object.memberVariable。 全局变量(Global Variables): - 定义:全局变量是定义在函数外部、整个程序可见的变量。它们在程序启动时创建,在程序结束时销毁。 - 特点:全局变量在整个程序的执行过程中都是存在的,任何函数都可以访问和修改全局变量的值。 - 声明和定义:全局变量需要在使用前进行声明,并且只能在一个文件中定义一次,可以通过使用extern关键字进行声明,然后在其他文件中使用。 - 访问:可以直接通过变量名来访问全局变量,例如:globalVariable。 局部变量(Local Variables): - 定义:局部变量是定义在函数、代码块内部的变量,它们在进入代码块时创建,在离开代码块时销毁。 - 特点:局部变量只在所属的代码块中有效,离开代码块后就无法访问和使用。 - 作用域:局部变量的作用域仅限于其所属的代码块,不同的代码块可以定义相同名字的局部变量而互不影响。 - 生命周期:局部变量的生命周期随着所属代码块的执行而开始和结束,每次执行代码块都会重新创建局部变量。 - 访问:只能在声明局部变量的代码块内部使用和访问局部变量,不能在其他代码块或函数中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值