凡事用static修饰的内容,具有以下几个共性:
- 1、与类有关,与对象无关;
- 2、一定会在加载期有特殊动作;
public class Student {
/*
* 如果属性没有static修饰,那么我们称之为“对象属性”;
* 如果属性有static修饰,那么我们称之为“静态属性” 或 “类属性”。
*
* static修饰的属性在内存上没有存放在每个对象身上,所以不是一个
* 对象一个属性!而是全类共享一个!!!存放在数据段的静态区当中,
* 而且只有一个。
*
* static修饰符的属性由于与对象无关,所以可以直接使用类名进行访问,
* 不用产生对象。
* static修饰的属性是在加载期的时候产生,并完成初始化。
*
* 使用结论:
* 1、只有全类(不管多少个对象)共享唯一值的属性,我们才能定义成
* static修饰的;
*
* 2、常量属性不用动脑袋,直接定义为static的;
* 由于常量值是不可更改,每个对象的这个值都是一样的,没有必要
* 在每个对象身上存储一份,设计为static,全类共享即可;
*
* 3、static修饰的属性可以直接使用"类名."的方式访问,当然也可以用
* "对象."的方式;但是非static修饰的属性,只能用"对象."的方式
* 访问;
*
*
*/
```java
public static String name;
public int age;
public static final int FEE = 19200;
/*
* 构造方法不能使用static关键字进行修饰
* 构造方式的作用是产生对象,所以与对象密切相关,
* 不符合static的特性。
*/
public Student() {
}
/*
* 1、用static修饰的方法可以直接用"类名."的方式访问,当然也可以用
* "对象."的方式访问;
* 2、静态方法不能访问本类的非静态属性,当然也不能调用本类的其他非静态方法;
* 非静态方法可以访问本类的静态属性,或调用本类的静态方法;
* 3、在加载期,会首先加载一个类的静态方法,然后再加载非静态方法;
* 4、通常我们只把工具类的工具方法设计为static的。
* 什么是工具类的工具方法呢?
* 该方法的调用与对象无关,或是不改变执行对象的状态属性。
*/
public void test() {
}
public static void study() {
}
}