一、static关键字是什么?
static(静态的)修饰的代码属于类,定义的变量存储在方法区的静态常量池当中(类信息存储在方法区)是被所有该类产生的对象所共享的。
我们来看以下代码:
1、不使用static关键字
public class A {
public String name = "alan";//变量和方法都没有static修饰
public void run() {
System.out.println("跑得很快");
}
public void flay(){
System.out.println("飞得很高");
}
}
public class TEST {
public static void main(String[] args) {
A a = new A();
a.run();
a.flay();
a.name = "xxx";
System.out.println(a.name);
}
}
运行结果:
跑得很快
飞得很高
xxx
在class TEST中只能创造对象来进行调用
让我们看一下堆栈内存图
方法区存储的是类的信息,但是,这些信息并没有自己独立的内存空间(以信息的形式存储在方法区当中)
2、使用static关键字
public class A {
public static String name = "alan";
public static void run() {
System.out.println("跑得很快");
}
public static void flay(){
System.out.println("飞得很高");
}
}
输出结果:
跑得很快
飞得很高
xxx
跑得很快
飞得很高
aaa
这里我们发现,一旦加入static关键字,我们能用类名进行直接调用
堆栈内存图:
当然,我们也可以用对象来进行调用,因为类是对象的模板,类可以对应多个对象,多个对象共享类的变量和属性。
二、Java为什么设计static关键字
所以static关键字本质就是帮助我们用类来调用方法和属性
如果没有static关键字,类是不可以调用自己的属性和方法的,只能对象去调用