zoukankan      html  css  js  c++  java
  • java_oop_关键字

    空白符
    注释

    标识符
    分隔符
    操作符
    字面量
    关键字

    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 >> 你好!

  • 相关阅读:
    Android Touch事件的分发过程
    使用runOnUiThread更新UI
    Sqlite访问数据库很慢的问题
    资源收集
    mongdb shard集群均衡导致宿主机CPU飙到100%处理
    Harbor安装
    springboot 启动脚本获取pid问题
    androidstudio build 时间太长处理
    修改 Docker 的 daemon.json后启动失败
    关于在centos7 64为引用android so引发的问题修复
  • 原文地址:https://www.cnblogs.com/createyuan/p/7168387.html
Copyright © 2011-2022 走看看