final的意思是最终的,最后的额,不可变的,在java中也具有相似的含义。
final修饰基础数据表示把该数据修饰成常量,意味着不可修改,不可变。
final修饰对象的引用的时候,表示该引用不可变,但是引用的结果是可变的。这里和修饰数组相似,修饰数组的时候数组里边的内容是可变的。
final定义的方法不可被重写,final定义的类不能被继承。
static表示静态的,他修饰的方法和属性归类所有不属于对象,static修饰类的时候只能修饰嵌套类,static修饰的嵌套类可以被类中的静态方法调用,没有被static修饰的嵌套类就是通常所说的内部类。
static修饰的方法中不存在this,因为static修饰的方法不依赖于任何对象就可以访问,既然没有对象,也就没有this。在静态方法中,不能访问类中的非静态成员变量和非静态成员方法,因为他们都要依赖于对象。
需要注意的是,在非静态方法中是可以访问静态成员方法和变量的。
最常用的static方法是main方法,在程序执行的时候没有创建对象,直接通过类名来访问。
还需要记住的是,即使没有显示的声明为static,类的构造器实际也都是静态的。
静态变量被所有的类共享,在内存中仅存在一个副本,也仅在类被初次加载的时候初始化一次。非静态变量归对象所有,在创建对象的时候被初始化,存在多个副本互不影响。
static还有一个重要作用是声明一个静态代码块来优化程序的性能。static块可以存在类的任何地方,在类被初次加载的时候会被执行一次,并且仅此一次,而执行顺序与静态代码块的排列顺序一致。
static关键字不会影响变量和方法的作用域和访问权限,static修饰的是全局变量,因此不能来修饰局部变量。
静态方法和静态变量独立于对象,属于类,但是权限够的情况下,是可以通过对象和this来访问的。