请你谈谈对Java-static关键字的理解

1 从JVM的角度

方法区是所有线程共享的内存区域,它用于存储已被Java虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
在这里插入图片描述

package com.zs.entity;

public class People {
    // 静态变量
    static String firstName;
    // 成员变量
    String lastName;
    // 成员方法
    public void showName_1() {
        System.out.println(firstName + lastName);
    }

    // 静态方法:
    public static void showName_2() {
        // Non-static field 'lastName' cannot be referenced from a static context ? 这里给出原因:
        // 类变量是在准备阶段完成内存分配与初始化的,而实例变量是在(下一个阶段)初始化阶段
        System.out.println(firstName + lastName);
    }

    // 静态方法
    public static void showName_3() {
        System.out.println(firstName);
    }

    public static void main(String[] args) {
        People people_1 = new People();
        People.firstName = "zhao-";
        people_1.lastName = "instance";
        people_1.showName_1(); // zhao-instance

        People.showName_3(); // zhao- 这里:类直接访问静态方法

        People people_2 = new People();
        people_2.showName_1(); // zhao-null 这里引出一个问题:对象的实例变量(people_1.lastName = "instance";)是对象私有的,不能被其他实例对象共有。

    }
}

特点:

1static是一个修饰符,用于修饰成员:(成员变量,成员函数)static修饰的成员变量称之为静态变量或类变量。
2static修饰的成员被所有的对象共享。
3static优先于对象存在,因为static的成员随着类的加载就已经存在。
4static修饰的成员多了一种调用方式,可以直接被类名所调用,(类名.静态成员)5static修饰的数据是共享数据,对象中的存储的是特有的数据。

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

1、生命周期的不同:
成员变量随着对象的创建而存在随着对象的回收而释放;
静态变量随着类的加载而存在随着类的消失而消失。
2、调用方式不同:
成员变量只能被对象调用。
静态变量可以被对象调用,也可以用类名调用。推荐用类名调用
3、别名不同:
成员变量也称为实例变量。
静态变量称为类变量。
4、数据存储位置不同:
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值