我需要“暴露”(我想不出一个更好的术语)一组对象 (文件通道和字节缓冲区)在一个方法中构建,但需要从另一个方法访问。尝试使用公共静态访问器,但只生成编译器错误。 我有“主要”方法,例如
public static void main(String args[]) throws IOException, FileNotFoundException
{
ConnectFiles() ; // builds the filestream, channel and bytebuffer objects
ProcessRqst() ; // reads the request file and writes to the response file
} // end of main routine
public static void ConnectFiles throws IOException
{
FileInputStream RqstInp = new FileInputStream(Rqst_File) ;
FileChannel RqstChnl = RqstInp.getChannel() ;
ByteBuffer Rqst_Bufr = ByteBuffer.allocate(RQbuflen) ;
//Connect to the Response Output File
FileOutputStream RespOut = new FileOutputStream(Resp_File) ;
FileChannel RespChnl = RespOut.getChannel();
ByteBuffer Resp_Bufr = ByteBuffer.allocate(RSbuflen) ;
} // end of connect-files routine
public static void ProcessRqst()
{
while ( pgm_status != EOF )
{
try {
RqstChnl.read( Rqst_Bufr ) ;
Rqst_Bufr.get( RqstWork, bufroffset, RQbuflen ) ;
}
catch ( EOFException e )
{
DT_Stamp = getDateTime() ;
message_data.append(DT_Stamp) ;
message_data.append(" LU62XCE0599: Request File at End-Of-File ") ;
message_data.append(" Request File:") ;
message_data.append(Rqst_File) ;
SendMesg() ;
pgm_status = EOF ; //set program status to End-Of-File
}
catch ( IOException e )
{
DT_Stamp = getDateTime() ;
message_data.append(DT_Stamp) ;
message_data.append(" LU62XnsCvr Method:ProcessRqsts ") ;
message_data.append("Read Error Code:") ;
message_data.append(AB_RQST) ;
message_data.append(" LU62XCE0513: Request File IO Exception =") ;
message_data.append(" Request File:") ;
message_data.append(Rqst_File) ;
SendMesg() ;
pgm_status = READ_ERROR ;
}
if ( pgm_status == READ_ERROR )
continue ; //go back and read next record
//**** other stuff goes on ....
} // end of Process Requests Routine
所以我想知道java是否提供了一种简单的方法来“暴露”在一个方法中构建的一组对象,以便可以在另一种方法中“访问”它们。
现在我确实有一个公共课,例如
public class LU62XnsCvr extends Object
{
我有很多对象“声明”并且可以通过程序中的所有方法访问。 但是,当我尝试定义FileInputStream和FileOutstream对象时,我得到了 IOException编译错误;即编译器“看到”这些构造函数是I / O的尝试 操作,但没有抛出或尝试捕获已被“定义”。
从我读过的内容来看,我无法在类声明中编写“抛出”异常。
我可以在一个方法中构建这些对象,但当然这会“隐藏”对象 其他方法。
请原谅我这么“啰嗦”......但我只是试着通过“领土”
谢谢和最诚挚的问候
盖伊
答案 0 :(得分:0)
快速修复 - 将变量RqstChnl
和Rqst_Bufr
声明为静态类属性(例如“外部主要”):
public class MyClass {
private static FileChannel RqstChnl = null;
private static ByteBuffer Rqst_Bufr = null;
// ...
public static void ConnectFiles throws IOException {
FileInputStream RqstInp = new FileInputStream(Rqst_File) ;
RqstChnl = RqstInp.getChannel() ;
Rqst_Bufr = ByteBuffer.allocate(RQbuflen) ;
// ...
(通过第二次重构,您应该重命名字段和方法,它们总是以小写字母开头,这是一种约定,使我们更容易 更容易理解代码 - 以upper开头的名称大小写字母总是类名称)