Java как вы возвращаете значение из try, catch и, наконец?

поэтому, когда я делаю код блоков внутри " try {}", и я пытаюсь вернуть значение, он выходит"нет возвращаемых значений". Это код, который я использую, который представляет мою проблему.

import org.w3c.dom.ranges.RangeException;


public class Pg257E5 
{
public static void main(String[]args)
{

    try
    {
        System.out.println(add(args));
    }
    catch(RangeException e)
    {
        e.printStackTrace();
    }
    finally
    {
        System.out.println("Thanks for using the program kiddo!");
    }

}
public static double add(String[] values) // shows a commpile error here that I don't have a return value
{
    try
    {
        int length = values.length;
        double arrayValues[] = new double[length];
        double sum =0;
        for(int i = 0; i<length; i++)
        {
            arrayValues[i] = Double.parseDouble(values[i]);
            sum += arrayValues[i];
        }

        return sum; // I do have a return value here. Is it because if the an exception occurs the codes in try stops and doesn't get to the return value?
    }
    catch(NumberFormatException e)
    {
        e.printStackTrace();
    }
    catch(RangeException e)
    {
        throw e;
    }
    finally
    {
        System.out.println("Thank you for using the program!");// so would I need to put a return value of type double here?
    }

}
}

в основном, вопрос, который у меня есть: "как вы возвращаете значение при использовании блока try и catch?

4 ответов


для возврата значения при использовании try/catch вы можете использовать временную переменную, например,

public static double add(String[] values) {
    double sum = 0.0;
    try {
        int length = values.length;
        double arrayValues[] = new double[length];
        for(int i = 0; i < length; i++) {
            arrayValues[i] = Double.parseDouble(values[i]);
            sum += arrayValues[i];
        }
    } catch(NumberFormatException e) {
        e.printStackTrace();
    } catch(RangeException e) {
        throw e;
    } finally {
        System.out.println("Thank you for using the program!");
    }
    return sum;
}

еще вам нужно иметь возврат в каждом пути выполнения (try block или catch block), который не имеет throw.


Это потому что вы находитесь в try заявление. Поскольку может быть ошибкой, sum может не инициализируется, поэтому поместите оператор return в finally блок, таким образом, он наверняка будет возвращен.

убедитесь, что вы инициализируете sum вне try/catch/finally Так что это в области.


проблема в том, что происходит, когда вы получаете NumberFormatexception кинули? Распечатать его и ничего не вернуть.

Примечание: вам не нужно ловить и бросать исключение обратно. Обычно это делается, чтобы обернуть его или распечатать трассировку стека и игнорировать, например.

catch(RangeException e) {
     throw e;
}

вот еще один пример, который возвращает логическое значение с помощью try / catch.

private boolean doSomeThing(int index){
    try {
        if(index%2==0) 
            return true; 
    } catch (Exception e) {
        System.out.println(e.getMessage()); 
    }finally {
        System.out.println("Finally!!! ;) ");
    }
    return false; 
}