浅谈Java变量

一、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概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,730评论 0 11
  • 面向对象笔记 一、 对象在内存中的存放方法以及被调用过程 class文件首先被加载到方法区中的class文件内容区...
    VictorBXv阅读 496评论 0 2
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,639评论 4 12
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,222评论 0 2
  • 镜花水月对影孤,深浅泪痕惊雨秋。 碧海丹心水澹澹,忘却巫山新月出。
    兰郡子阅读 616评论 8 17