static(静态)
static可以修饰方法,属性,自由块和内部类
使用static修饰这些成员,可以理解成与类相关。通过“类名.成员”的形式调用,
没有static修饰可以理解这些成员与对象相关,可以通过“对象名.成员”的形式调用
注意:static不能用来修饰构造方法
1.static修饰方法 如:main方法
main()是java引用程序的主入口方法,在该方法前添加static修饰表示该方法与类相关,java解析运行时将会
寻找该方法,之所以将main()定义成类相关,解析器调用该方法时,还没有创建当前的对象,因此不能定义成
与对象相关的方法。
注意:static修饰方法中,不能调用没有stataic修饰的方法和属性,也不能使用this和super。
2.static修饰属性。
静态属性具有static方法的特点外,还有一个主要的特征就是:静态属性被当前类中多个对象共享时,
一个对象修改对象的值后,会影响其他对象。
public class Test{
public static int count=0;
public Test(){
count++;
}
public static void main(String[] args){
Test t1=new Test();
system.out.println(t1.count);
Test t2 = new Test();
system.out.println(t2.count);
}}
输出的结果是1和2.
上例子中,count是一个静态变量,因此t1和t2共享count.当创建t1对象时,构造方法将count加1,
当再次创建t2对象时,count在次基础上在加1。
3.static修饰自由块
自由块是放在{}括起来的代码段,自由块中的代码在构造方法之前执行,因此可以将一部分初始化代码放在自由块中。
当使用static修饰自由块时,自由块江变成静态自由块,通常用于初始化静态变量,静态自由块与类相关,因此只要类加载,
即使没有对象也会执行,静态自由块无论创建几个对象,仅执行一次。
public class Test{
private static int i;
static{
system.out.println("静态自由块");
i++;
}
public void show(){
system.out.println(i);
}
public static void mian(String[] args){
Test t1 = new Test();
t1.show();
Test t2 = new Test();
t2.show();
}
}
创建两个对象时,静态自由块也是执行一次。