【复习之JAVA基础】Java修饰符

修饰符分类

Java提供了很多修饰符,一般分为访问修饰符和非访问修饰符

访问修饰符

Java支持4中不同的访问权限:

default(默认缺省):同一包中可见,不使用任何修饰符,使用对象:类、接口、变量、方法

private:在同一类中可见,使用对象:变量、方法,不能修饰外部类

public:对所有类可见,使用对象:类、接口、变量、方法

protected:对同意包内的类和所有子类可见,使用对象:变量、方法,不能修饰外部类

注意:一个java文件内只能有一个public修饰的类(主类),且类名必须与文件名相同

                                                                                                     访问控制

修饰符

当前类

同一包内

子类(同一包)

子类(不同包)

其他包

public

protected

√/×

×

default

×

×

private

×

×

×

×

说明:子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。

 

default:默认访问修饰符,不使用任何关键字

使用默认访问修饰符修饰的类、方法和变量,对同一个包内的类是可见的

 

private:私有访问修饰符

private是最严格的的访问级别,被声明为private的类(只能是静态内部类)、方法、变量和构造方法只能被所属的类访问

声明为private的变量只能通过类中的public方法进行访问

private的使用主要是用来隐藏类的实现细节和保护类的数据

 

public:公有访问修饰符

声明为public的类、方法、构造方法能够被任何类访问

访问不同包中的public类时需要导入相应public类所在的包

Java程序中的main方法必须设置为public

 

protected:受保护的访问修饰符

protected可以修饰数据成员、构造方法、方法成员,不能修饰外部类

子类和基类在同一包中,声明为protected的变量、方法和构造方法能被同一个包中的任何其他类访问

子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法

 

访问控制和继承

子类继承父类的方法的访问权限只能比父类的访问权限高

  • 父类中声明为 public 的方法在子类中也必须为 public。
  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。

非访问修饰符

static:修饰方法和类变量

final:修饰类、方法和变量

abstract:修饰类、方法

synchronized和volatile:用于线程编程

 

static

static变量:静态变量(类变量),其值保存在类的内存区域的公共存储单元,该类的任意对象访问时取到的都是相同数据,被该类的任意对象操作时,也是对同一个内存单元进行操作,局部变量不能被static修饰

static方法:静态方法,不能使用类的非静态变量

生命周期:静态变量和静态方法在类被声明时就被创建,随着类被回收而销毁,因而类的对象和类的非静态方法可以调用静态变量和静态方法,反之则不行

对静态变量和方法的访问可以直接使用 classname.variablename 和 classname.methodname 的方式访问。

 

final

final变量:被final修饰的变量必须显示指定初始值,一旦被赋值后,不能重新被赋值。final通常和static一起使用来创建类常量

final方法:可以被子类继承,但不能被子类重写,目的是防止该方法的内容和功能被修改,保证了正确性和安全性

final类:不能被继承

 

abstract

abstract类:不能实例化对象,目的是为了将来对该类进行扩充。一个类不能同时被abstract和final同时修饰。abstract类可以包含abstract方法和非abstract方法,也可以不包含。继承abstract类的子类必须实现所有父类的abstract方法,除非该子类也是一个abstract类

abstract方法:在该类中没有方法体,具体实现由该类的子类完成,同样的,一个方法不能被abstract和final同时修饰,包含abstract方法的必须是abstract类。抽象方法的声明以分号结尾,例如:public abstract sample();

 

synchronized

该关键字声明的方法同一时间只能被一个线程访问,可以与四个访问修饰符一起使用

 

transient

用来定义一个暂时性变量,用修饰符transient 限定的暂时性变量,将指定 Java虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能。否则,类中所有变量都是对象的永久状态的一部分,存储对象时必须同时保存这些变量。

 

volatile

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

一个 volatile 对象引用可能是 null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值