适用范围<访问权限范围越小,安全性越高>
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨ (对任何人都是可用的)
protect ∨ ∨ ∨ × (继承的类可以访问以及和private一样的权限)
default ∨ ∨ × × (包访问权限,即在整个包内均可被访问)
private ∨ × × × (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)
类修饰符:
public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。
final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。
friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。
成员变量修饰符:
public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。
private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
final,最终修饰符,指定此变量的值不能变。
static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。
transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。
volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。
方法修饰符:
public(公共控制符)
private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。
final,指定该方法不能被重载。
static,指定不需要实例化就可以激活的一个方法。
synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。
native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。
abstract,修饰的方法为抽象方法没有方法体需要在子类中实现,它所在的类一定是抽象类
自己的体会:
1.如果一个类的构造方法不写public,那它就是默认的default,那它只能被同包访问(包括继承,引用等)
2.abstract修饰的类,如果不加修饰符默认是friendly,只有同包的能访问,抽象类中可以有普通方法,抽象类中可以没有抽象方法不会报错但没有意义,抽象方法默认的修饰符是 friendly
3.static 不能修饰外围类,因为static的作用是把成员变成类的,所以static修饰外围类没有意义
4.内部类的成员不能用static修饰,因为内部类本身是外围类实例的一个成员是实例私有的,如果给内部类的成员设置static,那相当于共享了这个成员这违背内部类的初衷,是没有意义的,所以java编译器的语义分析会提示出错
5.final abstract 不能同时修饰一个类或者方法,因为abstract的初衷是不提供实例就是要子类去继承实现他未实现的方法,而final就是最终的方法或者类不能被继承,两者在编译器的语义分析中冲突会提示报错
6.abstract不能修饰变量
7.interface 默认的修饰符是 abstract 和friendly并不是public
java接口本身默认是abstract的;可以是public的,也可以是friendly的,但不可以是private 的,不可以是protected的(否则通不过编译)。
8.interface中的方法都是默认public 和 abstract的
java接口里的方法默认是abstract的,public 的;不可以private 的,不可以是protected 的。
9.java8的新特性interface中的static方法和default方法
10.调用final static 修饰的常量并不会使类初始化
11.abstract 方法只能用访问修饰符 public 或者protected!
抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。
抽象方法需要子类重写,如果用private子类是无法访问的,因此二者是矛盾的。