1.修饰符分类
访问控制修饰符:public(公有)、protected(受保护的)、什么都不写(默认)、private(私有的)
非访问修饰符:static(静态)、final(最公有终)、abstract(抽象)、synchronized 和 volatile(线程上的应用)。
2.访问控制修饰符
2.1简介
作用:控制访问权限。
4种 :public(公有)、protected(受保护的)、什么都不写(默认)、private(私有的)(从前到后访问由宽松到严格)
public:可修饰:类、接口、变量、方法。所有类可访问public修饰的
protected:对同一个包内的类以及子类可见,使用对象:变量、方法(不能修饰外部类)
default:(默认,什么都不写)同一个包内可见,使用对象:类、方法、接口、变量
private:仅同一个类内可见,使用对象:变量、方法。(不能修饰外部类)
2.2public-公有的
----声明为public的类、方法、接口、变量能够被任何其他类访问。
----如果访问的的public的方法或变量不在同一个包中,需要将被访问的public的包,导到访问的包中。(导包)
----由于类的继承性,类的所有方法和子类都能被子类继承
2.3protected-受保护的
----修饰变量和方法,不能修饰类(内部类除外)
----接口以及接口的成员变量和成员方法不能声明为protected。
----protected修饰的只能被同一个包或者子类所见。
----在同一个包中,能被随意访问。
----不在同一个包中:需要子类来继承由protected修饰的父类,进行方法和变量的访问。不能访问父类已经实例的protected方法;
2.4什么都不写-默认
----默认修饰符能修饰:变量和方法。
----对同一个包内的类是可见的。
----在接口里默认:变量的前缀为:public static final(常量)。方法的前缀为:public
2.5private-私有的
----private修饰的只能被当前类所访问。
----能修饰:变量、方法、构造方法;
----类(内部类除外)和接口不能被private修饰
----声明为private的变量,只能通过getter和setter方法被外部类访问。
3.非访问修饰符
分类:
static静态修饰符:用来修饰类方法和类变量(类方法就是用类名来调用)
final修饰符:用来修饰类、方法和变量。final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract抽象修饰符:用来定义抽象类和方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。
3.1static-静态的
----静态变量:被static声明的变量,独立于对象,即不管实例化(创建)多少对象,静态变量只调用一次。局部变量不能被static声明。
----静态方法:被static声明的方法,独立与对象,静态方法不能使用类的非静态变量,静态方法根据参数列表进行计算。
3.2final-最终的
变量:
-final修饰的实例变量必须指定初始值。
-被final修饰的变量不能二次赋值,
-通常和static一起使用,定义常量。
方法:
-不能修饰构造方法
-父类中final方法能被继承,但不能被子类重写。
类:
-final类不能被继承。
参数:-
当参数被定义为final类型时,能读取使用,但不能改变该参数的值
3.3abstract-抽象的
抽象类:
-抽象类不能实例化对象
-抽象类能更好地扩充
-abstract和final不能同时修饰一个类
-类里面有抽象方法,该类也必须声明为抽象类。
抽象方法:
-抽象方法不能被static和final修饰
-继承抽象类的子类必须实现抽象类的所有抽象方法。除非该子类也是抽象类
-抽象方法没有实现方式,具体的实现由子类提供。
3.4synchronized
控制线程的访问:被synchronize修饰的类同一时间只能被一个线程所访问。与四种访问修饰符共同使用。
3.5transient
用来修饰变量,实例化对象时,若被transient修饰表示该变量不是对象的持久化数据。用来预处理类和变量的数据类型。
3.6volatile
用来修饰成员变量。
被volatile修饰的成员变量,在被线程访问时都要重新读取数值。如果数值在线程中发生变化,数值也会被返回到成员变量。用来保证不同线程的同一个成员变量的值总是相同的。