当前位置: 技术问答>java相关
有关try{}块中变量的问题
来源: 互联网 发布时间:2015-05-25
本文导语: import java.net.*; import java.io.*; public class commu extends Thread { public static final String DCHOSTIP="192.168.0.14"; public static final int DCPORT=4385; public static final String SCHOSTIP="127.0.0.1"; public static fina...
import java.net.*;
import java.io.*;
public class commu extends Thread {
public static final String DCHOSTIP="192.168.0.14";
public static final int DCPORT=4385;
public static final String SCHOSTIP="127.0.0.1";
public static final int SCPORT=8080;
//建立管理软件平台和短消息处理中心(SC)与数据处理中心(DC)的Socket连接
public void getsock()
{
try{
scsock=new Socket(SCHOSTIP,SCPORT);
dcsock=new Socket(DCHOSTIP,DCPORT);}
catch(IOException e){System.out.println(e.getMessage());}
}
public static void main(String[] args)
{}
}
当我在主函数中想用scsock,dcsock时,却发现这两个变量的只依然是空的,是不是变量一出TRY块的范围就有问题了,请指教
import java.io.*;
public class commu extends Thread {
public static final String DCHOSTIP="192.168.0.14";
public static final int DCPORT=4385;
public static final String SCHOSTIP="127.0.0.1";
public static final int SCPORT=8080;
//建立管理软件平台和短消息处理中心(SC)与数据处理中心(DC)的Socket连接
public void getsock()
{
try{
scsock=new Socket(SCHOSTIP,SCPORT);
dcsock=new Socket(DCHOSTIP,DCPORT);}
catch(IOException e){System.out.println(e.getMessage());}
}
public static void main(String[] args)
{}
}
当我在主函数中想用scsock,dcsock时,却发现这两个变量的只依然是空的,是不是变量一出TRY块的范围就有问题了,请指教
|
看下面的代码先:
try{
#1 Socket scsock=new Socket(SCHOSTIP,SCPORT);
#2 Socket dcsock=new Socket(DCHOSTIP,DCPORT);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
看上面的mark行,你的对象实际上出了try block的话,还是存在的,如果这个时候还没有被GC解决掉的话,不过的要命的是变量scsock和dcsock出了try
block就没有不能再使用了(这个是生存周期的问题,也就是lifetime 和scope的问题)。
所以说那些对象现在都是不能引用的了,虽然那些对象可能在某些时候还在内存中。因为你失去唯一可以引用他的句柄(就是那些变量)了。
try{
#1 Socket scsock=new Socket(SCHOSTIP,SCPORT);
#2 Socket dcsock=new Socket(DCHOSTIP,DCPORT);
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
看上面的mark行,你的对象实际上出了try block的话,还是存在的,如果这个时候还没有被GC解决掉的话,不过的要命的是变量scsock和dcsock出了try
block就没有不能再使用了(这个是生存周期的问题,也就是lifetime 和scope的问题)。
所以说那些对象现在都是不能引用的了,虽然那些对象可能在某些时候还在内存中。因为你失去唯一可以引用他的句柄(就是那些变量)了。
|
怎么你这个clss里面的scsock和dcsock都没有声明对象?
如果你要在主函数里面也要用到这两个变量
最好在主函数里面将其定义为public static
然后在此处用
mainClassName.scsock=new Socket(SCHOSTIP,SCPORT);
mainClassName.dcsock=new Socket(DCHOSTIP,DCPORT);
如果你要在主函数里面也要用到这两个变量
最好在主函数里面将其定义为public static
然后在此处用
mainClassName.scsock=new Socket(SCHOSTIP,SCPORT);
mainClassName.dcsock=new Socket(DCHOSTIP,DCPORT);
|
try{
scsock=new Socket(SCHOSTIP,SCPORT);
dcsock=new Socket(DCHOSTIP,DCPORT);}
catch(IOException e){System.out.println(e.getMessage());
}
这一块确定连接上服务端了吗!
scsock=new Socket(SCHOSTIP,SCPORT);
dcsock=new Socket(DCHOSTIP,DCPORT);}
catch(IOException e){System.out.println(e.getMessage());
}
这一块确定连接上服务端了吗!