一、什么是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(">>>>>>>");
}
}
随时随地看视频