java私有类成员

时间:2014-01-19 14:16:21

标签: java class

我在套接字教程中遇到了这段代码。 首先,我们创建一个数组并将clientThread的实例放入其中:

public class MultiThreadChatServer {
...
private static final clientThread[] threads = new clientThread[maxClientsCount];
...
clientSocket = serverSocket.accept();
        int i = 0;
        for (i = 0; i < maxClientsCount; i++) {
          if (threads[i] == null) {
            (threads[i] = new clientThread(clientSocket, threads)).start();
            break;
          }
        }

这是clientThread类(部分内容):

class clientThread extends Thread {

  private DataInputStream is = null;
  private PrintStream os = null;
  private Socket clientSocket = null;
  private final clientThread[] threads;
  private int maxClientsCount;

  public clientThread(Socket clientSocket, clientThread[] threads) {
    this.clientSocket = clientSocket;
    this.threads = threads;
    maxClientsCount = threads.length;
  }

  public void run() {
    int maxClientsCount = this.maxClientsCount;
    clientThread[] threads = this.threads;

    try {
      /*
       * Create input and output streams for this client.
       */
      is = new DataInputStream(clientSocket.getInputStream());
      os = new PrintStream(clientSocket.getOutputStream());
      os.println("Enter your name.");
      String name = is.readLine().trim();
      os.println("Hello " + name
          + " to our chat room.\nTo leave enter /quit in a new line");
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("A new user"+name+"entered the chat room");
        }
      }

我的问题是最后一行代码:threads [i] .os.println()。 'os'是一个私有成员,我们怎么可能在它自己的类之外访问它或没有getter方法?

1 个答案:

答案 0 :(得分:4)

它适用于os,因为实例可以访问同一类的其他实例的私有成员。 Java中的访问控制是在类级别而不是在实例级别确定的。例如,Scala具有修饰符private[this],用于将成员标记为实例级私有。