[学习笔记] Java修饰符

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.variableNameClassName.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修饰符包含在定义变量的语句中,用来预处理类和变量的数据类型;

 

posted @ 2022-04-30 22:01  糖小豆  阅读(72)  评论(0)    收藏  举报