嗨,我想了解这个程序的执行流程。我是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();
}
}
答案 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
将拥有自己的x
和y
变量副本,当执行上述语句时,x
和y
对象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方法会有更新值。