static关键字
静态字段
static 修饰的字段是静态字段、其他的是实例字段
静态字段 属于类(),可以用类名调用
实例字段 在每个对象都有一个副本 不同的对象调用的实例字段不同
static字段值是可以被修改的
class Employee{
//比如后续声明1000个对象e1-e1000
// 这一千个都共用一个nextID
private stativc int nextID = 1;
//但是会有1000个id
private int id;
}
//调用方式
Employee.nextID;
e1.id;
静态常量
final 修饰 常量
static final 修饰静态常量 不可改变
但是对于容器类型的实例变量 不可以修改容器本身,但是容器中存放的对象可以修改
静态方法
静态方法不在对象上执行,它不需要来自实例对象的this隐式变量 由类名直接调用
比如
Math.pow(x,a) 这个用到的参数就是单纯的x和a
静态方法不能访问id实例字段 但是可以访问静态字段
public static int getNextID(){
return nextID;
}
int n = Employee.getNextID;
静态变量和静态方法的作用
static修饰的变量和方法 是共享的,他们在创建对象之前就已经存在,直接用类名调用即可(也可以用对象调用,但是不推荐!)
static方法只能操作static变量和static方法 无法操作实例变量,实例变量和实例方法只能由对象来调用
但是实例方法可以调用static变量和static方法,因为后两者本身就是共享的。
作用在于生成工具类,工具类与对象无关,里面都是静态变量和静态方法。
eg:可以封装一个专门生成验证码的类,在任何时候直接用这个工具类名调用其中的生成验证码的方法即可完成验证码生成功能。
注:工具类只是用于使用,不希望用来创建对象,所以一般搞一个private修饰的私有构造器。防止被用于创建对象。
static代码块
static代码块跟随类一起优先加载一次,自动触发执行,可以用于初始化静态资源
static{
System.out.println("我是跟着类一起加载的,比main方法还早加载")
}