Java之实例成员与类成员

一:实例变量和类变量

类体中的成员变量可细分为实例变量和类变量。用关键字static修饰的称作类变量,否则称为实例变量。例如:

class Dog{

float x;    //实例变量

static int  y;    //类变量

}

实例变量与类变量的区别: ①不同对象的实例变量互不相同,也就是说分配给不同对象的实例变量占有不同的内存空间,改变其中一个对象的实例变量不会影响其他对象的实例变量。②所有对象共享类变量,即分配给这些对象的这个类变量占有相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量。③类变量是属于该类的,在类被加载到内存时就为类变量分配了相应的内存空间,故,可通过类名直接访问类变量。

class Factory {
    int value = 0;
    int limit = 0;
    static int step = 2;    //step为类变量
    
    void increat(){
        value++;
        if(value == limit){
            value = 0;
        }
    }
    
    int getValue(){
        int i;
        return value;
    }
}
public class Lei {
    public static void main(String[] args) {
        //声明两个对象d1,d2
        Factory d1 = new Factory();
        Factory d2 = new Factory();
        System.out.println(d1.getValue());//输出结果为0
        System.out.println(d2.getValue());//输出结果为0
        System.out.println(d1.step);//输出结果为2
        System.out.println(d2.step);//输出结果为2
        d1.increat();//对d1进行了++
        d1.step = 3;//对d1的step进行了赋值
        System.out.println(d1.getValue());//d1的值变成了1
        System.out.println(d2.getValue());//d2的值没有变,依然为0
        System.out.println(d1.step);//d1.step的值变成了3
        System.out.println(d2.step);//d2.step的值也变成了3!
        //这也就说明了,一个对象里的类变量改变,其他对象里的对应的类变量也会改变

        //对于类变量,可以直接用类名来访问而不用创建对象
        Factory.step = 5;
        System.out.println(Factory.step);
    }
}

二:实例方法和类方法

方法类型前不加关键字static修饰的为实例方法,加static关键字修饰的是类方法。

区别:①要用对象调用实例方法。②可以用对象调用类方法,也可以用类名调用类方法,也就是说不必创建对象就可以直接调用类方法(创建对象会导致类中的实例变量被分配内存空间)。

    原文作者:H孩纸D
    原文地址: https://blog.csdn.net/weixin_42227243/article/details/82818782
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