2021.4.27:静态属性与静态方法
在一个class中定义的属性,我们称之为实例属性。实例属性的特点是,每个实例的属性相互独立,互不影响。
1、静态属性
定义
用static关键字修饰的属性
作用
静态属性由所有实例共享,可以通过类名直接访问类的静态属性。
通过一个实例修改静态属性,将会导致所有实例的静态属性的修改。
例子
class Person{ public String name; public int age; public static int number; }
访问
类名.静态属性
原理
在Java程序中,实例对象并没有静态字段。在代码中,实例对象能访问静态字段只是因为编译器可以根据实例类型自动转化为类名.静态字段来访问静态对象。
2、静态方法
定义
用static修饰的方法
特点
- 无法使用this;
- 无法访问实例属性;
- 只能访问静态属性;
调用
类名.静态方法
调用静态方法时不需要实例变量,通过类名就可以调用。静态方法类似其它编程语言的函数。
作用
- 对静态属性进行操作(非主要作用,因为可以直接对静态属性进行操作)
- 工具类:
Arrays.sort(); Math.random();
- 辅助方法,例如Java程序入口main方法
3、接口的静态属性
接口中不能有实例属性,但是可以有静态属性,并且静态属性必须用final static修饰,即不允许修改的静态属性。
public interface Person{ public static final int MALE=1; public static final int FEMALE=2; }
修饰符public static final三者的顺序随意。
实际上,由于interface的字段只能是public static final类型,所以我们可以把这些修饰符都删去:
public interface Person{ //编译器会自动加上public static final: int MALE=1; int FEMALE=2; }
编译器会自动把该字段变为public static final
总结
- class中的字段(属性和方法)有两种:实例字段和静态字段——实例字段:每个实例中不同;静态字段:一个类所有实例的共有字段,修改一个等于修改全部;
- 静态字段用static修饰,通过类名.字段访问;
- 静态方法中无法用this,无法访问实例属性,只能访问静态属性;
- 静态方法的三种作用:
- 对静态属性进行操作;
- 工具类的常用方法,比如Math.random();
- main方法
- 接口中不能有实例属性,但是可以有静态属性,且必须用final static修饰,说明初始化后不能进行修改,由于接口中的属性只能是用public final static修饰的,所以这些属性可以像抽象类中的一般抽象方法(用public abstract修饰)一样,不写前缀,但在编译时仍会自动加上前缀
public interface A{ int MALE=1;//相当于public final static int MALE=1; }