1 类变量的初始化
package com.mingrsoft;
publicclass StaticInitTest {
staticintcount = 2;
static
{
System.out.println("StaticInitTest静态初始化块");
name = "java编程";
}
static String name="世界您好";
publicstaticvoid main(String[] args)
{
System.out.println("name="+name);
}
}
运行结果
代码分析
name是静态变量,也叫做类变量,类变量属于这个类的,特点如下:
1 所有对象共享这个变量,某个对象修改以后,其他对象会得到修改后的值
2 类加载就同时为这个变量分配了内存空间,不是要生成对象才可以
3 因为static代码块也是类加载时候同时执行的,所以name可以放在定义之前赋值
剖析程序的运行点滴过程和内存分配
2.1.3 程序运行内存分配和对象的内存控制
package com.zou;
class Price
{
finalstatic Price INSTANCE = new Price(2.8);
staticdoubleinitPrice = 20; //先分配变量内存,后来才一步一步赋值!切记一步一步 ! 背下来
doublecurrentPrice; //数形结合分析程序运行方式和每一步运行结果
public Price(double discount)
{
currentPrice = initPrice - discount;
}
}
publicclass PriceTets {
publicstaticvoid main(String[] args)
{
System.out.println(Price.INSTANCE.currentPrice); //结果是-2.8 = 0.0-2.8
Price p= new Price(2.8);
System.out.println(p.currentPrice);
}
}
运行结果:
-2.8
17.2
2.1 实例变量和类变量
1 局部变量:
1) 形参 :随着方法的结束而结束,调用者为其赋值!
2)方法内局部变量,必须要显示初始化赋值
3)代码块中局部变量,必须显示初始化
以上变量全部存在方法栈内存中,这些变量都和方法或者代码块有关系!
static 关键字
类变量的运行机制
1 类变量属于java类的本身,不属于每个对象的,每个程序运行所以只初始化一次!
2 类变量又叫静态成员变量!它不需要创建对象就可以已经在内存中存在了。
3 用static修饰,就是告诉jvm这个变量的内存空间在静态存储区内开辟,而不是在栈内存里面!
4 当Java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存。但是,类中的类变量,在该类被加载到内存时,就分配了相应的内存空间。如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内存空间直到程序退出运行,才释放所占有的内存。Java语言允许通过类名直接访问类变量。