java新手想知道执行流程

时间:2017-02-18 18:40:16

标签: java constructor

嗨,我想了解这个程序的执行流程。我是Java编程和学习构造函数的新手。

我怀疑是当对象obj调用构造函数并将值10和jack分配给x和y时,那么当创建下一个对象obj2时它将用12替换值并在x中替换mat和你?所以,因为在调用call()方法之后,它不会打印12和matt两个调用 打印是打印x和y?

class Constructor2 {
  int x;
  String y;

  Constructor2(int i, String s){
    x = i;
    y = s;
  }

  void call(){
    System.out.println("roll no is "+ x + " name is " + y);
  }

  public static void main(String args[]) {
    Constructor2 obj = new Constructor2(10, " jack ");
    Constructor2 obj2 = new Constructor2(12, " matt ");

    obj.call();
    obj2.call();
  }
}

5 个答案:

答案 0 :(得分:1)

就像一个描述如何构建框的模板。

每次调用new时,都会查看该模板,并创建一个新框,并将一些内容放入该框中。

您正在创建两个框,每次都将不同的内容放入新创建的框中。

有关详细信息,请参阅here

要理解的一件事是:如果在声明字段时使用了 static 关键字,那么然后该类的所有对象都会看到相同值。

答案 1 :(得分:1)

变量x和y是实例变量,这就是它们与创建的对象链接的原因。它们不会影响其他对象或班级。

如果你把它们变成静态变量,那么所谓的类变量就像..

static int x;
static String y;

..因为你害怕,内容会被覆盖。

答案 2 :(得分:0)

您的类的每个object都有自己的变量副本,只要它们不是static并且更改一个对象中任何变量的值只会更改该特定对象和其他对象的值不受它的影响。

Constructor2 obj = new Constructor2(10, " jack ");

此对象obj将拥有自己的xy变量副本,当执行上述语句时,xy对象obj的对象已初始化。

Obj2不受任何影响。 <{1}}的{​​{1}}和obj2变量的副本会在

时初始化
x

已执行。

执行上述两个陈述后

y

Constructor2 obj2 = new Constructor2(12, " matt ");

答案 3 :(得分:0)

因为每次您创建对象的bool _EthDev::Connect() { int sockErr, ret, i, j; int szOut = sizeof(sockaddr_in); // create socket if ((fSock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { sockErr = GetLastError(); Log("Invalid socket err %d", sockErr); fSock = 0; return false; } // set fast closing socket (by RST) linger sLinger; sLinger.l_onoff = 1; sLinger.l_linger = 0; if (sockErr = setsockopt(fSock, SOL_SOCKET, SO_LINGER, (const char FAR*)&sLinger, sizeof(linger))) { sockErr = WSAGetLastError(); Log("Setsockopt err %d", sockErr); closesocket(fSock); fSock = 0; // here crashes return false; } // connect to device fSockaddr.sin_port = htons((u_short)(baseport)); if (connect(fSock, (struct sockaddr*)&fSockaddr, szOut)) { closesocket(fSock); fSock = 0; return false; } ... return true; } 实例时:

new

因此,它将在内存中为每个对象Constructor2 obj = new Constructor2(10, " jack "); Constructor2 obj2 = new Constructor2(12, " matt "); obj保留一个空间,因为您获得了不同的值,这是逻辑。

您可以在此处查看:Working with Objects in Java

答案 4 :(得分:0)

每当初始化对象时,它将首先调用构造函数,然后初始化变量。

所以call方法会有更新值。