(1)static关键字:
1》类变量/静态变量
在系统加载其所在类时分配空间并初始化,创建该类的实例对象时不再分配空间,所有实例共享类的静态变量。
2》类方法/静态方法
静态方法通过类名而不是通过实例对象进行访问。注意2点:
1.因为不是通过实例对象进行调用的,所以在静态方法中没有this指针,不能访问非静态变量和方法,只能访问方法体内的局部变量,自己的参数和静态变量。
2.子类不能重写父类的静态方法,但在子类中可以声明与父类静态方法相同的方法,从而将父类的静态方法隐藏。另外子类不能把父类的非静态方法重写为静态的。
class ClassA
{
public void methodOne(int i){}
public void methodTwo(int i){}
public static void methodThree(int i){}
public static void methodFour(int i){}
}
class ClassB extends ClassA
{
public static void methodOne(int i){}//错误,不能将非静态重写为静态
public void methodTwo(int i){}//正确,重写
public void methodThree(int i){}//错误,不能重写ClassA中的静态方法
public static void methodFour(int i){}//正确,将methodFour方法隐藏
}
静态初始化程序
不属于任何方法体并且以static关键词修饰的语句块,成为静态语句块。在加载该类时只执行一次。
class StaticDemo
{
static int i;
static
{
i=5;
System.out.println("Static code:i="+i);
}
}
public class TestStaticInit
{
public static void main(String args[])
{
System.out.println("Main code:i="+StaticDemo.i);
}
}
输出结果:
Static code:i=5;
Main code:i=6;
(2)final关键词
1.在类的声明时使用:final class 类名 阻止被继承。
2.在成员方法中使用:final type function(){} 阻止被重写。
3.在成员变量声明中使用:该变量一经赋值则不能被改变,声明final变量并同时赋初值来定义常量,一般大写
final int PI=3.14;
如果在声明时没有赋值,则在所属类的每个构造函数中都必须对该变量赋值。
如果未赋初值的final变量是局部变量,则可以在所属方法体的任何位置对其赋值,但只能赋一次。