静态域与静态方法

静态域与静态方法

静态域

如果将域定义为static,每个类中只有一个这样的域,这个类的所有对象将共享这个域,这个域称为静态域。
这个域属于类,而不属于任何独立的对象。

静态常量

静态常量使用得比较广泛,在C++中用关键字static const定义,在java中用关键字static final定义。
在java中,final修饰符大都应用于基本类型域或不可变类的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类)。
例如,在Math类中定义了一个静态常量:

public class Math
{
    ...
    public static final double PI = 3.1415926;
    ...
}

在这个程序中,可以使用类名.常量名(Math.PI)的形式获得这个常量,而如果关键字static被省略,PI就便国恒了Math类的一个实例域而非静态域,必须用对象名.常量名获得。

静态方法

静态方法是一种不能向对象实施操作的方法。

例如:我们常用的Math类中的pow方法(求幂)就是一个静态方法,表达式:Math.pow(x,a)。

在运算时,不适用任何Math对象,没有任何隐式参数。
静态方法也不能访问实例域,因为它不能操作对象。但是,静态方法可以访问自身类中的静态域。

栗子

代码
package StaticTest;


public class StaticTest {
    public static void main(String[] args) {
        //fill the staff array with three employee objects
        Employee[] staff = new Employee[3];

        staff[0] = new Employee("Tom", 40000);
        staff[1] = new Employee("Dick", 60000);
        staff[2] = new Employee("Harry", 65000);

        //print out information about all Employees objects
        for(Employee e : staff) {
            e.setId();
            System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary=" + e.getSalary());
        }
        int n = Employee.getNextId();  //call static method
        System.out.println("next avilable id=" + n);
    }

}
class Employee{
    private static int nextId = 1;   //类域,不属于任何一个对象,可以通过类名访问

    private String name;
    private double salary;
    private int id;

    public Employee(String n, double s) {
        name = n;
        salary = s;
        id = 0;
    }

    public String getName() {
        return name;
    }
    public double getSalary() {
        return salary;
    }
    public double getId() {
        return id;
    }

    public void setId() {
        id = nextId;  //set id to next available id
        nextId++;
    }

    //静态方法
    public static int getNextId() { 
        return nextId;  //return static field
    }

    public static void main(String[] args) {
        Employee e = new Employee("Herry", 50000);
        System.out.println(e.getName() + " " + e.getSalary());
    }
}

运行结果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/lyn_00/article/details/81454847