Java知识点之关键字

1、请你讲讲Java里面的final关键字是怎么用的?

(1)当final修饰一个类时,表明这个类不能被任何类继承,并且被final修饰的这个类中的成员和方法被隐式设置为final
(2)使用final的原因有两个:1.把方法锁定,以防任何继承类修改它。2.效率
(3)对于一个final变量,如果修饰的是基本数据类型,那么其值在初始化之后就不能被改变;如果是引用类型的变量,则对其进行初始化之后便不能将其指向另外一个对象

2、请你讲讲Java里面的static关键字是怎么用的?

(1)static修饰的成员变量或方法在类加载时就被添加到静态方法区,可以在没有所属类实例的情况下被使用
(2)在Java中不可以覆盖static修饰的方法,因为方法覆盖是基于运行时动态的绑定的,而static方法是编译时静态的绑定的,static方法与任何类的实例都不相关
(3)static修饰的成员变量不可以访问非static成员变量,因为static成员变量在所属类加载的时候就被加载入了内存,而此时当前类可能并没有实例化对象,也就无法获取里面的成员变量和方法,自然static修饰的变量和方法就无法访问

3、请你谈谈关于Synchronized和lock

(1)Synchronized关键字修饰的方法或者方法块,能够保证同一时刻只有一个线程执行该代码。JDK1.5以后引入了自旋锁、锁粗化、轻量级锁,偏向锁来优化关键字的性能
(2)Synchronized修饰静态方法以及同步代码块的Synchronized用法锁的是类,线程想要执行这部分代码,需要获取类锁
(3)Synchronized修饰成员方法,线程获取的是当前调用该方法的对象实例的对象锁
(4)Lock是一个接口,而Synchronized是一个关键字
(5)Synchronized在发生异常时,会自动释放线程占有的锁,从而不会导致死锁的情况;而Lock在发生异常时,如果不主动释放锁(unlock),则有可能发生死锁现象。所以使用Lock时需要在finally中释放锁
(6)Lock可以让等待锁的线程响应中断,而Synchronized不能,使用Synchronized,线程会一直等待,不能响应中断。通过Lock可以知道有没有获取锁,而Synchronized不能

4、请你介绍一下volatile?

(1)volatile是用来保证有序性和可见性的。这跟Java的内存模型相关。比如我们所写的Java代码,不一定按照我们书写的顺序来执行,编译器会重排序,CPU也会重排序,这样的重排序是为了减少流水线的阻塞,引起流水线的阻塞,比如数据相关性,提高CPU的执行效率。
(2)volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作;有序性实现的是通过插入内存屏障来保证的;可见性:首先Java内存模型分为主内存,工作内存。

5、请你介绍一下transient?

用transient关键字标记的成员变量不参与序列化过程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值