原题如下:
Which three will compile and run without exception? (Choose three.)
A. private synchronized Object o;
B. void go() {
synchronized() { /* code here */ }
C. public synchronized void go() { /* code here */ }
D. private synchronized(this) void go() { /* code here */ }
E. void go() {
synchronized(Object.class) { /* code here */ }
F. void go() {
Object o = new Object();
synchronized(o) { /* code here */ }
E当中的synchronized(Object.class)还是头一次看到。这是什么语法呢?
------解决方案--------------------
synchronized(Object.class)括号里面是一个对象,synchronized语句获得该对象的锁。
Object.class也是个对象,是Object类的类对象。
------解决方案--------------------
------解决方案--------------------
A中不允许使用synchronized修饰符来修饰属性。
B中是非法的表达式。
C是正确的。
D中括号里不可以存在this关键字,里面可以是类,接口,和枚举。
E是正确的。
F也是正确的。
而对于E中Object.class其实就是一个类。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
没太注意 看楼上各位 牛人的回答 如有重复 算我抄袭好了
Object.class 就和 Class 类中的 forName一样 (返回一个 Class 对象) (Object.class --> 想象成相对路径 想象字节码是什么结尾的 .class) Class也是一个具体的对象! Class 也是继承自 Object的! (java中一切皆对象 void 都是对象 当然int云云的 基本类型 我就不清楚了)```
再来看synchronized(Object obj){} synchronized 获得Class对象的锁 很理所当然么 是吧!
Class可以 利用反射类 调用任何方法 (包括私有方法哦!!)
有不懂的 可以继续提问滴 我很热心 呐 \(^o^)/~