Java类变量和实例变量

0.写在开头

最近在回顾Java类和对象相关的知识,发现在类变量的定义这里有的地方说法不一样,在此写一些自己的思考,如有不对欢迎指正。
在15版本的机器工业出版社Java语言程序设计这本书中提到,一个类的实例变量和静态变量称为类变量(class's variables)或数据域(data field)
另外一种说法是类变量特指静态变量,是一种用static关键字修饰的实例变量
最近的资源关于类变量的定义普遍以后者为多(可能之前的书都是老古董了?)

1. 类变量

类变量,也叫静态变量,是指在类中以static 关键字定义的变量。与实例变量不同,类变量属于类本身,而不是类的每个实例。换句话说,类变量在整个程序执行过程中只有一份拷贝,而且可以被该类的所有实例共享。

类变量的定义方式为:

public class MyClass {
    public static int count; // 类变量
    // ...
}

在上面的代码中,我们定义了一个名为 count 的类变量,它属于 MyClass 类本身,而不是 MyClass 的实例。因此,我们可以在不创建 MyClass 的实例的情况下访问 count 变量。

类变量可以通过类名直接访问,也可以通过实例名访问。以下是示例代码:

public class Main {
    public static void main(String[] args) {
        MyClass.count = 10; // 通过类名访问类变量
        MyClass obj = new MyClass();
        obj.count = 20; // 通过实例名访问类变量
        System.out.println(MyClass.count); // 输出 20
        System.out.println(obj.count); // 输出 20
    }
}

在上面的示例代码中,我们通过类名和实例名分别访问了类变量 count,并将其值设置为 10 和 20。最后,我们输出了count的值,得到的结果都是 20,这是因为类变量被所有实例共享。

2. 实例变量

实例变量是指定义在类中,但不以static 关键字定义的变量。每个类实例都有自己独立的一份实例变量,它们的值也是相互独立的。

实例变量的定义方式如下:

public class MyClass {
    public int count; // 实例变量
    // ...
}

在上面的代码中,我们定义了一个名为 count 的实例变量,它属于 MyClass 的每个实例而不是 MyClass 类本身。

与类变量不同,实例变量必须通过实例名来访问,而不能通过类名来访问。以下是示例代码:

public class Main {
    public static void main(String[] args) {
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();
        obj1.count = 10; // 设置 obj1 的实例变量 count 的值为 10
        obj2.count = 20; // 设置 obj2 的实例变量 count 的值为 20
        System.out.println(obj1.count); // 输出 10
        System.out.println(obj2.count); // 输出 20
    }
}

在上面的示例代码中,我们分别创建了两个MyClass类的实例 obj1 obj2,并将它们的实例变量count的值分别设置为1020。最后,我们通过实例名访问了count变量,并输出了它们的值。

需要注意的是,实例变量的作用域是整个类,但它们的生命周期是随着对象的创建和销毁而动态改变的。因此,在不同的实例中,同名的实例变量可以具有不同的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值