Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему переменная должна быть объявлена перед использованием? / 24 сообщений из 24, страница 1 из 1
05.03.2019, 12:38
    #39782442
argnis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Здравствуйте, простите за вопрос новичка, только начал разбираться с программарованием.

Почему переменная должна быть объявлена перед использованием: чтобы избежать двусмысленности или чтобы компилятор знал
как интерпретировать последовательность битов?
...
Рейтинг: 0 / 0
05.03.2019, 13:00
    #39782462
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
а что можно объявить переменную после использования? )
...
Рейтинг: 0 / 0
05.03.2019, 13:16
    #39782468
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
andreykaTа что можно объявить переменную после использования? )некоторые яп допускают такое. для них компиляторы , как минимум, двухпроходные.
...
Рейтинг: 0 / 0
05.03.2019, 13:31
    #39782475
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
...
Рейтинг: 0 / 0
05.03.2019, 13:45
    #39782486
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
вадяandreykaTа что можно объявить переменную после использования? )некоторые яп допускают такое. для них компиляторы , как минимум, двухпроходные.
не ну ты ее можешь вообще не объявлять как вариант, просто подразумевая ее в контексте. но ты же понимаешь что по факту она контекстно объявлена.
...
Рейтинг: 0 / 0
05.03.2019, 13:52
    #39782489
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
вадядвухпроходныеа если 1 стадия - написать сам скрипт, то трехпроходная.))
...
Рейтинг: 0 / 0
05.03.2019, 13:54
    #39782490
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisпоследовательность битов?не думай о битах.
Думай о Hello world!))))
...
Рейтинг: 0 / 0
05.03.2019, 13:57
    #39782494
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
andreykaTне ну ты ее можешь вообще не объявлять как вариант, просто подразумевая ее в контексте. но ты же понимаешь что по факту она контекстно объявлена.кажется есть и такие яп....
...
Рейтинг: 0 / 0
05.03.2019, 13:59
    #39782496
argnis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Nixic, спасибо, посмотрел. Вот только там просто написано, что переменную нужно объявлять в начале блока кода, но не написано почему.
...
Рейтинг: 0 / 0
05.03.2019, 14:25
    #39782511
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisЗдравствуйте, простите за вопрос новичка, только начал разбираться с программарованием.

Почему переменная должна быть объявлена перед использованием: чтобы избежать двусмысленности или чтобы компилятор знал
как интерпретировать последовательность битов?

Чтобы проще отлавливать опечатки
...
Рейтинг: 0 / 0
05.03.2019, 14:26
    #39782513
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisNixic, спасибо, посмотрел. Вот только там просто написано, что переменную нужно объявлять в начале блока кода, но не написано почему.
" it can confuse the unwary programmer and hamper code portability within the scope."
...
Рейтинг: 0 / 0
05.03.2019, 15:23
    #39782548
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
ты можешь в той же джаве например, объявить в классе все методы, а потом вконце поля класса (переменные да). и методы из класса будут работать с этими полями, хотя поля объявлены "визуально" после кода где они заюзаны.
...
Рейтинг: 0 / 0
06.03.2019, 13:11
    #39782935
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisПочему переменная должна быть объявлена перед использованием
Причин несколько, но главная - нужно учиться правильно думать, а как раз для этого необходимо явно проговаривать много чего из того, что предполагается использовать.

Но можно писать вон как андрейка предлагает - всё куда-то в задницу, что бы никто не догадался (там порядок "задний" и смысл объявления не соответствует вопросу). Может так даже у кого-то получается...
...
Рейтинг: 0 / 0
06.03.2019, 13:25
    #39782945
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisЗдравствуйте, простите за вопрос новичка, только начал разбираться с программарованием.

Почему переменная должна быть объявлена перед использованием: чтобы избежать двусмысленности или чтобы компилятор знал
как интерпретировать последовательность битов?

в java нет требования разделять инициализацию переменной и ее объявление. Как сказали уже ранее, скорее, наоборот, просто при обяъвлении переменную инициализировать.
Например:

Код: java
1.
int i = 1;



Но, бывают случае, связанные с "видимостью" переменных. Зачастую, вы можете встретить подобные конструкции:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
Integer i;
try {
 //какая-то логика
} catch (Exception e) {
 log.error("err", e);
}

System.out.println(i);




Если переменную i обяъвить "внутри блока, то для остального кода она (переменная) будет не инициализированной, о чем вам компилятор и сообщит.

p.s. Подобные конструкции "небезопасны", о чем вам любая вменяемая среда разработки и сообщит словами "Переменная может быть не инициализирована".
...
Рейтинг: 0 / 0
06.03.2019, 13:57
    #39782981
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
*будет необъявленной
...
Рейтинг: 0 / 0
06.03.2019, 15:32
    #39783032
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisЗдравствуйте, простите за вопрос новичка, только начал разбираться с программарованием.

Почему переменная должна быть объявлена перед использованием: чтобы избежать двусмысленности или чтобы компилятор знал
как интерпретировать последовательность битов?

чтобы компилятор заранее зарезервировал требуемое количество памяти для экземпляра типа на которую ссылается эта переменная
...
Рейтинг: 0 / 0
06.03.2019, 15:46
    #39783042
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
llemingargnisЗдравствуйте, простите за вопрос новичка, только начал разбираться с программарованием.

Почему переменная должна быть объявлена перед использованием: чтобы избежать двусмысленности или чтобы компилятор знал
как интерпретировать последовательность битов?

чтобы компилятор заранее зарезервировал требуемое количество памяти для экземпляра типа на которую ссылается эта переменная

