美文网首页
浅谈Java变量

浅谈Java变量

作者: f155b8f6e0ac | 来源:发表于2019-12-06 14:58 被阅读0次

    一、Java变量的分类

    学习java的小伙伴都知道,在Java中,一个类可以分为三种变量:

    1.局部变量:顾名思义,就是在某个方法,或者某段语句块中定义的变量。变量声明和初始化都是在方法中,方法结束后,此变量销毁。最典型的例子for(int i=0;i<num;i++)中的i就是局部变量

    2.成员变量:成员变量就是定义在类中,方法体之外的。成员变量是在创建对象的时候实例化。成员变量可以被类中的方法,构造方法等访问。

    3.静态变量(类变量):静态变量也称作类变量,他也是在方法体之外,但是与成员变量不同的是,它必须声明为static类型.

    二、成员变量和局部变量

    如果局部变量的名字和成员变量的名字相同,要想在该方法中访问成员变量,必须使用关键字this

    Class Person {
        String name = "类成员变量";
        Person(){
        };
        
        public void speak(){
            String name = "方法中的局部变量";
            System.out.println(name)           //方法中的局部变量
            System.out.println(this.name)      //类成员变量
        }
    }
    
    成员变量和局部变量的区别
    成员变量

    1.成员变量定义在类中,整个类包括方法都可以访问;
    2.成员变量的生命周期跟随对象的建立至销毁,是存在于对象所在的堆内存中的;
    3.成员变量都有默认的初始化值.

    局部变量

    1.局部变量只定义在局部方法或者语句块中,只在所属区域有效;
    2.局部变量存在于栈内存,作用的范围结束,变量空间会自动释放;
    3.局部变量没有默认的初始化值.

    三、成员变量和静态变量

    static修饰的变量成为静态变量。静态变量可以理解为是一个全局变量,他是所有对象所共享的一个变量,举个例子:在一个小区中,每家每户都是一个实例对象,物业管理他是所有业主共享的,那么管理处就是一个全局变量即静态变量。

    ==不同对象的成员变量将分配到不同的内存空间,如果存在类变量,则所有的对象的这个变量都是分配给相同的一处内存,改变其中一个对象的类变量就会影响其他对象的类变量==

    举个栗子:

    class MyAdd {  
        int count = 0;          //成员变量计数器  
        static int sum = 0;     //静态变量计数器  
        String name;  
          
      
        MyAdd(String name){  
            this.name = name;  
        }  
          
        public void myAddMethod() {    
            count++;  
            System.out.println(name+"调用成员变量后的值:"+count);  
        }  
          
        public void staticAddMethod() {    
            sum++;  
            System.out.println(name+"调用类后变量的值:"+sum);  
        }  
          
          
    }  
    
    public class TestThis {  
      
        public static void main(String[] args) {  
            MyAdd add1 = new MyAdd("add1");  
            MyAdd add2 = new MyAdd("add2");  
              
            add1.myAddMethod();  //add1调用成员变量后的值 1
            add2.myAddMethod();  //add2调用成员变量后的值 1
            add1.myAddMethod();  //add1调用成员变量后的值 2
            add1.staticAddMethod();  //add1调用成员变量后的值 1
            add2.staticAddMethod();  //add2调用成员变量后的值 2
            add1.staticAddMethod();  //add1调用成员变量后的值 3
        }  
      
    }  
    

    内存结构图如下:


    内存结构图.png
    成员变量和静态变量的区别
    1. 生命周期不同
    • 成员变量是随着对象的创建而创建,随着对象的回收而回收
    • 静态变量是随着的加载而存在,类的消失而消失
    1. 调用方式不同
    • 成员变量只能被对象调用
    • 静态变量不仅可以被对象调用,还可以被类名调用
    1. 别名不同
    • 成员变量又称实例变量
    • 静态变量又称类变量
    1. 数据存储位置不同
    • 成员变量存储在堆内存的对象中,也叫对象的特有数据
    • 静态变量存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据

    四、静态变量的弊端

    静态变量的弊端
    1. 有些数据是某个对象特有的,不能成为共享数据。所以在定义静态变量时,一定要明确此数据是否被对象所共享,否则数据将被篡改
    2. 静态方法只能访问静态成员,不可以访问非静态成员。因为静态方法加载时,优先于对象存在,所以无法访问对象中的成员。
    3. 静态方法中不能使用this,super关键字。因为this代表对象,而静态在时,可能没有对象,所以this无法使用。

    相关文章

      网友评论

          本文标题:浅谈Java变量

          本文链接:https://www.haomeiwen.com/subject/xpkegctx.html