簡體   English   中英

Java:如何在try-catch -loop中訪問作業?

[英]Java: how to access assignments in try-catch -loop?

這個問題讓我陷入了巨大的try-catch循環。 我想要更小。 那么如何在循環中訪問賦值?

$ javac TestInit2.java 
TestInit2.java:13: variable unknown might not have been initialized
  System.out.println(unknown);
                     ^
1 error

import java.util.*;
import java.io.*;

public class TestInit2 {

 public static void main(String[] args){
  String unknown;
  try{
   unknown="cannot see me, why?";
  }catch(Exception e){
   e.printStackTrace();
  }
  System.out.println(unknown);
 }
}

您需要將一個初始值分配給unknown (在這種情況下,我使用了null但隨意分配任何對您的應用程序有意義的值):

import java.util.*;
import java.io.*;

public class TestInit2 {

    public static void main(String[] args){
        String unknown = null;
        try{
            unknown="cannot see me, why?";
        }catch(Exception e){
            e.printStackTrace();
        }
        System.out.println(unknown);
    }
}

由於您的分配中發生try編譯器無法驗證的方式unknown永遠不會被分配一個值,因此它是可能的,你可以使用這個變量沒有分配的值。

編譯器阻止你做一些很可能是錯誤的事情,因為在你的try-catch塊之后,你可能會假設變量被初始化了。 但是,如果拋出異常,則不會初始化它。

在使用變量之前,您需要將變量賦值給它。 但是,如果要在賦值失敗時將其指定為null,則可以將其指定為null。

因此,如果您希望變量在賦值失敗時為null,請嘗試以下操作:

    String unknown = null;
    try{
        unknown="cannot see me, why?";
    }catch(Exception e){
        e.printStackTrace();
    }
    System.out.println(unknown);

如果要在捕獲異常時將變量設置為其他內容,請嘗試以下操作:

    String unknown;
    try{
        unknown="cannot see me, why?";
    }catch(Exception e){
        e.printStackTrace();
        unknown = "exception caught";
    }
    System.out.println(unknown);        

此外,如果在分配失敗的情況下繼續執行方法沒有意義,則可能需要考慮從catch塊返回,或者拋出另一個將由調用者捕獲的異常。 例如:

    String unknown;
    try{
        unknown="cannot see me, why?";
    }catch(Exception e){
        e.printStackTrace();
        //return; // if you just want to give up with this method, but not bother breaking the flow of the caller
        throw new Exception("Uh-oh...", e); // if you want to be sure the caller knows something went wrong
    }
    System.out.println(unknown);   

您正在“嘗試”設置該變量的值,該值未初始化。 這意味着如果在嘗試執行該分配時捕獲到異常,則分配將不會發生,並且變量將保持未初始化狀態。 要擺脫錯誤,請將變量聲明為:

String unknown = null;

這樣,至少,println將能夠解決問題。

在聲明它時,你永遠不會給出一個unknown值,甚至不是null 編譯器不知道try塊中發生了什么,並且不能保證內部發生任何事情。 所以,據他所知,在你的println()命中之前, unknown不會引用任何東西。

編輯:澄清一下,所有編譯器都知道在try塊期間的任何時候都可能拋出異常,所以它不能假設你放在那里的東西會成功。

編譯器消息中的關鍵字可能是 這並不意味着當在println調用中訪問變量時,不可能初始化變量,只是有可能它不會,因此編譯器會抱怨。

暫無
暫無

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

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