java关键字static和final

static可以修饰变量,方法或者类(普通类是不能用static修饰的,只能用来修饰内部类)

  static静态变量又称之为类变量(和c++中的全局变量概念是一样的),在类加载后,jvm只为类变量分配一次内存,内存中只有一份,静态变量可以直接通过类名访问(当然也可以通过实例对象访问);与静态变量对应的是实例变量,每次实例化对象,内存中就会有一份拷贝,所以在内存中可以存在该实例变量的多份拷贝。

      static int a=10; 

      String b="abc";

      static Object o=new Object();

  

  static静态方法又称之为类方法(与之对应的是实例方法),静态方法只能访问类的静态变量,不能访问类的实例变量【这个时候非静态成员变量都还不存在(他是伴随着对象的创建而创建的),根本无法访问】。

  static静态块:类似于static{ code }的模块,该模块会在类加载的时候最先被执行。

final可以修饰变量,方法或者是类

  final变量一旦初始化,就不能修改,final变量在编译时就已经明确它的值(只限于基本数据类型),所以可以将一些已经明确的值定义成final,以减小运行时的负担。如果是非基本数据类型用final修饰,那final是引用不变,但是对象里面的属性是可以改变的。

  final方法,final方法不能被重写,所以用final可以锁定某一方法,防止子类继承修改。另外,final方法类似于c++内联函数,可以提高执行效率(但是这种方式牺牲了空间,不建议大量使用final方法)。

  final修饰的类不允许被继承(在final里面,方法默认是final的),如果不想某一个类被继承,可以将该类改成final的。