что означает этот синтаксис в Java? - PullRequest
1 голос
/ 06 февраля 2010

Я новичок в Java и застрял с этим:

BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));

и

InputStreamReader ISR = new InputStreamReader(System.in);     
BufferedReader BR = new BufferedReader(ISR);
  • В чем разница между ними?

  • Кроме того, обязательно ли выдавать IOException, когда я получаю данные от пользователя?

спасибо.

Ответы [ 9 ]

7 голосов
/ 06 февраля 2010

Единственное отличие состоит в том, что вторая форма явно сохраняет ссылку на InputStreamReader в переменную, которая может или не может быть полезной в зависимости от того, будете ли вы что-то делать с ней позже.

3 голосов
/ 06 февраля 2010

Разница в том, что второй более многословен и использует временную переменную для InputStreamReader. Вы получаете первую версию, заменив ISR на new InputStreamReader(System.in).

Но оба делают одно и то же. Преимущество последнего состоит в том, что вы все еще можете получить доступ к InputStreamReader позже в своем коде через переменную ISR (если у вас есть / хотите).

3 голосов
/ 06 февраля 2010

Без разницы, просто вопрос предпочтений.

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

2 голосов
/ 06 февраля 2010

- Ответ на 1-й вопрос Нет абсолютно никакой разницы, за исключением того, что вы создадите ссылку на InputStreamReader, которую вы также можете избежать .... Я лично предпочитаю избегать ее

- Ответ на второй вопрос

Исключения ввода-вывода - проверенные исключения, т.е. исключения проверяются во время компиляции, в то время как у нас есть непроверенные исключения также в Java, которые проверяются во время выполнения

Подробнее о проверенных и непроверенных исключениях вы можете найти здесь

0 голосов
/ 06 февраля 2010

Без разницы, просто первая форма более компактна и эффективна, если можно так сказать, потому что дополнительная ссылка для InputStreamReader не создается.

0 голосов
/ 06 февраля 2010

Ну, На вопрос был дан исчерпывающий ответ. Тем не менее, я хотел бы подчеркнуть использование первого синтаксиса, так как вы можете избежать дополнительной ссылки. Более того, выделение дополнительной ссылки может заставить сборщика мусора задержать его работу. Это не обязательно означает, что он не будет собирать мусор, но все же создает небольшие накладные расходы.

Таким образом, ответом будет попытка использовать первый синтаксис всегда, за исключением того, что вам потребуется выполнить некоторые манипуляции с переменной ISR позже.

0 голосов
/ 06 февраля 2010

Они приведут к одному и тому же. BufferedReader на основе System.in в BR и br1.

Если вам понадобится ISR позже по какой-либо другой причине, то сначала вам следует воспользоваться этой версией. Просто вопрос предпочтений, стенография против многословия.

0 голосов
/ 06 февраля 2010
  1. На самом деле второй вариант позволяет использовать ISR напрямую, в этом случае это может вызвать некоторые проблемы. Но второй вариант также позволяет закрывать ISR, если закрытие BR завершается неудачей.
  2. Нет, это не обязательно. Лучше показать ему удобочитаемое сообщение.
0 голосов
/ 06 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...