1.Instanceof:
instanceof是Java的一个二元操作符,Java的保留关键字。用来判断左边的对象是否是它右边的类的实例,返回boolean类型。
2.? super T :
? super T语法将泛型类限制为所有T的超类(包括T自身),能用于参数中,返回值不可以限定。
3.native:
Native 就是java调用非java代码的接口。该方法的实现由非java语言(例如C)实现.
例如
public class HaveNatives
{
native public void Nativea( String x )
}
非JAVA代码的实现以C为例:
进入cmd
1.编译java HaveNatives.java 类,获得CLASS
2.运行javah HaveNatives,获得HaveNatives类C的实现
3.用VC6创建HaveNativesWin32动态链接库工程。将上述生成的头文件HaveNatives.h拷贝到
C:/Program Files/Microsoft Visual Studio/MyProjects/HaveNativesWin32目录下面。
将C:/JDK1.5/include目录下的jni.h和C:/JDK1.5/include/win32/jni_md.h两个头文件拷贝到VC安装目录下的C:/Program Files/Microsoft Visual Studio/VC98/Include目录下面。在VC IDE中新建HelloWorld.cpp文件,实现头文件中声明的方法并编译生成DLL。
4. 将生成的DLL拷贝到工程的bin下面,然后设置DLL搜索路径(环境变量PATH)为C:/workspace/jnitest/bin(JNI并没有规定必须将dll放在与class文件相同的目录,只要确保JVM能搜索到DLL即可)③。重新启动Elipse后,运行测试程序,将看到控制台输出“Hello World!”
注意,③必须设置好DLL搜索路径,或者将dll拷贝到C:/WINDOWS/system32下面。
java的serialization提供了一个非常棒的存储对象状态的机制,说白了serialization就是把对象的状态存储到硬盘上去,等需要的时候就可以再把它读出来使用。但是在存储对象状态时,我们有时候会需要特定的对象数据在serialization时不进行存储。这时候 transient关键字就派上用场了。要关掉类的特定的数据域,可以使用transient关键字进行定义,这对于底层的java虚拟机来说,这个 transient类型的变量不是一个类的永久性的状态。
2、比如说在一个实体Bean中,transient和 static字段是非持久性字段,不能保存在数据库中。
另外,如果你的对象需要序列化到数据库、JDNI或通过Object流传递给其他对象的话,对象中的非持久性字段应该加transient关键字。
3、 你如果写了一个程序并需要序列化到本地或者数据库中(不只是你一个人需要用),并且因为测试的缘故,你认为加上了自己的一些信息,例如用户名,密码(例如数据库的身份),这样方便测试.但是,这些信息是肯定不应该被别人知道或者了解的,同时呢,又不想每次自己都去写都去改,这样,你可以用 transient定义这样的变量存储它们.
4、 下面是java规范中对transient关键字的解释:
The transient marker is not fully specified by The Java Language Specification but is used in object serialization to mark member variables that should not be serialized.
5、java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身。这可以极大地方便网络上的一些操作,但同时,因为涉及到安全问题,所以并不希望把类里面所有的东西都能存储(因为那样,别人可以通过序列化知道类里面的内容),那么我们就可以用上transient这个关键字,它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。