簡體   English   中英

在另一個私有函數中訪問私有函數的變量

[英]Accessing a variable of a private function in another private function

給定以下代碼,如何在private void jButton1 myIntprivate void jButton1使用private void jButton2

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    int myInt = (Integer)jSpinner1.getValue();
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    int b = 0;
    int c = myInt;
    do {
        try {
            Object newInstance = Class.forName("com.mysql.jdbc.Driver").newInstance();
            Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/rk","root","root");
            PreparedStatement ps = (PreparedStatement) con.prepareStatement("INSERT INTO factors VALUES(?,?,?,?,?,?)");
            ps.setString(1,jTextField7.getText());
            ps.setString(2,jTextField8.getText());
            ps.setString(3,jTextField9.getText());
            ps.setString(4,jTextField10.getText());
            ps.setString(5,jTextField11.getText());
            ps.setString(6,jTextField12.getText());

            ps.executeUpdate();

            jTextField7.setText("");
            jTextField8.setText("");
            jTextField9.setText("");
            jTextField10.setText("");
            jTextField11.setText("");
            jTextField12.setText("");
        }
        catch (Exception e) {
            System.out.println(e);
        }

        b++;
    } while(b < my);
}

你不能。 這些是局部變量 ,僅在方法調用期間存在。

如果要在另一個方法中使用該值,則必須通過參數傳遞它,或者使其成為實例 (或靜態,如果必須)變量,以使其成為對象狀態的一部分。

基本上,你的jButton1ActionPerformed方法目前沒有用處 - 它為一個局部變量賦值,然后立即超出范圍。

順便說一句,如果您不熟悉Java的基礎知識,我強烈建議您在控制台應用程序中學習它們,在這些應用程序中您不需要處理用戶界面的復雜性。 學習該語言的基礎知識,然后一些核心庫(集合,IO等) 然后從用戶界面開始。

將myInt傳遞給一個字段。

private int myInt;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    myInt = (Integer)jSpinner1.getValue();
}


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    int b = 0;
    int c=myInt;
  ...
}

即使你的方法是public ,你也不可能在外面訪問它的局部變量..它的范圍僅限於定義方法..

最好將該變量聲明為類中的字段。

你的方法jButton1ActionPerformed變量myInt應該被聲明為實例字段,否則將不會使用該變量..你沒有在任何地方使用它..

唯一的方法是將局部變量作為參數傳遞給另一個私有方法。 局部變量(在方法中聲明的變量)僅限於該方法。 除非您將它們作為參數傳遞或返回它們,否則您無法直接在其他方法中使用它們。 是的,如果它是私有/公共/受保護/默認/靜態標記方法無關緊要。

變量與變量范圍相關聯 在這種情況下, myInt在一個方法范圍內聲明,然后您嘗試從不同的方法范圍訪問它。 這是不可能的。

要繞過它,您必須將myInt變量提升為Global(Class)變量,如下所示:

private int myInt;
...
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    this.myInt = (Integer)jSpinner1.getValue();
}
...

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   int b = 0;
   int c= this.myInt;
...

這意味着在類范圍內聲明的任何內容都可以訪問此變量,這意味着現在可以從所有方法訪問您的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM