[论文]Java static关键字
Java static关键字与静态块
一.static修饰符
static 修饰符能够与属性、
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
和内部类一起使用,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示是静态的。
类中的静态变量和静态方法能够与类名一起使用,不需要创建一个类的对象来访问该类的静态成员。所以static修饰的变量又称作类变量。这与实例变量不同。实例变量总是用对象来访问,因为它们的值在对象和对象之间有所不同。
下列示例展示了如何访问一个类的静态变量:
class StaticModifier {
static int i = 10;
int j;
StaticModifier() {
j = 20;
}
}
public class Test {
public static void main(String args[]) {
System.out.println(类变量 i= + StaticModifier.i);
StaticModifier s = new StaticModifier();
System.out.println(实例变量 j= + s.j);
}
}
上述程序的输出是:
类变量 i=10
实例变量 j=20
二.static属性的内存分配
在上面的例子中,无需创建类的对象本溪娱乐棋牌q07i5.org即可访问静态变量 i。之所以会产生这样的结果,是因为编译器只为整个类创建了一个静态变量的副本,因此它能够用类名进行访问。也就是说:一个类中,一个 static 变量只会有一个内存空间,虽然有多个类实例,但这些类实例中的这个static 变量会共享同一个内存空间。示例如下:
public class Test {
public static void main(String[] args) {
UserModel um1 = new UserModel();
um.userName = 张三;
um.country = china;
UserModel um2 = new UserModel();
um2.userName = 李四;
um2.country = 中国;
System.out.println(um1.userName== + um1.userName + um1.country== + um1.country );
System.out.println(um2.userName== + um2.userName + um2.country== + um2.country );
}
}
class UserModel {
public static String country
public String userName;
}
运行结果:
um1.userName==张三 um1.country==中国
um2.userName==李四 um2.country==中国
为什么会是一样的值呢,就是因为多个UserModel 实例中的静态变量country 是共享同一内存空间,um1.country 和 um2.country 其实指向的都是同一个内存空间,所以就得到上面的结果了。
在对象um2创建前的运行后内存分配示意图如下:
在对象um2创建后的运行后内存分配示意图如下:
要想看看是不是 static 导致这样的结果,你可以尝试去掉country前面的 static,然后再试一试,看看结果,应该如下:
um1.userName==张三 um1.country==china
um2.userName==李四 um2.country==中国
还有一点也很重要:static 的变量是在类装载的时候就会被初始化。也就是说,只要类被装载,不管你是否使用了这个static 变量,它都会被初始化。