一、什么是Java非访问修饰符?
不用于控制类、成员变量、方法访问权限的一些特定功能标识符。例如:static、final、abstract、synchronized、transient等。本手记主要记录上述四个功能标识符。
二、具体标识符。
1、static
类变量 static typeName var;
类方法 static returnValue method;
static修饰的变量和方法表示属于类本身,不需要通过具体的对象去访问,只需要通过类名.成员变量、类名.成员方法访问。
public class JavaStatic { private static int age; private static String content; private static boolean flags; private static double salary; private static Long time; private int num; public static int testStatic(){ //静态方法中变量必须为静态的 //num++; age++; } public static void main(String[] args) { //static修饰的变量和方法不需要通过new对象实现调用,直接通过类;类名(可省略)来访问 System.out.println(JavaStatic.age+":"+JavaStatic.content+":"+ JavaStatic.flags+":"+salary+":"+testStatic()); } }
2、final
可以修饰类名、方法、成员变量,不能被修改是最终的。
final修饰类时,这个类不能被继承;final修饰成员变量和方法时,子类不能修改父类的变量,不能
override重写父类方法。
public class TestJavaDecorationVar { private JavaDecoration javaDecoration; public static void main(String[] args) { } }
3、abstract
修饰类名和方法,表示抽象类和抽象方法。为了方便后续类对此抽象类进行扩展!
public abstract class JavaAbstract { private int age; private String name; public void say(){ System.out.println(1); } public abstract void toDo(); }
public class TestJavaAbstract extends JavaAbstract { @Override public void say() { super.say(); } @Override public void toDo() { System.out.println("重写抽象类中未定义的抽象方法"); } }
4、synchronized(用于多线程编程)
synchronized修饰的方法,在同一时间只能被一个线程访问。
public class JavaSynchronized { //如何限制timeStart()方法在同一时间只有一个线程可以访问。 //使用synchronized来修饰方法*** public synchronized void timeStart(){ System.out.println("do it"); } }
5、transient
public class JavaTransient implements Serializable { //如何自动创建serialVersionUID // command+,inspections 勾选 private static final long serialVersionUID = -6730851565424759072L; private int age; private String name; //加上transient之后,message变量不会persist transient private String message; }
6、volatile
保证N条线程在访问同一个变量时,看到的是同一个值。
public class JavaVolatile implements Runnable { private volatile int age; @Override public void run() { System.out.println(">>>>>>>"); } }