Java当中的修饰符可在定义类、方法或变量时放在语句前面作修饰。根据修饰符的用途,可将其分为访问修饰符和非访问修饰符。
访问控制修饰符
访问控制修饰符用于指明对类、方法/构造方法的访问权限;
Java有四种访问权控制修饰符:default、private、protected、public;
默认访问修饰符 – default
不使用任何关键字;
若类,接口,变量和方法声明时采用默认访问修饰符,则它们在同一包内可见;
接口内的变量隐式声明为public static final,方法的默认权限为public;
私有访问修饰符 – private
私有访问是最严格的访问权限,被声明为private的变量、构造方法、方法只能被所属类访问;
类(外部类)和接口不能声明为private;
声明为私有的变量只能通过类中的公共getter方法被外部类访问;
private可用于隐藏类的实现细节和保护类中的重要数据;
公共访问修饰符 – public
被public修饰的变量、方法、类、接口对所有类可见,即声明为public的变量、方法、类和接口能被任何其他类访问;
由于类的继承性,类中的所有public变量和方法都会被其子类继承;
受保护的访问修饰符 – protected
被声明为protected的变量、方法/构造方法能够被所在父类的子类或同一包内的所有子类访问;
protected不能用于修饰类(内部类除外);
访问控制的继承
父类中声明为public的方法在子类中也必须声明为public;
父类中声明为protected的方法在子类中只能声明为protected或public,不能声明为private;
父类中声明为private的方法不能被继承;
非访问修饰符
static修饰符 用于修饰类方法和类变量;
final修饰符 用于修饰类、方法和变量;final修饰的类不能被继承,修饰的方法不能被子类重写,修饰的变量为常量,值不能发生修改;
abstract修饰符 用于创建抽象类和抽象方法;
synchronized和volatile修饰符 主要用于对线程的修饰;
transient修饰符 预定义变量或类的数据类型;
static修饰符
静态变量:static修饰符可用于声明静态变量,无论类实例化了多少对象,始终只有一个静态变量,静态变量也叫作类变量;
局部变量不能被声明为static变量;
静态方法:static修饰符修饰的方法称为静态方法,静态方法不能使用类的非静态变量;
被修饰为静态的变量和方法可以直接使用ClassName.variableName和ClassName.methodName的形式进行访问;
final修饰符
final类:被final修饰的类不能够被继承;
final方法:被final修饰的方法可以被所在类的子类继承,但不能子类重写;
声明final方法的目的是防止方法的内容被修改;
final变量:被final修饰的变量一旦被赋值后便不能重新赋;
被final修饰的变量必须显式地指定初始值;
final修饰符通常与static修饰符一起用来创建常量;
abstract修饰符
抽象类:抽象类可以包含抽象方法和非抽象方法,抽象类不能实例化对象;
一个类不能同时被abstract和final修饰,如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则会出现错误;
抽象方法:只对方法进行定义,但没有具体的实现,方法的实现由继承类的子类进行;
抽象方法不能被声明为final和static;
任何继承了抽象类的子类必须实现父类当中的所有抽象方法,除非该子类也是抽象类;
抽象类可以不包含抽象方法,但如果一个类包含类抽象方法,那么该类必须被声明为抽象类;
抽象方法声明时以分号结尾;
synchronized修饰符
synchronized关键字声明的方法同一时间只能被一个线程访问;
volatile修饰符
被volatile修饰的成员变量在每次被线程访问时,会强制从共享的内存中重新读取成员变量的值,当成员变量发生变化时会强制线程将变化值写到共享的内存中。因此,在任何时刻,两个不同的线程访问到的某个成员变量的值相同;
transient修饰符
序列化的对象包含被transient修饰的实例变量时,java虚拟机会跳过该特定变量;
transient修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型;
Original: https://www.cnblogs.com/cloudyzcy/p/13866457.html
Author: 糖小豆
Title: [学习笔记]Java修饰符
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713021/
转载文章受原作者版权保护。转载请注明原作者出处!