static修饰符
静态的,被static修饰的东西,就是静态的,那么就是属于类的(用类名.静态资源的形式来访问)
在类创建的时候被创建。
1.静态的东西属于类--》导致了 在静态方法中不能使用this关键字
非静态的东西属于对象
2.修饰成员变量:private static int age;
修饰成员方法:public static void
修饰代码块:static{}
类加载时,先执行静态代码块,再非静态,最后构造器。
3.静态代码块和非静态的区别:
静态代码块:在类加载的时候回调一次,只调用一次,(第一次加载类时,执行静态代码块,后续实例对象操纵静态资源,是同一个,且静态代码块不再被调用)
4.static变量和实例变量的区别:
1.)static变量属于类,为所有对象所共享,实例变量是属于对象,每个类的每个实例都有一份,互不干涉。
2)jvm在类加载时已经为static变量分配内存,
而实例变量是在类加载之后创建对象的时候分配内存
3)static变量存在方法区,实例变量存在堆区
4)static变量通过类名.方法名来调用,实例变量通过类名.方法名来调用
5.class Prople{
public static int age;
}
class T{
public static void main(String msg[]){
Prople p1 =new Prople();
Prople p2 =new Prople();
Prople p3 =new Prople();
p1.age++;
System.out.println(p1.age);
p2.age++;
System.out.println(p2.age);
p3.age++;
System.out.println(p3.age);
}
}//结果为 1 2 3(静态成员变量初始化为0)
通过定义一个static int 变量,计算该类被创建了多少次
6.静态方法:
静态方法不能直接调用非静态的资源,
静态方法可以直接调用其他的静态资源,
静态方法中不能使用this/super关键字
[静态方法必须被实现]:静态方法用来表示类的特有的功能,这种功能
的实现不依赖于类的具体实例,也不依赖它的子类。
7. 静态代码块里的变量都是局部变量,只在当前代码块内有效。
静态代码块只能访问类的静态成员,而不允许[直接]访问实例成员。
【静态代码块用来给静态变量赋初始值】。
静态代码块主要用于类的初始化。它只执行一次,并在main函数之前执行。