static是什么
static是java中的关键字,static表示”全局”、“静态”的意思,用来修饰成员变量和成员方法,定义的变量,我们通常将用static修饰的成员称为静态变量,静态方法或者静态成员。
static的作用
- 被static修饰的成员变量和成员方法独立于该类的任何对象
- static修饰的成员变量和成员方法可以直接通过类名来访问
对上面4条作用的解释并举例说明
1、被static修饰的成员变量和成员方法独立于该类的任何对象
在jvm虚拟机中,被static修饰的成员都存储在方法区中。
方法区:它也叫“静态区”,被所有的线程共享,它包含了所有的static变量。
而不被static修饰的成员我们称为普通变量,这些变量存储于jvm的堆中。
方法区中存放的静态变量不会随着对象的消失而消失,只会在程序结束之后才会被回收。
堆:所有创建的对象都存储在里面,jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身。
举个例子
package staticProblem;
public class Common {
private static String staticStr;
private String commonStr;
public void input(){
System.out.println(staticStr + " " + commonStr);
}
public static void main(String[] args) {
Common.staticStr = "张";
Common common1 = new Common();
common1.commonStr = "三";
common1.input();
Common common2 = new Common();
common2.input();
}
}
运行结果如下:
张 三
张 null
从上面可以看到:
静态变量staticStr并不会随着对象的消失而消失,他还是会存在,而普通变量commonStr存放在堆中,会重新加载。
2、static修饰的成员变量和成员方法可以直接通过类名来访问
举个例子就明白了
代码如下
package staticProblem;
public class Common {
private static String staticStr;
private String commonStr;
public void input(){
System.out.println(staticStr + " " + commonStr);
}
public static void staticInput(){
System.out.println(staticStr);
}
public static void main(String[] args) {
System.out.println("静态方法:");
Common.staticStr = "张";
Common.staticInput();
System.out.println("------------------------");
System.out.println("普通方法:");
Common common = new Common();
common.input();
}
}
运行结果:
静态方法:
张
------------------------
普通方法:
张 null
由结果可知:
加上static关键字的方法成员变量不需要再经过实例化new,这样的操作方便了许多,且性能上也提高了。
总结:
静态变量就像是外面的情侣套房,情侣们给钱就能入住,所使用的床,浴池等等都是一样的,而成员变量就像是一对对进来入住的情侣,他们所带来的与所产生的东西都是不同的,这些物品会随着他们的消失而消失。但是套房里的物品并不会因为他们的离开而消失,而是随着这家酒店宾馆的倒闭而消失。
北京市需要租房或者转租房子,找舍友合租的都可以关注这个公众号哦,可帮忙发布房源信息,上面也有uu发布的转租信息呢。