1、 java关键字: volatile认识
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
2、 方法内的变量不能使用除final以外的访问修饰符。
public double getNum(float d) {return 4.0d;}是正确的, 就是返回4.0。
3、 java关键字之 native:
native是Java Native Interface(JNI)技术的关键词。就是说这个函数会有对应的C代码存在。JNI就是一种对其他语言的接口。用JNI你就可以用Java调用C/C++程序
4、 boolean bool = false;
if(bool=true){
System.out.println("ok");
}此种形式的代码是合法的, 打印出“OK”。
5、 catch(X x) can catch subclasses of X
Assertion expressions should not contain side effects.
6、 外部类private myVector extends Vector{}; //报错, 将修饰符改为默认的或者是Public则可以通过编译。
为什么? 要是遵循子类的访问修饰符大于等于父类的访问修饰符, 那么Vector类本身的修饰符是public而此处使用默认的(也即不写访问修饰符)也可?
————外部类的访问修饰符不可为private。