Java学习之Java中的关键字有哪些?

1099 篇文章 1 订阅
1030 篇文章 9 订阅

final:
修饰变量时,用以定义常量;
修饰方法时,方法不能被重写(Override);(注意:重载是指方法相同的多个函数,重写是指子类重写父类的同名方法)
修饰类时,类不能被继承。
final的内存语义,在final域初始化过程,不允许实例化和引用赋值发生指令重排序,即保证了final的不可变性。
try-catch-finally:
异常处理关键字。必须有try,catch/finally有其一即可。
java7中带来的try-with-resources特性,把资源开启写在try括号里,可实现资源自动回收。
synchronized
 线程同步关键字。两种用法,可以synchronized(object)或者加在方法前。加在普通对象或者实例方法上为对象锁,加在.class对象或者静态方法上为类锁。
这个关键字可以引申出java锁的用法,也是一大块内容(待整理)
 synchronized锁是基于monitor对象实现的,编译时会在每一处需要同步的代码块开始和起始处添加monitorenter和monitorexit指令。monitor其中计数器机制,monitorenter会把计数器加1,monitorexit会吧计数器减1;当计数器减到0时,锁就被释放了。
synchronized对同一线程是可重入的,不会出现“自己把自己锁死”;对于不同线程,同一时刻只能由一个线程获得锁并执行。
monitor底层是通过操作系统的mutex lock(互斥锁)实现的。
 由于竞争锁的过程中可能引起线程状态的变化,过程中会发生用户态和内核态之间的切换,会对性能有影响。因此synchronized是一个重量级操作,所谓重量级就是指这种重量级锁依赖于底层的mutex,而且切换带来的代价比较大。jdk1.6引入了偏向锁和轻量级锁用来优化这个过程,如加入自旋让线程空跑一段时间。
JVM底层存储对象,对象有一个对象头属性,而对象头包括Mark word、类型指针和数组长度。Mark word中通过锁标志位来存储锁的不同状态。
java锁是分级别的,按低到高为无锁、偏向锁、轻量级锁、重量级锁,锁可以升级但不能降级。
instanceof:检测对象是否是一个类的实例,对象可以为null
volatile: 禁止指令重排序。
volatile的作用是提供轻量级的同步机制,可以保证有序性、可见性,但不保证原子性。
 从JMM层面来讲,主内存和工作内存之间的动作可以归结为lock、unlock、read、load、use、assign、store、write。volatile关键字保证了read/load/use和assign/store/write分别必须是连续的,即读取变量必须从主内存刷新,写入变量必须同步到主内存中,这样使得修改的值立即可以被其他线程看见,也就保证了可见性。而有序性是禁止指令重排优化。不保证原子性,是因为虽然保证了读取和写入两个步骤的连续性,但并不保证读取和写入也是连续的。
volatile可以用来增强单例模式的double-check线程安全问题:避免初始化对象和赋值引用两条指令的重排。
default: java8引入的,用于在接口中声明默认方法
 transient:
作用于序列化过程。任何实现Serializable接口的类都可以被序列化,但如果对象中的字段被transient修饰则不参与序列化过程,只存在于调用者的内存中。
被transient修饰的静态变量,其值并不会受序列化和反序列化过程干扰,仅以内存中的值为准。
 序列化的两个接口:Serializable不需要实现任何方法,自动序列化;Externalizable,需要实现writeExternal方法指定序列化字段。
enum:用来定义枚举类型。
枚举类是个比较特殊的类型,由于在启动时加载而且仅加载一次,很安全的单例模式。
 jdk提供的EnumSet,
EnumMap通过位向量来压缩存储空间。例如EnumSet的实现有RegularEnumSet和JumboEnumSet,元素少于64个使用RegularEnumSet,内部用一个long变量作为位向量;多于64个则使用JumboEnumSet,内部用一个long数组作为位向量。
for:循环关键字。如果使用for-each语法需要注意空指针异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值