成员变量与局部变量的转变

来源:7-4 NIO重写服务器-1

abel_星123

2020-02-19

老师,ServerSocketChannel和 Selector都有成员变量转为局部变量的代码,想问下这里具体的作用是什么? 。和它的存储位置以及生存时间有关吗?

ServerSocketChannel server = ServerSocketChannel.open();
            // 设置为非阻塞
            server.configureBlocking(false);
            // 绑定本地端口
            server.socket().bind(new InetSocketAddress(port));
            // 注册客户端连接到达监听
            server.register(selector, SelectionKey.OP_ACCEPT);
            System.out.println("服务器信息:" + server.getLocalAddress());
            this.server = server;//将ServerSocketChannel///??????转为局部变量


            
            Selector selector = TCPServer.this.selector;///????转为局部变量
            System.out.println("服务器准备就绪~");
写回答

1回答

Qiujuer

2020-02-20

转化为局部变量有几个考虑:

  1. 减少java虚拟机访问成员变量的查询过程,有一点点的时间优化,但是不是在循环中几乎无感知;也和虚拟机的实现有关。

  2. 大部分情况是为了解决,在方法中判断成员变量后使用成员变量的情况,比如if(server!=null)...,此时可能出现判断时不为空,后续使用为空的情况,而转化为局部变量后可以规避这样的空指针异常问题。


0
4
小土boo
回复
Qiujuer
明白了!谢谢老师
2020-11-10
共4条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2314 学习 · 476 问题

查看课程