static关键字
表示静态,java中一个修饰符,可以修饰成员方法,成员变量
情景一:
静态变量特点:
- 被该类所有对象共享----如上述teachername
- 不属于对象,属于类
- 随着类的加载而加载,优先于对象存在
调用方式: 类名调用(推荐) 对象名调用
explain:
- main方法加载进栈
Student.teacherName=”阿玮老师”;这行代码涉及到了Student这个类
所以会将Student的字节码文件加载到方法区做临时保存
因为teachername被static修饰,是一个静态变量,在jdk8之后会在堆内存中开辟一个空间将其存放,名为静态区(存放静态变量)---jdk8之前静态区是在方法区里
注意:这时候还没有new关键字,堆内存里没有对象
静态变量是随着类的加载而加载的,优先于对象出现
3.在栈里定义一个变量s1,在堆里创建一个student对象
4.赋值
静态方法的特点:
- 多用在测试类和工具类
- Javabean类中很少使用
调用方式: 类名调用(推荐) 对象名调用
Javabean类:用来描述一类事物的类.例如:Student,Teacher类等
测试类:带有main方法的类,程序的主入口(用来检验其他类书否书写正确)
工具类:不是用来描述事物的,而是帮我们做一些事情的类
创建工具类的要求:
- 类名见名知意
- 私有化构造方法--不让外界创造其对象,因为工具类不是描述一类事物的,创建了没意义
- 方法定义为静态--方便调用
情景二:
工具类类似于方法的定义和调用
static注意事项:
- 静态方法中,只能访问静态
- 非静态方法可以访问所有
- 静态方法中没有this关键字
在成员方法中有一个隐藏的this(这个this代表方法调用者的地址值)
在调用成员方法时,这个this是虚拟机自动赋值的
为什么静态方法中没有关键字:
static所修饰的是共享的,跟对象无关,所以不用加this