JAVA静态变量、成员变量、局部变量

一、静态变量

在java中,静态变量指的是被static修饰的类的变量;静态变量被所有类实例对象所共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化

未被static修饰的成员变量和方法分别被称为实例变量实例方法。

访问方式

静态变量(方法)的访问方式:类名.变量名(方法名)

实例变量(方法)需要先将类实例化后才可访问:对象名.变量名(方法名)

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

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

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

注意

静态方法中不需要它所属类的任何实例就可以访问,所以在静态方法中不可以使用this关键字

静态方法中不可直接访问所属类的实例变量和实例方法,但可以直接访问所属类的静态变量和静态方法。

public class staticclass {
    public static int count = 0; //静态变量
    public int num =0; //非静态变量
    public static void method1(){ //静态方法
        System.out.println("正在访问静态方法(count++)....");
        System.out.println("\tpre-count = "+count);
        count++;
        //num++; //静态方法中不可以访问实例变量
        //method2();  //静态方法中不可以访问实例方法
        //System.out.println(this.num); //静态方法中不可以使用this关键字
        System.out.println("\tpst-count = "+count);
    }
    public void method2() //实例方法
    {
        System.out.println("正在访问实例方法(count+2,num+3)....");
        System.out.println("\tpre-count = "+count);
        System.out.println("\tpre-num = "+num);
        count+=2;
        num+=3;
        System.out.println("\tpst-count = "+count);
        System.out.println("\tpst-num = "+num);
    }
 
    public static void main(String[] args) {
        System.out.println("初始时,count = "+staticclass.count); //访问静态变量:类名+变量名
        staticclass.method1();//访问静态方法:类名+变量名
        staticclass a = new staticclass();
        System.out.println("\na未操作前,count = "+staticclass.count);
        System.out.println("         num = "+a.num);
        a.method2();
        staticclass b = new staticclass();
        System.out.println("\nb未操作前,count = "+staticclass.count);
        System.out.println("         num = "+b.num);
        b.method2();
    }
}

运行结果:

初始时,count = 0
正在访问静态方法(count++)....
    pre-count = 0
    pst-count = 1

a未操作前,count = 1
         num = 0
正在访问实例方法(count+2,num+3)....
    pre-count = 1
    pre-num = 0
    pst-count = 3
    pst-num = 3

b未操作前,count = 3
         num = 0
正在访问实例方法(count+2,num+3)....
    pre-count = 3
    pre-num = 0
    pst-count = 5
    pst-num = 3

可以看出:

  • 静态变量count是多个对象实例共享的。

  • 实例对象num是多个对象实例私有的。

二、成员变量、局部变量

在java中,成员变量是指在类内方法外定义的变量

而局部变量是指在方法中定义的变量,作用范围是其所在的方法。

public class Student {//这是一个类

    //name和age是成员变量,作用范围是整个类
    private String name;
    private int age;

    public void do(int age) {//这个age是方法的形式参数,是局部变量
        //task是定义在方法do内部的变量,作用范围是do方法内,所以是局部变量
        String task;
    }
}

不同

1、在类中位置不同:局部变量在方法中,成员变量在方法外

2、在内存中位置不同:局部变量在栈内存中,成员变量在堆内存中。

3、生命周期不同:

局部变量随方法的调用而存在,当方法被执行时局部变量被创建,当方法执行完毕出栈,局部变量跟随方法消失

成员变量随对象的存在而存在,当对象被创建之后,成员变量作为对象的属性,会与对象一同被存储在堆内存中,一直到对象消失才跟着消失

4、初始化值不同:

局部变量定义之后,必须主动赋值初始化才能被使用

成员变量作为对象的一部分,当对象被创建后,成员变量会被自动赋默认值(一般基本数据类型赋0,引用数据类型赋null)。

5、作用范围不同:局部变量只在其所在的方法内部生效,成员变量在其所在的整个类中生效

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值