精华内容
下载资源
问答
  • 成员变量和局部变量

    2019-03-04 20:58:53
    在类中的位置不同 成员变量:在类中方法外 局部变量:在方法内或者方法声明处 在内存中的位置不同 成员变量:在堆内存中 局部变量:在栈内存中 ... 成员变量和局部变量的名称可以一致,方法调用的时候采取就近原则
  • Java 面向对象中的两类 变量 : 成员变量和局部变量
  • 成员变量和局部变量详解

    千次阅读 多人点赞 2020-06-10 10:19:53
    文章目录1、考点:2、局部变量和成员变量的区别3、具体的测试代码4、过程分析(重点)5、补充 1、考点: 就近原则 变量的分类 成员变量:类变量、实例变量 局部变量 非静态代码块的执行:每次执行实例对象都会...

    好吧,我承认我有赌的成分。我以为我能赌出答案,结果赌输了。


    还得利用JVM的知识点进行运算。




    1、考点:

    • 就近原则
    • 变量的分类
      • 成员变量:类变量、实例变量
      • 局部变量
    • 非静态代码块的执行:每次执行实例对象都会执行
    • 方法的调用规则:调用一次执行一次



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

    1、声明位置

    1. 局部变量:方法体{}中、形参、代码块{}中
    2. 成员变量:类中方法外
      • 类变量:有static修饰
      • 实例变量:没有static修饰

    2、修饰符

    1. 局部变量:final
    2. 成员变量:public、protect、private、final、static、volatile、transient(序列化)

    3、存储位置:

    1. 局部变量:栈
    2. 实例变量:堆
    3. 类变量:方法区

    4、作用域

    1. 局部变量:从声明处开始,到所属的 } 结束
    2. 实例变量:在当前类中 “this.” (有时this.可以省略),在其他类中 “对象名.” 访问
    3. 类变量:在当前类中 “类名.” (有时类名. 可以省略),在其他类中“类名.” 或 “对象名.” 访问

    5、生命周期

    1. 局部变量:每一个线程,每一次调用执行行都是新的生命周期
    2. 实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例化变量是独立的
    3. 类变量”随着类的初始化而初始化,随着类的卸载而消亡,该类的所有对象的类变量是共享的

    补充:

    堆(Heap):

    此内存区域的唯一目的就是存放实例对象,几乎所有的实例对象都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配

    栈(Stack):

    通常说的栈是指虚拟机栈**。虚拟机栈用于存储局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型(8大基本数据类型)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放。

    方法区(Method Area):

    用于存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码等数据




    3、具体的测试代码

    测试代码:

    package pers.mobian.questions06;
    
    public class Test01 {
        static int s;//成员变量,类变量
        int i;//成员变量,实例变量
        int j;//成员变量,实例变量
    
        {
            int i = 1; //局部变量
            i++; //局部变量 如果此处想要成为成员变量,就需要在变量前面添加一个this关键字
            j++; //成员变量
            s++; //成员变量
        }
    
        public void test(int j) {
            j++; //局部变量 如果此处想要成为成员变量,就需要在变量前面添加一个this关键字
            i++; //成员变量
            s++; //成员变量
        }
    
        public static void main(String[] args) {
            Test01 test01 = new Test01();
            Test01 test02 = new Test01();
            test01.test(10);
            test01.test(20);
            test02.test(30);
            System.out.println(test01.i + "," + test01.j + "," + test01.s);
            System.out.println(test02.i + "," + test02.j + "," + test02.s);
        }
    }
    
    

    执行结果:

    2,1,5
    1,1,5
    




    4、过程分析(重点)

    Test01 test01 = new Test01();
    Test01 test02 = new Test01();

    执行这两句以后,对应的信息变化为下图:

    补充:

    1. 先对该类进行初始化,即会调用对应的clint方法,在方法区中为s开辟一块空间
    2. 实例化对象的时候,会调用对应的init方法,其中init方法由非静态实例变量显示赋值代码非静态代码块对应构造器代码组成
    3. 非静态实例变量显示赋值代码:i = 0, j = 0
    4. 非静态代码块:执行 {} 中的代码块(在栈中开辟一个栈帧),其中代码块中的 i 为局部变量,代码块执行完毕消失。但是 j 为成员变量,所以会进行对应的 +1 操作(就近原则),成员变量 i 结果不变。
    5. 对应构造器代码:此处无参构造没有任何效果,所以可以忽略

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9bdbPfj-1591754744864)(06_成员变量和局部变量.assets/image-20200607205942615.png)]


    test01.test(10)
    test01.test(20)
    test02.test(30)

    执行这三行代码以后内存的分配情况,如下图:

    补充:

    1. test01调用对应的test方法的时候,j 是局部变量所以 j 值为11,注意区分此处的 j 和堆内存中的 j 值。
    2. test方法中的 i 值为成员变量,所以会在堆内存中被修改为1
    3. test方法中的 s 值也是成员变量,并且其是static变量,所以 s 变量会在方法区中进行 +1 操作
    4. 再次执行test01中的test方法,重复1-3的步骤
    5. 执行test02对象中的test方法,i 的 +1 在堆中完成,s 的 +1 操作在方法区中完成,j 的 +1 操作在栈中完成 j = 31(由于 j 变量是局部变量,所以在执行对应的操作以后,失效)




    5、补充

    当局部变量与xx变量重名时,如何区分:

    1. 局部变量与实例变量重名
      • 在实例变量前面提添加 “this.” 关键字
    2. 局部变量与类变量重名:
      • 在类变量前面加 “类名.”
    展开全文
  • 成员变量和局部变量的区别

    万次阅读 多人点赞 2018-07-22 19:56:44
    成员变量和局部变量的区别  (1)在类中的位置不同  成员变量:类中方法外  局部变量:方法定义中或者方法声明上  (2)在内存中的位置不同  成员变量:在堆中  局部变量:在栈中  (3)生命周期不同  成员变量:...

    成员变量和局部变量的区别
        (1)在类中的位置不同
            成员变量:类中方法外
            局部变量:方法定义中或者方法声明上
        (2)在内存中的位置不同
            成员变量:在堆中
            局部变量:在栈中
        (3)生命周期不同
            成员变量:随着对象的创建而存在,随着对象的消失而消失
            局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
        (4)初始化值不同
            成员变量:有默认值
            局部变量:没有默认值,必须定义,赋值,然后才能使用

    展开全文
  • Java中成员变量和局部变量区别

    千次阅读 2021-03-19 10:18:38
    掌握Java的成员变量和局部变量 学习内容: 1、变量分类 变量的定义语法 数据类型 变量名 = 初始值; 根据变量定义位置的不同,分成两大类 成员变量: 直接定义在类中,方法外面。又称之为字段(Field),不要称...

    学习目标:

    掌握Java的成员变量和局部变量

    学习内容:

    1、变量分类

    • 变量的定义语法
    数据类型 变量名 = 初始值;
    
    • 根据变量定义位置的不同,分成两大类
      成员变量
      直接定义在类中,方法外面。又称之为字段(Field),不要称之为属性(错误)
      局部变量
      除了成员变量,其他都是局部变量,具体存在于下面三个地方
      方法内
      方法的形参
      代码块中(一对花括号)

    下图是成员变量和局部变量在代码中的体现
    在这里插入图片描述

    2、变量初始化
    变量的初始化表示在内存中开辟存储空间,只有初始化之后,才能使用。
    成员变量:默认是有初始值的,不同类型的初始值,如下图
    局部变量:没有初始值,所以必须手动先初始化才能使用
    在这里插入图片描述

    3、变量作用域
    变量根据定义的位置不同,也决定了各自的作用域是不同的,关键看变量所在的那对花括号。
    成员变量:在所定义的类中都有效
    局部变量:从开始定义的位置开始,只能在自己所在的花括号内有效

    4、.变量的生命周期
    变量的生命周期,表示变量在内存在能存活多久。
    成员变量:存储在堆内存中,随着对象的销毁而销毁
    局部变量:存储在栈内存中,随着所定义方法的调用结束而销毁
    局部变量存储在方法中,每次调用方法都会在栈空间开辟一块内存空间——栈帧,方法调用结束,栈帧就被销毁了,内存中的存储的变量数据也销毁了

    总结:

    以上就是Java中成员变量和局部变量的区别了,欢迎大佬指正错误。

    展开全文
  • 在刚开始学习Java的时候,就了解了Java基础中的变量,虽然知道这个以后会经常用到,但没想到了基本语法这里,竟然又冒出来了成员变量和局部变量。变来变去太容易让人搞晕了,今天我们就挑拣出来梳理一下!
  • 本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行
  • 成员变量和局部变量同名问题

    千次阅读 2020-01-26 20:05:48
    当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?可以在成员变量名前面加上this.来区别成员变量和局部变量 class Person { private int age; private String na...

    通过前面学习,基本明确了对象初始化过程中的细节,也知道了构造方法之间的调用是通过this关键字完成的。但this也有另外一个用途。

    当在方法中出现了局部变量和成员变量同名的时候,那么在方法中怎么区别局部变量成员变量呢?可以在成员变量名前面加上this.来区别成员变量和局部变量

    class Person {

        private int age;

        private String name;

     

        // 给姓名和年龄初始化的构造方法

        Person(String name, int age) {

            // 当需要访问成员变量是,只需要在成员变量前面加上this.即可

            this.name = name;

            this.age = age;

        }

     

        public void speak() {

            System.out.println("name=" + this.name + ",age=" + this.age);

        }

    }

     

    class PersonDemo {

        public static void main(String[] args) {

            Person p = new Person("张三", 23);

            p.speak();

        }

    }

    展开全文
  • 关于成员变量和局部变量存储位置

    千次阅读 2020-04-11 10:28:28
    成员变量在堆内存里,局部变量在栈内存里。(基础类型) 我有疑惑: 既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在...
  • 成员变量和局部变量 注:所有的变量没有赋值是不能使用的!!! 两者的区别: 定义的位置不同: 成员变量:定义在类中成员位置的变量,称为实例变量 / 类变量,在类中方法外 局部变量:定义在类中方法中 ...
  • JAVA 面向对象 成员变量和局部变量

    万次阅读 多人点赞 2016-07-20 18:08:42
    局部变量 成员变量和局部变量的运行机制存在很大差异,下面我们看看差异在哪. 成员变量 成员变量指的是在类里定义的变量. 局部变量指的是在方法里定义的变量. 下面我给出Java程序中的变量划分图: 成员变量被...
  • 一直分不清成员变量和局部变量??????????????????????????????????????????????????????????????????????
  • 成员变量和局部变量的区别
  • 成员变量name。局部变量who package cn.itcast.day0601.demo03; public class Demo01Person { String name;//我自己的名字 public void sayHello(String who){ System.out.println(who+"你好,我是"+name); } }...
  • 成员变量和局部变量同名 在同一个作用域内不允许定义同名的多个变量。   在一个方法内,可以定义和成员变量同名的局部变量或参数,此时成员变量被屏蔽。此时如果想要访问成员变量,可以通过 this 关键字来...
  • public class demo{ int x ; x = 1;//这句会报错 } 上边是两个语句,第一个,声明一个类的...(类里面只能放成员变量和方法吧,赋值是个操作) public class demo{ int x = 1; //这条语句是声明成员变量的同时并...
  • java中的成员变量和局部变量的区别

    万次阅读 2016-08-29 11:20:59
    成员变量: 在类体里面定义的变量叫做成员变量; 如果在变量有static关键字修饰,就叫作静态变量或类变量; 如果该变量没有static关键字修饰,就叫作非静态变量或实例变量; 局部变量: 方法内定义的...
  • 如果java的成员变量和局部变量重名 JAVA会用局部变量覆盖掉成员 只看楼主 收藏 回复 iehshx 淼沝 5 怎么样才能让两个变量都输出呢...
  • 对于成员变量和局部变量成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 形式参数是局部变量局部变量的数据存在于栈内存中。栈内存中的局部变量随着...
  • 一、 静态变量和成员变量的区别: (1):所属不同:  静态变量:属于类,也称为类变量。  成员变量:属于对象,也称为对象变量或实例变量。 (2):在内存中的位置不同:  静态变量:存储于方法区的静态区。  成员...
  • 参数传递,成员变量和局部变量

    千次阅读 2019-05-15 15:13:13
    1.参数传递 基本数据类型作为方法的参数传递时,形参改变不影响实参 ...2.成员变量和局部变量的区别 1)在类中的位置不同 成员变量在类中,方法外。 局部变量在方法中或者方法内 2)在内存中的位置不同 成...
  • 1 定义 ...归属于类的实例的变量,没有经过static修饰,成员变量存在于类之内,方法代码块之外。实例变量只能通过类对象.变量访问。 1.3局部变量 是在类中方法体里面所定义的变量,不管...
  • JAVA中的成员变量存储在堆内存中,而局部变量存在于栈内存中JAVA中的成员变量存储在堆内存中,而局部变量存在于栈内存中
  • public class ThreadTest ...2)当两个线程访问的是该对象的局部变量时,那么每个线程都有一份自己的局部变量的拷贝,也就是两个线程的成员变量互不影响。上面代码的执行结果是两份0-49 乱序 100个数。    
  • 目录 一、类的修饰符 二、成员变量修饰符 三.方法修饰符 1、类方法 2、实例方法 3、构造方法 4、方法的修饰符 ...四.... 成员变量 ... 局部变量 abstract(抽象的) √...
  • 1.作用域不同  局部变量的作用域仅限yu

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,854
精华内容 108,741
关键字:

成员变量和局部变量