java类变量(static变量)

本文详细介绍了Java中的类变量(静态变量)和静态方法,包括它们的定义、内存布局、访问方式、生命周期以及与实例变量的区别。类变量用于多个对象共享数据,而静态方法则适用于不需实例化即可使用的工具方法。
摘要由CSDN通过智能技术生成

类变量(静态属性)

static关键字可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属于某个对象的。既然属于类,就可以不用创建对象来调用。
static修饰的内容是随着类的加载而加载的,且只加载一次,存储于一块固定的内存区域(静态区),可以直接被类名调用,它优先于对象存在,可以被所有对象共享。

一、类变量-提出问题

有一群人在玩游戏,不时有新的人加入,请问如何知道现在有多少人解决

传统方法:

1、main方法定义一个count

2、有人加入就count++

package com.lmdedu.static_;

public class ChildGame {
    public static void main(String[] args) {
        //定义一个变量count,统计多少人加入
        int count = 0;
        Child child1 = new Child("白骨精");
        child1.join();
        count++;
        Child child2 = new Child("狐狸精");
        child2.join();
        count++;
        Child child3 = new Child("老鼠精");
        child3.join();
        count++;
        System.out.println("共有" + count + "人加入游戏");
    }
}

class Child{
    private String name;

    public Child(String name) {
        this.name = name;
    }

    public void join(){
        System.out.println(name + "加入游戏");
    }
}

但问题是

1、count是一个独立于 对象  的变量,

2、以后在访问count很麻烦,没有用到OOP

3、所以引出    类变量/静态变量

二、类变量快速入门

 

package com.lmdedu.static_;

public class ChildGame {
    public static void main(String[] args) {
        //定义一个变量count,统计多少人加入
        int count = 0;
        Child child1 = new Child("白骨精");
        child1.join();
        child1.count++;

        Child child2 = new Child("狐狸精");
        child2.join();
        child2.count++;

        Child child3 = new Child("老鼠精");
        child3.join();
        child3.count++;

        //类变量可以通过类名直接访问,   类.变量   不是传统的 对象.变量
        System.out.println("共有" + Child.count + "人加入游戏");//3
        //三个Child类对象共享 count变量
        System.out.println("共有" + child1.count + "人加入游戏");//3
        System.out.println("共有" + child2.count + "人加入游戏");//3
        System.out.println("共有" + child3.count + "人加入游戏");//3
    }
}

class Child{
    private String name;
    //定义一个变量count,是一个类变量(静态变量) static静态
    //该变量最大的特点就是会被Child类的所有对象  共享
    public static int count = 0;

    public Child(String name) {
        this.name = name;
    }

    public void join(){
        System.out.println(name + "加入游戏");
    }
}

 

三、类变量内存布局

 当new了两次Child对象时内存布局:

不管static变量在哪里,static变量是同一个类的所有对象共享的
static是在类加载的时候就生成的 

四、什么是类变量

static关键字修饰成员变量时,该变量称为类变量,也叫做静态变量静态属性。该类的每个对象都共享同一个类变量的值。任何一个该类的对象都可以访问到同一个值;修改该类变量值的时候,修改的也是同一个值;也可以在不创建该类的对象的情况下对类变量进行操作。

静态变量的访问修饰符的访问权限和范围和普通属性是一样的 

// 定义语法:
访问修饰符 static 数据类型 变量名;	// 推荐使用
static 访问修饰符 数据类型 变量名;
// 举例:
public static int count = 0;

// 访问语法:
类名.静态变量名	// 推荐使用
对象名.静态变量名
// 举例:
int childCount = Child.count;

五、类变量细节 (重点)

(1) 当需要让某个类都共享一个变量的时候,就可以考虑使用静态变量
.
(2) 静态变量是该类的所有对象共享的,而实例变量是每个对象独享的
.
(3) 加上static关联字的变量称为类变量/静态变量,否则称为实例变量/普通变量/非静态变量
.
(4) 类变量可以通过类名.类变量名或者对象名.类变量名来访问,但Java的设计者更推荐使用    类名.类变量名    来访问

(5)实例变量不能通过  类名.类变量名 来访问

(6)类变量是在类加载的时候就生成的 ,无需创建对象来使用

(7)类变量的生命周期是随着类的加载开始的,随着类消亡而销毁

类方法(静态方法)

一、定义

当 static 修饰成员方法时,该方法称为类方法 。静态方法在声明中有 static ,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。

静态方法的好处:当我们不希望创建实例,也可以调用某个方法(即当作工具来使用),这时将方法做成静态方法  非常方便

静态方法的访问修饰符的访问权限和范围和普通方法是一样的

// 定义语法:
访问修饰符 static 数据返回类型 方法名() { };	// 推荐使用
static 访问修饰符 数据返回类型 方法名() { };
// 举例:
public static int getPersonCount() {...};

// 访问语法:
类名.静态方法名(形参列表); 	// 推荐使用
对象名.静态方法名(形参列表); 
// 举例:
int count = Person.getPersonCount();

 二、类方法(静态方法)细节

口诀:静态方法        只能访问静态成员,   不能访问非静态成员

           非静态方法既可以访问静态成员,也可以访问非静态成员

   但是也要遵守访问权限

(1) 类方法和普通方法都是随着类的加载而加载的,将结构信息存储在方法区,所以类方法中没有并且不能使用this和super,而普通方法是有this参数的
.
(2) 类方法可以通过类名调用,也可以通过对象名调用
.
(3) 类方法只能访问类变量和类方法
.
(4) 类方法不能直接访问 普通成员变量或成员方法,可以在类方法中创建自己类对象进行调用
.
(5) 成员方法可以直接访问类变量或类方法

练习

 

 

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值