成员变量与局部变量的转变
来源: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回答
-
转化为局部变量有几个考虑:
减少java虚拟机访问成员变量的查询过程,有一点点的时间优化,但是不是在循环中几乎无感知;也和虚拟机的实现有关。
大部分情况是为了解决,在方法中判断成员变量后使用成员变量的情况,比如if(server!=null)...,此时可能出现判断时不为空,后续使用为空的情况,而转化为局部变量后可以规避这样的空指针异常问题。
042020-11-10
相似问题