--static --
1.static修饰成员变量
static修饰成员变量后,成员变量变成类变量,有默认初始值,存在于方法区中,与类的实例无关,一个类的无论有多少实例都是共用方法区中同一个静态变量。访问静态变量可以用类的实例去点,但是不建议,一般都是用类名去点,因为这样可以直观地看出来该变量属于类的静态变量!静态变量从类被创建开始直到整个程序关闭才销毁!注意对于接口中仅能定义静态变量和常量,都是必须声明同时初始化!
2.static修饰方法
static修饰方法,该方法是静态方法,静态方法与实例无关,直接通过类调用。因此静态方法中不可以使用成员变量,因为成员变量属于实例的变量,当然也就不存在this关键字!所以静态方法一般都是工厂方法、工具方法,其运行的结果只与参数有关!
3.static代码块
一个类中,除了声明成员变量、静态变量外还有一个静态代码块,静态代码块加载在方法区中,只在类被加载时执行一次,所以一般用于初始化一些参数或加载一些静态资源!这里要注意非static代码块相当于成员变量,在new一个对象调用构造方法前时执行,并非在类加载时执行玩静态块后执行!
4.static修饰内部类
static还可以修饰成员内部类,成静态类,静态类可以直接用对象实例来访问:OutClass.innerClass in=new OutClass.inner();静态内部类不能访问外部内的成员变量和方法。
--final --
1.final修饰变量
final修饰变量值无法再改变,仍为类的成员变量可以声明同时初始化或者在构造方法中初始化。如果在前面再加上static的话就是常量,常量属于类的变量,常量必须声明同时初始化。常量会在编译时直接替换成常量的值,无需再去加载类来调用,因此运行效率更高!
2.final修饰方法
final修饰方法,方法不可以被重写,主要是为了防止子类不经意的重写。
3.final修饰类
final修饰类,类不可以被继承,这样可以保护类不被继承和修改。