2014-10-14 3 views
1

Код нигде не был выполнен, но в основном я придерживаюсь этого, пока не смогу двигаться дальше. Продолжать получать локальную переменную, возможно, не было инициализировано на их телефоне. Если я перемещаю конструктор, переданный try catch, я получаю сообщение об ошибке при попытке catch, если я оставлю его так, как я получаю ошибку на своем телефоне.); любая помощь?Локальная переменная, возможно, не была инициализирована конструктором/методом

import java.util.Scanner; 

public class CustomerTelephone { 

    public static void main(String[] args) { 
     CustomerTelephone theirPhone; 
     String phoneNumber = "407 407 4074"; 

     try { 
      theirPhone = new CustomerTelephone(phoneNumber); 
     } catch (InvalidTelephoneException ite) { 
      System.out.println("Invalid telephone number format."); 
     } 

     theirPhone.getAreaCode(phoneNumber); 

    } 

    public CustomerTelephone(String telephone) throws InvalidTelephoneException { 
     if (telephone.length() != 12) { 
      throw new InvalidTelephoneException(
       "The phone number was entered incorrectly."); 
     } 
    } 

    public String getAreaCode(String phoneNumber) { 
     String goBack; 
     String[] teleArray = phoneNumber.split("(?!^)"); 
     goBack = teleArray[0 - 2]; 

     return goBack; 
    } 

    public String getExchange(String phoneNumber) { 
     String goBack = null; 

     return goBack; 
    } 

    public String getLocalNumber(String phoneNumber) { 
     String goBack = null; 

     return goBack; 
    } 

} 

ответ

1

Простое исправление: Инициализировать ссылку на нуль:

CustomerTelephone theirPhone = null; 

Лучше исправить: Инициализировать переменную и переместить ссылку на эту переменную в блоке Try. Таким образом, исключение вызывается в вашем блоке try, тогда вы избегаете последующего исключения NullPointer.

CustomerTelephone theirPhone = null; 
... 
try { 
    theirPhone = new CustomerTelephone(phoneNumber); 
    theirPhone.getAreaCode(phoneNumber); 
} catch { 
... 
} 
+0

Это будет работать, но в любом случае причина '' NullPointerException' если InvalidTelephoneException' брошен в 'try' блока :) – Yura

+0

Теперь, как бы я идти о ловле на NullPointerException? – RiGid

+0

Справедливая точка о NPE. Для этого я обновил свой ответ. – EJK

0

Проблема, кажется, что theirPhone не обязательно инициализируется в основном методе в Ьге блоке, который следует за ним (компилятор предположит, что есть вероятность отказа в любой момент в блоке). Попробуйте присвоить переменной значение по умолчанию или null, когда оно объявлено.

1

Ну, это имеет смысл: компилятор говорит вам, что если InvalidTelephoneException брошено в try блоке, то выполнение переходит к catch блоку, System.out.println выводит сообщение об ошибке на консоль и идет дальше theirPhone.getAreaCode(phoneNumber) но на данный момент theirPhone является null так NullPointerException будет быть брошенным.

Я бы порекомендовал вам добавить оператор return; после строки Systen.out.println, чтобы программа прекратилась в случае неправильного формата номера телефона.

Надеется, что это помогает ...

Смежные вопросы