非访问修饰符
Java提供了一种修饰符叫非访问修饰符,它区别于public、private等访问修饰符。
非访问修饰符有:static、final、abstract、synchronized、transient和volatile。
static修饰符:用来修饰类方法和类变量。称为静态修饰符,它一般分为两种作用方式:
-
静态变量:static关键字用来声明独立于对象的静态变量时,无论一个类实例化多少个对象,它的静态变量只有一份拷贝。静态变量称为静态变量,局部变量不能被声明为static变量。
示例:public static int width=350;
-
静态方法:static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数裂变得到数据。然后计算这些数据。
示例:public static void getProject(){
/*
*/
}
final修饰符:final修饰符表示“最后的,最终的”含义,变量一旦被赋值以后,不能被重新赋值。
final修饰的变量:被final修饰符修饰的变量必须显示指定初始值。final修饰通常和static修饰符一起使用来创建类常量。
示例:
public static final int width=350;
final方法:类中final方法可以被子类继承,但是不能被子类修改。声明final方法的主要目的是为了防止该方法的内容被修改。
public final void getProject(){
}
final类:final类不能被继承,没有类能够继承final类的任何特性。
public final class Project{
}
abstract修饰符:代表抽象。
abstract类:抽象类,抽象类不能用来实例化对象。声明抽象类的唯一目的就是为了将来对该类进行扩充。
一个类不能同时被abstract修饰符和final修饰符修饰如果一个类包含了抽象方法,那么该类一定要声明为抽象类,否则将会出现编译错误。
抽象类可以包含抽象方法和非抽象方法。
示例:
public abstract class Project{
}
abstract方法:抽象方法是一种没有任何实现的方法,该方法的具体实现是由子类提供的(具体要被实例化的类)。
抽象方法不能被声明为static和final
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾。
示例:
public abstract void getProject();
synchronized修饰符
synchronized关键字声明的方法同一时间只能被一个线程访问。synchronized修饰符可以应用于四个修饰符(在线程和设计模式中会做相应介绍)。
transient修饰符
序列化的对象包含被transient修饰符的实例变量时,Java虚拟机(JVM)跳过该特定的变量。
该修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型。
volatile修饰符
volatile修饰符修饰的成员变量在每次被线程访问时,都会强制共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化回写到共享内存。这样在任何时候两个不同的线程总会看到另外一个变量的同一个值。一个volatile对象引用可能为null。