static关键字
场景
创建类的时候,就是在描述类的对象的外观和行为,除非new创建类的对象,否则没有获得任何对象。执行new创建对象,数据存储空间(new对象在堆中)才会分配,其方法才能供外面调用。
但是,两种情况上述方法无法解决
- 只想为某个特定域分配单一存储空间,而不考虑创建对象(static属于静态变量,位于方法区中)
- 希望某个方法不与包含他的那个类的任何实例对象关联在一起,也就是没有对象也能调用(static可以使用类名调用)
示例
public class Demo {
int id;
static int sid;
public void a() {
System.out.println ("---------a");
System.out.println (sid);
System.out.println (id);
}
//1.static和public 是修饰符,并列的没有先后顺序,先写谁都可以
static public void b() { //sid 是先于对象加载的
// a();//3.在静态方法中不能访问非静态方法
System.out.println ("---------b");
System.out.println (sid);
// System.out.println (id);//2.在静态方法中不能访问非静态的属性
// System.out.println (this.id);//4.在静态方法中不能使用this关键字
}
public static void main(String[] args) {
Demo d = new Demo();
// Demo.a();//5.非静态的方法可以用对象名.方法名去调用,不能用类.方法名
d.a ();
Demo.b ();//6.静态的方法可以用对象名.方法;类名.方法名(推荐)去调用
d.b ();
b();//在同一个类中可以直接调用
}
}
总结
虽然static作用于某个字段时,肯定会改变数据创建的方式(因为一个static 字段对每个类来说只有一份存储空间,而非static字段则是每个对象有一个储存空间)static方法重要用法是在不创建任何对象的前提下就可以使用它。
- 以上内容是基于——《java编程思想》总结的,学习加深在进行补充 。