一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。
一、定义
static关键字表示是“静态”的意思,可以用于修饰成员属性、成员方法、代码块和内部类。《Java编程思想》中的写到:
“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”
二、用法
static主要作用于,创建独立于具体对象的属性或者方法,只要类被加载,就能通过类名来访问静态属性或者静态方法了。
- static修饰成员变量-静态变量
- static修饰成员方法-静态方法
- static修饰代码块-静态代码块
- static修饰内部类-静态内部类
package com.java.yanf.base;
import lombok.Data;
@Data
public class Girl extends Person {
//实例变量
private String finger;
//静态变量
private static String sex = "female";
//静态代码块
static {
System.out.println("静态代码块加载完毕~");
}
public Girl() {
}
public Girl(String finger) {
this.finger = finger;
}
/**
* 静态方法
*/
static void hi() {
//静态方法里面不能调用实例方法 hello(),不用使用给静态变量finger;
System.out.println("hi, " + Girl.sex);
}
/**
* 实例方法
*/
void hello() {
//实例方法可以调用静态方法,但是静态方法中无法调用实例方法。
hi();
System.out.println("hello, " + finger + " finger " + Girl.sex);
}
public static void main(String[] args) {
//静态方法无需new对象,可以直接通过类名.静态方法()进行调用
Girl.hi();
Girl girl = new Girl("pink");
//实例方法必须实例化类对象后使用
girl.hello();
}
}
三、总结
- 静态变量和静态方法在内存中只存在一份,因为类只加载一次,加载类时,将静态方法和静态变量加载到方法区。
- 如果某个类型的所有对象的某个属性是一样的,可以将此相同的属性定义成静态属性,避免浪费内存空间。
- 类中的常量经常被定义为静态的。
- 静态方法不能被重写。
- 静态资源的加载顺序是严格按照静态资源的定义顺序来加载的。