Java关键字整理

Java关键字总结

1.this:

(1)对象内部指代自身的引用
(2)解决成员变量和局部变量同名问题
(3)可以调用成员变量
(4)不能调用局部变量
(5)可以调用成员方法
(6)在普通方法中可以省略 this
(7)在静态方法当中不允许出现 this 关键字

2.super:

(1)代表对当前对象的直接父类对象的引用
(2)可以调用父类的非 private 成员变量和方法
(3)super(); 可以调用父类的构造方法,只限构造方法中使用,且必须是第一条语句

3.static

(1)static 可以修饰变量、方法、代码块和内部类
(2)static 变量是这个类所有,由该类创建的所有对象共享同一个 static 属性
(3)可以通过创建的对象名.属性名 和 类名.属性名两种方式访问
(4)static 变量在内存中只有一份
(5)static 修饰的变量只能是类的成员变量
(6)static 方法可以通过对象名.方法名和类名.方法名两种方式来访问
(7)static 代码块在类被第一次加载时执行静态代码块,且只被执行一次,主要作用是实现 static 属性的初始化
(8)static 内部类属于整个外部类,而不属于外部类的每个对象,只可以访问外部类的静态变量和方法

4.abstract

(1)可以修饰类和方法
(2)不能修饰属性和构造方法
(3)abstract 修饰的类是抽象类,需要被继承
(4)abstract 修饰的方法是抽象方法,需要子类被重写

5.instanceof

instanceof 运算符是用来在运行时判断对象是否是指定类及其父类的一个实例。
比较的是对象,不能比较基本类型

6.synchronized

synchronized 表示只有一个线程可以获取作用对象的锁,执行代码,阻塞其他线程。

  1. 作用:
    (1)确保线程互斥地访问同步代码
    (2)保证共享变量的修改能够及时可见
    (3)有效解决重排序问题
  2. 用法:
    (1)修饰普通方法
    (2)修饰静态方法
    (3)指定对象,修饰代码块
  3. 特点:
    (1)阻塞未获取到锁、竞争同一个对象锁的线程
    (2)获取锁无法设置超时
    (3)无法实现公平锁
    (4)控制等待和唤醒需要结合加锁对象的 wait() 和 notify()、notifyAll()
    (5)锁的功能是 JVM 层面实现的
    (6)在加锁代码块执行完或者出现异常,自动释放锁
  4. 原理:
    同步代码块是通过 monitorenter 和 monitorexit 指令获取线程的执行权
    同步方法通过加 ACC_SYNCHRONIZED 标识实现线程的执行权的控制

7. volatile
volatile 关键字是一个类型修饰符。JDK 1.5 之后,对其语义进行了增强。

保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了共享变量的值,共享变量修改后的值对其他线程立即可见
通过禁止编译器、CPU 指令重排序和部分 happens-before 规则,解决有序性问题

volatile 可见性的实现
在生成汇编代码指令时会在 volatile 修饰的共享变量进行写操作的时候会多出 Lock 前缀的指令
Lock 前缀的指令会引起 CPU 缓存写回内存
一个 CPU 的缓存回写到内存会导致其他 CPU 缓存了该内存地址的数据无效
volatile 变量通过缓存一致性协议保证每个线程获得最新值
缓存一致性协议保证每个 CPU 通过嗅探在总线上传播的数据来检查自己缓存的值是不是修改
当 CPU 发现自己缓存行对应的内存地址被修改,会将当前 CPU 的缓存行设置成无效状态,重新从内存中把数据读到 CPU 缓存

本人才疏学浅,如有错误,烦请指出,谢谢!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值