безотносительно "правильности" ответа, какое отношение компилятор вообще имеет к экземплярам, резервированию памяти и так далее?
...
Рейтинг: 0 / 0
06.03.2019, 17:30
    #39783144
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Озверинбезотносительно "правильности" ответа, какое отношение компилятор вообще имеет к экземплярам, резервированию памяти и так далее?
Если атомарные типы выделяемые в стеке (не совсем в стеке, в JVM вроде отдельные кадры/таблицы локальных переменных) - то самое прямое. Ровно так же, как и в других языках программирования.

Да и выделение памяти в куче, точно так же. Байт-код new (0xbb) требует указания типа, т.е. он должен быть известен в процессе/после компиляции.

IMHO & AFAIK
...
Рейтинг: 0 / 0
06.03.2019, 17:49
    #39783157
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
alex55555argnisПочему переменная должна быть объявлена перед использованием
Причин несколько, но главная - нужно учиться правильно думать, а как раз для этого необходимо явно проговаривать много чего из того, что предполагается использовать.

Но можно писать вон как андрейка предлагает - всё куда-то в задницу, что бы никто не догадался (там порядок "задний" и смысл объявления не соответствует вопросу). Может так даже у кого-то получается...
ты книжку клинкод читал? там ясно написано что где и как рекомендуется объявлять. что поля, что методы.
не всё должно быть попендикулярно, как некоторые думают.

впрочем, это лишь предложения и рекомендации. ты можешь строго все объявлять сверху а юзать где нибудь вообще нигде.
...
Рейтинг: 0 / 0
06.03.2019, 19:49
    #39783204
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Leonid KudryavtsevОзверинбезотносительно "правильности" ответа, какое отношение компилятор вообще имеет к экземплярам, резервированию памяти и так далее?
Если атомарные типы выделяемые в стеке (не совсем в стеке, в JVM вроде отдельные кадры/таблицы локальных переменных) - то самое прямое. Ровно так же, как и в других языках программирования.

Да и выделение памяти в куче, точно так же. Байт-код new (0xbb) требует указания типа, т.е. он должен быть известен в процессе/после компиляции.

IMHO & AFAIK

в java один компилятор(javac) таки превращает java файл в class, а второй(часть JVM - тот самый JIT компилятор) - компилирует часто используемые в рантайме куски кода в близкий к машинному или какому там коду.
Где в этом функционале может появиться вообще выделение памяти под экземпляры класса?
...
Рейтинг: 0 / 0
06.03.2019, 19:57
    #39783211
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Leonid KudryavtsevОзверинбезотносительно "правильности" ответа, какое отношение компилятор вообще имеет к экземплярам, резервированию памяти и так далее?
Если атомарные типы выделяемые в стеке (не совсем в стеке, в JVM вроде отдельные кадры/таблицы локальных переменных) - то самое прямое. Ровно так же, как и в других языках программирования.

Да и выделение памяти в куче, точно так же. Байт-код new (0xbb) требует указания типа, т.е. он должен быть известен в процессе/после компиляции.

IMHO & AFAIK

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

А уж для объектов память при объявлении выделяется только для хранения ссылки, т.е. - мизерная(читай, не помню сколько).
...
Рейтинг: 0 / 0
06.03.2019, 20:34
    #39783226
Пылинка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Leonid KudryavtsevОзверинбезотносительно "правильности" ответа, какое отношение компилятор вообще имеет к экземплярам, резервированию памяти и так далее?
Если атомарные типы выделяемые в стеке (не совсем в стеке, в JVM вроде отдельные кадры/таблицы локальных переменных) - то самое прямое. Ровно так же, как и в других языках программирования.

Да и выделение памяти в куче, точно так же. Байт-код new (0xbb) требует указания типа, т.е. он должен быть известен в процессе/после компиляции.

IMHO & AFAIK
Точнее, стек нити состоит из кадров (frame). А вот уже внутри кадра есть (среди прочего) массив локальных переменных (там хранятся примитивы или ссылки на объектные типы, точнее на дескриптор объекта. А вот в дескрипторе уже содержатся 2 указателя: на тип Class; и указатель на область в куче, выделенную для его локальных переменных), длина его определяется уже при компиляции, а ссылки на переменные являются индексами в этом массиве.

И для argnis - вот чтобы "использовать" ссылки на эти переменные (индексы в массиве локальных переменных ) при компиляции эти ссылки УЖЕ должны существовать на момент прохода компилятора "по использованию" переменной.
Остальные детали можете почитать "где то тут" - https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7 - сами, "своими руками"
...
Рейтинг: 0 / 0
07.03.2019, 06:49
    #39783313
Alex_SQLru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
Главное объявляем тип данных переменной, числовой или символьный. Для арифметических операций нужны числовые, при этом объявляется диапазон допустимых значений, для более простых или точных вычислений.
...
Рейтинг: 0 / 0
07.03.2019, 13:02
    #39783516
Герой дня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переменная должна быть объявлена перед использованием?
argnisЗдравствуйте, простите за вопрос новичка, только начал разбираться с программарованием.

Почему переменная должна быть объявлена перед использованием: чтобы избежать двусмысленности или чтобы компилятор знал
как интерпретировать последовательность битов?

вы должны знать, как работает компилятор языков

когда объявляется переменная, в памяти, куда загружена программа, на месте объявления переменной появляется участок памяти, который будет хранить значение переменной

если переменная не будет объявлена - то где хранить ее значение ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему переменная должна быть объявлена перед использованием? / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]