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

    万次阅读 多人点赞 2018-09-14 10:46:45
    Java语言里,根据定义变量位置的不同,可以将变量分成两大类:成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)。二者的运行机制存在较大差异...

    1、成员变量和局部变量简述

    在Java语言里,根据定义变量位置的不同,可以将变量分成两大类:成员变量(存在于堆内存中,和类一起创建)和局部变量(存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存)。二者的运行机制存在较大差异。

    1.1成员变量

    类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同;

    而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。

    正是基于这个原因,可以把类变量和实例变量统称为成员变量。其中类变量可以理解为类成员变量,它作为类本身的一个成员,与类本身共存亡;实例变量则可以理解为实例成员变量,它作为实例的一个成员与实例共存亡。

    只要类存在,类就可以访问类变量         类.类变量

    只要实例存在,实例就可以访问实例变量        实例.实例变量

    当然实例也可以访问类变量。但是需要注意的是因为实例不拥有类变量,所以通过实例来访问类变量进行操作,实际上是对类变量进行操作 ,当有其他实例来访问类变量时,访问的类变量是被对象访问操作过的类变量。

    成员变量无需显示初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化。

    1.2局部变量

    局部变量根据定义形式的不同,又可以分为如下三种:

    形参:在定义方法签名时定义的变量,形参的作用域在整个方法中都有效

    方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效

    代码块局部变量:这个局部变量的作用域从定义该变量的地方生效,到该代码结束时失效。

    一个变量只在一对{}中起作用。。

    java允许局部变量和成员变量同名,如果方法中局部变量和成员变量同名,局部变量就会覆盖成员变量,如果需要在这个方法中引用被覆盖成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量。

    2、成员变量的初始化和内存中的运行机制

    接下来以下面代码来举例说明成员变量的初始化和内存中的运行机制

     

    复制代码

     1 public class Person {
     2     public int num;
     3     public String name;
     4     
     5     public static void main(String[] args) {
     6         Person p1 = new Person();
     7         Person p2 = new Person();
     8         p1.num = 2;
     9         p2.num = 3;
    10         p1.name = "张三";
    11         p2.name = "李四";
    12     }
    13     
    14 
    15 }

    复制代码

     

    当程序执行Person p1 = new Person();时,如果这行代码是第一次使用Person类,则系统通常会在第一次使用Person类时加载这个类,并初始化这个类,在类的准备 阶段,系统将会为该类的类变量分配内存空间,并指定默认初始值。当person类初始化完成后,系统内存中的存储示意图如下图所示。

     可以看出,当person类初始化完成后,系统将在堆内存中为Person分配一块内存空间,实际上是创建了一个类对象,在这块内存区里包含了保存num类变量的内存,并设置num的默认初始值为0。

    系统接着创建了一个Person对象,并把这个Person对象赋给p1变量,Person对象包含了名为name的实例变量,实例变量是在创建实例时分配内存空间并指定初始值的。当创建了第一个person对象后,系统内存中的存储示意图如下图所示。

    从上图可以看出num不属于对象,它属于类,所以创建第一个对象时并不需要为num分配内存空间,系统只是为name分配了内存空间,并指定初始值为null。

    创建第二个对象p2时,由于在创建第一个对象时已经对类进行了初始化,所以在创建p2时对类进行初始化,对象的创建过程与第一个对象的创建过程没有什么区别。

    第二个对象创建完成后,成员变量如上图所示在内存中存储。

    **当程序需要访问类变量时,尽量使用类来作为主调,不要使用对象作为主调,这个可以避免产生歧义。

    3、局部变量的初始化和内存中的运行机制

    *局部变量必须经过显示初始化之后才能使用,系统不会为局部变量执行初始化。定义了局部变量以后,系统并没有给局部变量进行初始化,直到程序给这个局部变量赋给初值时,系统才会为这个局部变量分配内存空间,并将初始值保存到这块内存中。

    *局部变量不属于任何类或者实例,因此它总是保存在方法的栈内存中。如果局部变量是基本数据类型,则该变量直接存储在方法的栈内存中,如果是引用变量则将引用的地址存储在方法的栈内存中。

    *栈内存中的变量无需系统垃圾回收,随着方法或者代码块的运行结束而结束。局部变量通常只保存了具体的值或者引用地址,所以所占的内存比较小。

    4、变量的使用规则

    能不使用成员变量就别使用成员变量

    能不使用方法局部变量就别使用方法局部变量

    使用代码块局部变量性能最好。

     

     

     

    展开全文
  • 文章目录Java 成员变量和静态变量的区别变量声明默认值与 Python 的联系实例变量的声明类变量的声明static 方法 Java 成员变量和静态变量的区别 1)成员变量所属于对象。所以也称为实例变量。 静态变量所属于类。...

    Java 成员变量和静态变量的区别

    1)成员变量所属于对象。所以也称为实例变量。
    静态变量所属于类。所以也称为类变量。

    2)成员变量存在于堆内存中。
    静态变量存在于方法区中。

    3)成员变量随着实例对象创建而存在。随着实例对象被回收而消失。
    静态变量随着类的加载而存在。随着类的消失而消失。

    4)成员变量只能被对象所调用 。
    静态变量可以被对象调用,也可以被类名调用。

    所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据

    变量声明默认值

    在 Java 中,从逻辑上讲,所有声明但没有初始化的变量都有默认值。比如说, 数值型变量(如 byte、int、double 等)的默认值是 0,字符型(char)的默认值为空,布尔型的默认值为 false。

    比如说下面这段代码

    public class Shell {
        static int a;
        
        public static void main(String args[]){
            System.out.println(a);
        }
    }
    

    运行结果

    0
    

    但且看下面这段代码

    public class Shell {
        int a;
        
        public static void main(String args[]){
            System.out.println(a);
        }
    }
    

    运行报错了

    Error:(12, 28) java: 无法从静态上下文中引用非静态 变量 a
    

    不是说 所有声明但没有初始化的变量都有默认值吗,那这里为什么不是输出 0,而是报错。

    原因很简单,因为a是实例变量,而实例变量只有在实例化时才被初始化为默认值(如果它没有被初始化的话)。

    那我们先实例化Shell类,再来跑一次

    public class Shell {
        int a;
        
        public static void main(String args[]){
            Shell s = new Shell();
            System.out.println(s.a);
        }
    }
    

    运行结果

    0
    

    与 Python 的联系

    实例变量的声明

    成员变量其实就是实例变量,虽然在 Python 中一般不这么叫。

    在 Java 中,实例变量其实就是普通的变量。一般这样声明

    class A{
    	String a = "我是成员变量";
    	...
    }
    

    在 Python 中,一般通过初始化方法

    class B():
    	def __init__(self):
    		self.s = "我是实例变量"
    		...
    
    类变量的声明

    不得不说的一点是,在 Java 中 static 成了类的代名词。而在 Python 中,static 就是 static。

    在 Java 中,通过 static 关键字修饰声明类变量。

    class A{
    	static String a = "我是类变量";
    	...
    }
    

    在 Python 中,则是定义在类的内部,非常像 Java 中成员变量的定义。

    class B():
    	s = "我是类变量"
    	def __init__(self):
    		pass
    
    static 方法

    在 Java 中,被 static 修饰的方法称为静态方法,又称类方法。

    public class Shell {
    
        void myFunct(){
            System.out.println("我是成员方法");
        }
    
        static void mySFunct(){
            System.out.println("我是静态方法");
        }
    }
    

    而在 Python 中,被@staticmethod修饰的方法被称为静态方法,但它严格区别于类方法。在 Python 中,实例方法操作实例变量,类方法操作类变量,而静态方法操作与类、实例都无关的变量,所以在 Python 中,静态方法又被称为辅助方法。

    class People:
        __count = 0
        def __init__(self, name, age):
            self.name = name
            self.age = age
            People.__count += 1    # 注意,这里不能使用self.__count,虽然不会报错
            
        # 实例方法    
        def speak(self, words):
            print(words)
        
        # 类方法,操作类相关的属性
        @classmethod
        def getCount(cls):
            print(cls.__count)
            
    	# 静态方法        
        @staticmethod
        def test():
            print("I am a static method")
    
    	# 第二种类方法
    	def special():
    		print("I am a special class method")
    
    
    展开全文
  • 文章目录Java成员变量和局部变量成员变量分为类变量和实例变量两种局部变量根据定义的形式不同,可以分为三种:成员变量的初始化和运行机制局部变量的初始化和运行机制 在java中,根据定义变量位置的不同,可以将...

    在这里插入图片描述
    在这里插入图片描述
    在上一期讲到 Java方法重载 ,上上期将到Java递归,上上上期讲到 Java方法详解,这一期继续讲方法!

    这是农历2020年,全CSDN第一篇文章!
    在java中,根据定义变量位置的不同,可以将变量分成两大类型:

    • 成员变量
    • 局部变量

    Java成员变量和局部变量

    • 成员变量:在类里定义的变量是成员变量
    • 局部变量:在方法中定义的变量是局部变量

    成员变量分为类变量和实例变量两种

    • 实例变量:没有static修饰是实例变量,实例变量是从该类创建时存在,直到系统完全销毁这个实例,实例变量的作用域与对应实例的生存范围相同。
    • 类变量:有static修饰的就是类变量,类变量从该类准备阶段开始存在,直到系统完全销毁这个类,类变量的作用域与这个类的生存范围相同。

    局部变量根据定义的形式不同,可以分为三种

    • 形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。
    • 方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
    • 代码块局部变量:在代码中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效到该代码块结束时失效。

    在这里插入图片描述
    代码实例

    public class Main {
    
    
        //成员变量:实例变量
        private static String name = "第三女神";
    
        //成员变量:类变量
        private int age = 25;
    
        public static void main(String[] args) {
    
            {
                //代码块局部变量
                int value = 27;
            }
    
            new Main().function(name);
    
        }
    
        //copy即是形参
        private void function(String copy) {
    
            //方法局部变量
            int age = 26;
        }
    }
    
    

    成员变量的初始化和运行机制

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


    局部变量的初始化和运行机制

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

    展开全文
  • Java成员变量与成员方法

    千次阅读 2019-05-27 10:28:49
    Java中对象的属性成为成员变量, 有时候很多人也喜欢把成员变量等同于全局变量, 因为成员变量在某一个类中都有效 (成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中...

    学而时习之,温故而知新.

    成员变量:

    在Java中对象的属性成为成员变量, 有时候很多人也喜欢把成员变量等同于全局变量, 因为成员变量在某一个类中都有效

    (成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。)

    成员方法:

    在Java中使用成员方法来对应与类对象的行为, 在类中,除了变量外的都是成员方法。

    一个案例 来标记成员变量与成员方法 

    package me;
    
    public  class Me {
        private  String name; //成员变量
        
        public String getName() { //成员方法
            return name;
        }
    
        public void setName(String name) {//成员方法
            this.name = name;
        }
    
        
    }

     

    展开全文
  • Java 成员变量和属性的区别 JavaBean - 类必须被public修饰 - 必须提供空参的构造器 - 成员变量必须使用private修饰 - 提供公共setter和getter方法 package domin; import java.io.Serializable; public ...
  • Java 成员变量和成员方法

    千次阅读 2018-12-07 10:25:44
    Java 语言中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。 成员变量Java 中对象的属性也称为成员变量。为了了解成员变量,首先定义一个图书类,成员变量对应于类对象的属性,在 Book 类...
  • java成员变量是什么

    千次阅读 2019-07-02 07:58:28
    java中 变量分成员变量 和局部变量 成员变量是指这个类的变量,局部变量是类中方法体内定义的变量。
  • java 成员变量放堆区,局部变量放栈区
  • java成员变量何时被回收
  • 面向对象主要用到的两种类型的变量: 成员变量和局部变量。 一、成员变量 在类中定义,用来描述对象将会有什么 二、局部变量 在类的方法中定义,在方法中用于临时保存数据 三、成员变量和局部变量的区别 1、...
  • java成员变量和方法

    千次阅读 2018-08-11 23:33:25
    能在类中存在的只有成员变量和成员方法,只要是一个方法就可以称为成员方法,它只是方法的统称。 类包括成员变量和方法两部分。成员变量表示类的属性,一数据域的形式表达,方法是数据的操作的定义。 在JAVA中,...
  • 第24节 Java成员变量的隐藏、方法的重写和super关键字 Java成员变量的隐藏 在编写子类时,我们仍然可以声明成员变量,一种特殊的情况是,如果所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的...
  • java 成员变量和局部变量

    万次阅读 2015-04-03 20:49:51
    java变量
  • Java成员变量的初始化

    千次阅读 2017-02-23 22:30:39
    Java成员变量的初始化 类变量与成员变量
  • 因为成员变量不是静态变量,不会独立与实例而存在,而该类实例化后放在堆中,所有存放在堆成员变量就中3.java虚拟机栈是线程私有的,生命周期跟线程相同,每个方法在调用的时候都会创建一个建帧用于存储局部变量的表...
  • JAVA 跟C++ 差不多,给类里面的私有成员变量一般有两种方法: 一种是通过 成员函数 来赋值 一种是:通道构造函数来赋值/*我们一直在使用构造方法,但是,我们确没有定义构造方法,用的是哪里来的呢?构造方法的注意...
  • Java成员变量默认赋值

    2019-10-19 16:59:42
    成员变量默认赋值 成员变量没有手动赋值的话,系统赋默认值 数据类型 默认值 byte,short,int,long 0 float,double 0.0 (double型比float型存储范围更大,精度更高,所以通常的浮点...
  • Java 成员变量的默认值

    万次阅读 2018-04-20 14:38:44
    其实,成员变量在创建时,系统会为其分配一个默认值。不同类型的变量,默认值也不相同。 例: package deep; public class DefaultValue { // 实例成员变量 private boolean bool; private byte b; privat....
  • Java 成员变量与局部变量名重复

    千次阅读 2015-08-17 09:45:27
    Java成员变量和局部变量可以重复定义。
  • java 成员变量和类变量的区别

    千次阅读 2018-03-16 11:13:09
    不同的对象的实例变量将被分配不同的内存空间, 如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量...
  • 不同的对象的实例变量将被分配不同的内存空间, 如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量...
  • Java成员变量初始化顺序

    千次阅读 2018-11-24 22:28:49
    Java成员变量分为两类:1、类变量 2、实例变量 1、类变量初始化 类变量简单来说就是被static修饰的变量,类变量属于类本身 1.1 初始化时机 定义类变量时指定初始化 静态代码块中对类变量指定初始化 1.2 初始化...
  • 成员变量和局部变量 成员变量:在类范围内的属性就是成员变量。在类这个范围内(不包含方法和其他成员)带有static修饰的属性就是类的属性,不带static修饰的属性就是对象(实例)属性。类属性与类共存亡,对象...
  • Java成员变量初始化

    2015-08-05 19:16:13
    Java按如下原则进行成员变量初始化: 1、先执行static修饰的成员(static变量、static代码块,两者优先级按代码次序);【前提是static修饰的成员还未初始化,若已初始化,不再初始化,即static修饰的成员只执行一次...
  • java成员变量的使用

    2016-10-20 23:46:37
    member variable 成员变量敲这个代码的作用就是说明一句话,// new操作创建对象后将返回其引用值, 在java中,访问对象只能通过指向对象的引用来实现。引用;当变量指向一个对象时,这个变量就称引用变量。
  • 成员变量与局部变量的区别: 定义的位置上区别: 1. 成员变量是定义在方法之外,类之内的。 2. 局部变量是定义在方法之内。 作用上的区别: 1. 成员变量的作用是用于描述一类事物的公共 属性的。 2. ...
  • 1.java成员变量处在堆内存(方法区中的静态区)中,局部变量处在栈内存中; 知其然知其所以然,我们简单了解一下Java内存分配: 一个完整的Java程序运行过程会涉及以下内存区域: 寄存器:JVM内部虚拟寄存器,...
  • java成员变量、成员方法、构造函数

    千次阅读 2018-02-08 14:03:40
    1.引用变量一个类的基本内容是由成员变量、成员方法、构造函数构成的。那其实成员变量中比较特殊的是可以引用变量。在jvm存储上,基本类型的数据是直接存储的,而引用变量例如String,或自己创建的类,是会额外的栈...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,552
精华内容 21,020
关键字:

java成员变量

java 订阅