空白符
注释
标识符
分隔符
操作符
字面量
关键字
instanceof
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
但是instanceof在Java的编译状态和运行状态是有区别的:
在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。
接口Personpublic interfacePerson {public voideat();
}
实现类Peoplepublic class People implementsPerson {private int a=0;
@Overridepublic voideat() {
System.out.println("======"+a);
}
}
子类xiaoming:public class xiaoming extendsPeople {privateString name;
@Overridepublic voideat() {
System.out.println("+++++++++");
}
}
主函数public static voidmain(String[] args) {
People p=newPeople();
xiaoming x=newxiaoming();
System.out.println(pinstanceofPerson);
System.out.println(pinstanceof xiaoming); -----2System.out.println(xinstanceofPerson);
System.out.println(xinstanceofPeople);
}
注意:上面2处的代码在编译时不会报错。
运行结果:true
false
true
true
只要有jdk,文本编辑器,就可以实现代码
以下是在win10下的命令行中实现的效果
http://haolloyin.blog.51cto.com/1177454/332426/
IService接口:
importjava.rmi.Remote;importjava.rmi.RemoteException;public interface IService extendsRemote {//声明服务器端必须提供的服务
String service(String content) throwsRemoteException;
}
ServiceImpl实现类:
importjava.rmi.RemoteException;//UnicastRemoteObject用于导出的远程对象和获得与该远程对象通信的存根。
importjava.rmi.server.UnicastRemoteObject;public class ServiceImpl extends UnicastRemoteObject implementsIService {privateString name;public ServiceImpl(String name) throwsRemoteException {this.name =name;
}
@OverridepublicString service(String content) {return "server >> " +content;
}
}
Server类:
/** Context接口表示一个命名上下文,它由一组名称到对象的绑定组成。
* 它包含检查和更新这些绑定的一些方法。*/
importjavax.naming.Context;/** InitialContext类是执行命名操作的初始上下文。
* 该初始上下文实现 Context 接口并提供解析名称的起始点。*/
importjavax.naming.InitialContext;public classServer {public static voidmain(String[] args) {try{//实例化实现了IService接口的远程服务ServiceImpl对象
IService service02 = new ServiceImpl("service02");//初始化命名空间
Context namingContext = newInitialContext();//将名称绑定到对象,即向命名空间注册已经实例化的远程服务对象
namingContext.rebind("rmi://localhost/service02", service02);
}catch(Exception e) {
e.printStackTrace();
}
System.out.println("服务器向命名表注册了1个远程服务对象!");
}
}
Client类:
importjavax.naming.Context;importjavax.naming.InitialContext;public classClient {public static voidmain(String[] args) {
String url= "rmi://localhost/";try{
Context namingContext= newInitialContext();//检索指定的对象。 即找到服务器端相对应的服务对象存根
IService service02 =(IService) namingContext.lookup(url+ "service02");
Class stubClass=service02.getClass();
System.out.println(service02+ " 是 " +stubClass.getName()+ " 的实例!");//获得本底存根已实现的接口类型
Class[] interfaces =stubClass.getInterfaces();for(Class c : interfaces) {
System.out.println("存根类实现了 " + c.getName() + " 接口!");
}
System.out.println(service02.service("你好!"));
}catch(Exception e) {
e.printStackTrace();
}
}
}
javac Server.java
javac Client.java
start是win cmd命令,rmiregistry是jdk命令
start rmiregistry
start java Server
java Client
D:\code\testjava>java Client
Proxy[IService,RemoteObjectInvocationHandler
[UnicastRef
[liveRef:
[endpoint:[192.168.30.219:63188](remote),
objID:[-73e8973b:15e82f8d067:-7fff, 7236802699799293841]]]]]
是 com.sun.proxy.$Proxy0 的实例!
存根类实现了 java.rmi.Remote 接口!
存根类实现了 IService 接口!
server >> 你好!