将方法中定义的对象公开给另一个方法

时间:2011-05-06 04:38:58

标签: java

我需要“暴露”(我想不出一个更好的术语)一组对象 (文件通道和字节缓冲区)在一个方法中构建,但需要从另一个方法访问。尝试使用公共静态访问器,但只生成编译器错误。 我有“主要”方法,例如

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的尝试 操作,但没有抛出或尝试捕获已被“定义”。

从我读过的内容来看,我无法在类声明中编写“抛出”异常。

我可以在一个方法中构建这些对象,但当然这会“隐藏”对象 其他方法。

请原谅我这么“啰嗦”......但我只是试着通过“领土”

谢谢和最诚挚的问候

盖伊

1 个答案:

答案 0 :(得分:0)

快速修复 - 将变量RqstChnlRqst_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开头的名称大小写字母总是类名称)