一、一个类里面的(static变量,方法):类级别,所有new 的对象 全部可以使用。
*所以当.class 文件装入内存后,就可以使用。
二、从值的持久性顺序:
1、static final :刚开始载入这个.class文件时设置,不随新建此类的对象(new)的值变化。
这是一个常量,放入常量池中。
例如: System.out.print("hello");
public final class System {
public final static PrintStream out = null;
}
2、static(类级别):刚开始载入这个.class文件时设置。
如果是类变量和方法:是在内存(堆)中弄一篇区域放入。哪么新建所有的对象(new Person)都可以用。
static final,static的区别:
相同点:1》新建所有对象都可以使用(类级别)。
2》static final ,static 都占内存。
不同点 static final new 一个对象时,不能改变其值
static:new 一个对象时,可以改变其值,保存起来,只要这个类对象活着,就一直存在,供所有对象使用。
3、final(对象级别,在对象初始化时生成值,之后不能修改):随着新建对象时,此值发生变化。
一个类常量:long int id=count++ 表示在一个对象的活着的时候,可以改变它的值,哪么new 一个对象后,就可以随便改变id 值。
final long id1=count++ :表示在一个对象的活着的时候,不希望改变它的值,哪么当new一个对象后,对对象进行初始化,count 加1,,不能用reference去操作这个id1值,可以统计一个类创建多少个对象。
public class test {
static int count=0;
final long i=count++;
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException
{ test t= new test();
System.out.println("objcount:"+t.count+",i:"+ t.i);
test t1= new test();
System.out.println("objcount:"+t1.count+",i:"+ t1.i);
Class t2=Class.forName("test");
test t2_1=(test)t2.newInstance();
System.out.println("objcount:"+t2_1.count+",i:"+ t2_1.i);
Class t3=test.class;
test t3_1=(test)t3.newInstance();
System.out.println("objcount:"+t3_1.count+",i:"+ t3_1.i);
}}
结果:
objcount:1,i:0
objcount:2,i:1
objcount:3,i:2
objcount:4,i:3