空白符
注释
标识符
分隔符
操作符
字面量
关键字
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。
接口Person public interface Person { public void eat(); } 实现类People public class People implements Person { private int a=0; @Override public void eat() { System.out.println("======"+a); } } 子类xiaoming: public class xiaoming extends People { private String name; @Override public void eat() { System.out.println("+++++++++"); } } 主函数 public static void main(String[] args) { People p=new People(); xiaoming x=new xiaoming(); System.out.println(p instanceof Person); System.out.println(p instanceof xiaoming); -----2 System.out.println(x instanceof Person); System.out.println(x instanceof People); } 注意:上面2处的代码在编译时不会报错。 运行结果: true false true true
只要有jdk,文本编辑器,就可以实现代码
以下是在win10下的命令行中实现的效果
http://haolloyin.blog.51cto.com/1177454/332426/
IService接口:
import java.rmi.Remote; import java.rmi.RemoteException; public interface IService extends Remote { //声明服务器端必须提供的服务 String service(String content) throws RemoteException; }
ServiceImpl实现类:
import java.rmi.RemoteException; //UnicastRemoteObject用于导出的远程对象和获得与该远程对象通信的存根。 import java.rmi.server.UnicastRemoteObject; public class ServiceImpl extends UnicastRemoteObject implements IService { private String name; public ServiceImpl(String name) throws RemoteException { this.name = name; } @Override public String service(String content) { return "server >> " + content; } }
Server类:
/* * Context接口表示一个命名上下文,它由一组名称到对象的绑定组成。 * 它包含检查和更新这些绑定的一些方法。 */ import javax.naming.Context; /* * InitialContext类是执行命名操作的初始上下文。 * 该初始上下文实现 Context 接口并提供解析名称的起始点。 */ import javax.naming.InitialContext; public class Server { public static void main(String[] args) { try { //实例化实现了IService接口的远程服务ServiceImpl对象 IService service02 = new ServiceImpl("service02"); //初始化命名空间 Context namingContext = new InitialContext(); //将名称绑定到对象,即向命名空间注册已经实例化的远程服务对象 namingContext.rebind("rmi://localhost/service02", service02); } catch (Exception e) { e.printStackTrace(); } System.out.println("服务器向命名表注册了1个远程服务对象!"); } }
Client类:
import javax.naming.Context; import javax.naming.InitialContext; public class Client { public static void main(String[] args) { String url = "rmi://localhost/"; try { Context namingContext = new InitialContext(); // 检索指定的对象。 即找到服务器端相对应的服务对象存根 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 estjava>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 >> 你好!