Java的修饰符

Java语言提供了很多修饰符,主要分为两类:访问修饰符和非访问修饰符。

java中访问修饰符(Java修饰符访问修饰符和非访问修饰符)(1)

访问控制修饰符:

1、private --> 只有本类中可以访问。

2、default --> 只有同一个package中可以访问。

3、protected --> 同一个package中可以访问,不同package的子类中也可以访问。

4、public --> 所有类中都可以访问。 非访问控制修饰符:

5、static --> 静态修饰符。

6、abstract --> 抽象修饰符。

7、final --> 终结修饰符,不能再被扩展。

java中访问修饰符(Java修饰符访问修饰符和非访问修饰符)(2)

类支持的修饰符:

访问控制修饰符: default 、public

非访问控制修饰符: static 、 abstract 、final

属性支持的修饰符:

访问控制修饰符: private 、default 、protected 、public

非访问控制修饰符: static 、final

方法支持的修饰符:

访问控制修饰符: private、default、protected、public

非访问控制修饰符: static、abstract、final

修饰符的规则:

1、类修饰符,final和abstract不能并用,而final和static、abstract和static可以并用。

2、属性修饰符,final和static可以并用,并用时表示常量。

3、方法修饰符,final和abstract不能并用,static和abstract也不能并用;而abstract修饰符只能用到有abstract修饰的类和接口中。

其他修饰符:

1、native修饰符:表示被修饰的方法由本地语言实现。 例如: java.lang.System类中: public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

2、transient修饰符:java的类实现了java.io.Serializable接口,当对象被序列化时,被transient修饰的不被序列化,也就是被修饰的不进行保存。

3、volatile修饰符:volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

4、synchronized修饰符:同步修饰符。如果用它来修饰一个类的非静态方法,有其他对象访问这个方法时,就相当锁定到这个类的对象上,与此同时,如果再有其他对象在访问这个对象的方法时,就需要等待释放锁才能访问。

代码

public class ModifierDemo { private class A1 {} class B1 {} protected class C1 {} public class D1 {} private static class A2 {} static class B2 {} protected static class C2 {} public static class D2 {} public static void main(String[] args) { System.out.println("outter public=" ModifierDemo.class.getModifiers()); // private --> 只有本类中可以访问。 // default --> 只有同一个package中可以访问。 // protected --> 同一个package中可以访问,不同package的子类中也可以访问。 // public --> 所有类中都可以访问。 System.out.println("inner private=" A1.class.getModifiers()); System.out.println("inner default=" B1.class.getModifiers()); System.out.println("inner protected=" C1.class.getModifiers()); System.out.println("inner public=" D1.class.getModifiers()); System.out.println("inner static private=" A2.class.getModifiers()); System.out.println("inner static default=" B2.class.getModifiers()); System.out.println("inner static protected=" C2.class.getModifiers()); System.out.println("inner static public=" D2.class.getModifiers()); } }

,