学而实习之 不亦乐乎

Java 中的静态类和枚举

2024-01-21 21:33:23

一、静态成员

对静态成员最简单的解释,静态成员属于整个类而不属于某个对象,所以又叫做类变量。一个类不管创建多少个实例对象,静态变量在内存中有且只有一个(调用方法用类名调用)。

通常的非静态变量称为实例变量,只有实例化后才可使用。

类似于静态变量,在类装载时被载入内存,不会自动销毁,不用实例化,且静态方法不能被重写。

静态方法只能访问类中的静态变量和静态方法不能访问实例变量和实例方法(因为静态方法在java虚拟机中在对象之前被加载,如果静态方法要访问实例变量或者方法可能其还没被创建),如果要想使用实例变量和方法可在静态方法中直接创建其实例化的对象。

二、枚举

枚举(enum)表示可以计数的一种类型,列举一个遍历枚举类的方法:

public enum Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday;
}

public class Test {
    public static void main(String[] args) {
        for(Day d:Day.values()) {
            System.err.println(d.toString());
        }
    }
}

三、选择

使用枚举类型的性能要优于静态类,但在使用时,还是应该根据实际情况进行合理的选择。

四、实例

public enum personGender {
    Male,
    Female;
}

public class Person {
    private String name;
    private int age;
    private personGender gender;

    //静态国籍变量
    private static String nation;

    //set方法
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setGender(personGender gender) {
        this.gender = gender;
    }

    public static void setNation(String nation) {
        Person.nation=nation;
    }

    //get方法
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public personGender getGender() {
        return gender;
    }

    //show方法
    public static void show() {
        Person person = new Person();
        person.setName("lemon");
        person.setAge(20);
        person.setGender(personGender.Male);
        System.err.println(String.format("姓名=%s,性别=%s,年龄=%d,国籍=%s", person.name,person.gender,person.age,nation));
    }
}

public class client {
    public static void main(String[] args) {
        //静态成员属于整个类而不是某个对象,所以这里应该用Person调用
        Person.setNation("CHINA");
        Person.show();
    }
}

运行结果:

姓名=lemon,性别=Male,年龄=20,国籍=CHINA