static关键字

可以修饰方法和属性
成员变量可以分为实例变量和静态变量

  1. private String name; //实例变量
  2. private static String name; //静态变量,被本类所有对象共享

没有static修饰的方法称为实例方法,是对象级别的,调用实例方法需要创建对象。例如:

  1. Demo demo = new Demo()
  2. demo.main

用static修饰过的方法或者属性是类级别的,会在类加载的时候加载。调用时是不需要创建对象的,可以直接用类名调用,如Demo.name.
但创建对象也可以调用静态方法。
静态变量是存放在方法区的。
静态方法中没有对象this,所以不能访问非静态成员。

静态代码块

写在类中,不能写在方法中,在类加载的时候会与之加载。
定义:static{
}
执行时静态代码块会在方法之前执行。
所有的方法运行时开辟的空间都在栈内存中,包括静态方法,但静态属性和静态代码块在方法区。
静态代码块只执行一次,执行一次后就已经开辟空间了,不需要再次开辟。

final关键字

代表的是最终的。
可以修饰类、方法和属性。
final修饰时,类不能被继承。如String类,本身已经是最终类
final修饰方法时,该方法不能被重写
被final修饰的变量必须要初始化,赋值后不能再重新赋值
final修饰属性时,如果final修饰的是一个基本数据类型的变量,那么这个变量就是常量,它的值就定了,不能变了,而如果修饰的是一个引用变量,那么该变量存的是一个内存地址,该地址就不能变了,但是该内存地址所指向的那个对象还是可以变的。
不建议修饰引用数据类型,因为仍可以通过修改对象的内部数据进行改变,意义不大。

用static和final共同修饰的变量是公共的常量(类级),命名是所有字母都需要是大写,之间用“_”连接,如GUO_JI,常量的访问权限修饰符可以public,也可private,因为值已经不可变了。

final不能与abstract共存,因为被final修饰的类不能被继承,而abstract类需要子类的实现。