2016-12-09 4 views
-1

я написал ниже код с затмением:почему ParseException появляется при использовании SimpleDateFormat

String d = "2014-6-1 21:05:36"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
Date date =sdf.parse(d);   
System.out.print(date); 

и линию 4 выбрасывает Unhandled exception type ParseException.

Но если я пишу:

try { 
    String d = "2014-6-1 21:05:36"; 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
    Date date =sdf.parse(d);  
    System.out.print(date); 
} catch(ParseException e) { 
    e.printStackTrace(); 
    System.out.print("you get the ParseException"); 
} 

или добавить throws ParseException в начале основного метода

public static void main(String[] args) throws ParseException { 
    String d = "2014-6-1 21:05:36"; 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
    Date date =sdf.parse(d);  
    System.out.print(date); 
} 

Все они хорошо работают ... Что не так с моим кодом? Я использую метод printStackTrace() в блоке catch, но почему я не могу увидеть ParseException?

+0

это говорит вам, что разборе SimpleDateFormat в говорит, что он может выбросить это исключение. это не значит, что это так. Компилятор хочет, чтобы вы либо обрабатывали его, либо признали, что это возможность, пометив ваш метод как возможный источник этого исключения. – Jonathan

+0

У вас есть другой формат в случае 2, тот, где вы печатаете исключение. –

+0

Я уверен, что ваш третий отрывок там не работает. –

ответ

1

Речь идет не о том, чтобы вы действительно получали исключение. Но возможно, что ваша строка имеет неправильный формат (а это не так). В этом случае вы получите исключение.

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

0

В любом IDE (Integrated Development Environment) редактор отображает ошибку типа компиляции, которая будет неразрешена во время компиляции.

Что вы наблюдаете за поведением IDE в вашем случае, в sdf.parse(d); означает, что он может вызывать исключение синтаксического разбора во время выполнения, поэтому вы должны обрабатывать его в соответствии с этим. В противном случае программа будет разбита.

Во втором фрагменте кода ваш, он будет ловить исключение синтаксического анализа, когда произошло и показать вам исключение e.printStackTrace(); для записи и кода не будет врезаться, т.е. exit(0) или exit(1) с ошибкой, more

В то время как в последнем коде фрагмент вашего метода, был упущен, что он может вызвать исключение. Поэтому, если он вызван из любого другого источника, это должно быть обработано, скажем, попробуйте поймать.

Вы можете использовать любое из двух решений, это только ваш выбор.

более

Ниже приведен метод подписи в SimpleDateFormat

public Date parse(String source) throws ParseException 

Так что это проливает указывает, что, когда этот метод называют это должно быть обработано

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

  • Нет связанных вопросов^_^