abstract
修饰类:用abstract修饰的类表示抽象类,抽象类不能被实例化,但可以有构造方法,构造方法可以被子类构造函数调用,需要子类继承并覆盖其中的抽象方法,一个子类只能继承一个抽象类。
修饰方法:用abstract修饰的方法表示抽象方法,抽象方法没有方法体,只声明,不实现。子类继承抽象类的话,必须覆写抽象类的所有抽象方法,否则他还是抽象类。抽象关键字不能private,static,final并列修饰同一方法。
final
修饰变量:包括成员变量和局部变量,对于基本数据类型变量时,变量中的数值不可以改变,对于引用类型来说,变量中的地址不可以改变。对于成员变量来讲因为成员表变量有默认值,使用final修饰后不再有默认值,所以我们必须在声明时或者构造方法中对它赋值;
修饰方法:表示该方法无法被重写;
修饰类:表示该类无法被继承。
static
修饰变量:称为静态变量,静态变量是随着类加载时被完成初始化的,且初始化时间要早于非静态变量,它在内存中仅有一个,且JVM也只会为它分配一次内存,同时类所有的实例都共享静态变量,可以直接通过类名来访问它。但是实例变量则不同,它是伴随着实例的,每创建一个实例就会产生一个实例变量,它与该实例同生共死。
修饰方法:称之为静态方法,可以通过类名对其进行直接调用(class.method),不依附于任何对像,所以在静态方法内不能访问非静态东西,但在非静态成员方法内可以访问静态成员方法/变量。
修饰代码块:被static修饰的代码块,我们称之为静态代码块,可以在程序中随意放,在类初次被加载时依次执行。静态块可以优化程序性能。
synchronized
synchronized 关键字,代表这个方法加锁,相当于不管哪一个线程运行到这个方法时,都要检查有没有其它线程正在用这个方法,有的话要等正在使用synchronized方法运行完这个方法后再运行此线程没有的话,锁定调用者,然后直接运行