class ConnectionInfo{
private static String uname = null;
private static String upasswd = null;
private static boolean lineReady = false;
private ConnectionInfo(String uname,String upasswd,boolean lineReady){
this.uname = uname;
this.upasswd = upasswd;
this.lineReady = lineReady;
}
public String getUname(){
return uname;
}
public String getUpasswd(){
return upasswd;
}
public boolean getLineReady(){
return lineReady;
}
public static ConnectionInfo getConnectionInfo(String uname,String upasswd,boolean lineReady){
if(uname.equals("wangkai") && upasswd.equals("106") && lineReady == true)
return (new ConnectionInfo(uname,upasswd,lineReady));
else
return null;
}
protected void finalize(){
System.out.println("Ready to disappear... ...");
}
}
class ConnectionState{
private boolean state = false;
private ConnectionInfo ci = null;
public ConnectionState(ConnectionInfo ci){
if(ci != null){
this.ci = ci;
state = true;
}
}
public boolean cutConnection(){
state = false;
return state;
}
public boolean getState(){
return state;
}
public ConnectionInfo getCi(){
return ci;
}
protected void finalize(){
if(this.state)
System.out.println("Error:connection has not been cutted...");
}
}
public class UseConnection{
public static void main(String[] args){
ConnectionInfo connectionInfo = ConnectionInfo.getConnectionInfo("wangkai","106",true);
ConnectionState conn = new ConnectionState(connectionInfo);
if(conn.getState())
System.out.println("user of this connection is " + conn.getCi().getUname());
else
System.out.println("connection is not existent.");
System.out.println("state of object conn is " + conn.getState());
System.gc();
}
}
有一段代码如上,我希望在finalize方法中检测state字段的值是否为false,但是我发现finalize方法似乎并没有被调用,不知这是为何??