2010-04-10 5 views
32

Я нахожу кругооборот defs, субъекты определяются их глаголами, но глаголы не определены! Итак, как вы их определяете?Java: определение терминов инициализация, декларация и присвоение

циркуляра Определения

инициализации: для инициализации переменной. Это можно сделать во время объявления .

назначение: присвоить значение переменной. Это можно сделать где угодно, только один раз с окончательным идентификатором.

Объявление:, чтобы объявить значение переменной.

[обновление, пытаясь понять эту тему с лямбда-известково]

D(x type) = (λx.x is declared with type) 
A(y D(x type)) = (λy.y is assigned to D(x type)) 

%Then after some beta reductions we get initialization. 
D(x type) me human     // "me" declared with type "human" 
A(y (D(x type) me human)) asking // "asking" assigned to the last declaration 

%if the last two statemets are valid, an initialization exists. Right? 
+1

[Объявление] (https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html), [Инициализация] (https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html) и [Assignment] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html), все они включены в учебный курс Java. : [Изучение языка Java] (https://docs.oracle.com/javase/tutorial/java/TOC.html). – jaco0646

ответ

56

assi gnment: отбрасывая старое значение переменной и заменить ее новой инициализации один

: это особый вид задания: первый. До объектов инициализации значение null имеет значения по умолчанию, такие как 0 или false. Может быть сделано в сочетании с декларацией.

Объявление: в заявлении указывается тип переменной вместе с ее именем. Переменная может быть объявлена ​​только один раз. Он используется компилятором, чтобы помочь программистам избежать ошибок, таких как присвоение строковых значений целым переменным. Перед чтением или назначением переменной эта переменная должна быть объявлена.

+2

РЕЗЮМЕ? Инициализация - это изменение от начального значения. Декларация обозначает имя и тип. Назначение - это более общее изменение стоимости, инициализация - особый тип назначения. – hhh

+1

правильный. Инициализация является специальной, потому что это первое назначение переменной –

+2

. Я не думаю, что примитивы содержат инициализацию значений '0' или' false', учитывая тот факт, что при попытке распечатать неинициализированную переменную она производит компиляцию что переменная может не быть инициализирована, а не печатать их значение. –

3

декларации: всякий раз, когда вы определяете новую переменную с типом

назначения: всякий раз, когда вы изменяете значение переменной, присвоив ей новое значение

начальная ization: присвоение, которое выполняется вместе с объявлением или в любом случае первое присваивание, которое выполняется с переменной, обычно это вызов конструктора для объекта или простое назначение для переменной

+0

Я не могу понять разницу btw-декларации и инициализации. – hhh

+0

Инициализация = объявление + присвоение? – hhh

+0

это больше похоже на инициализацию = первое назначение (может быть неявным для полей класса, но должно быть явным для локальных переменных) – pablochan

6

Декларация не является объявлять «значение» переменной; это объявление типа переменной.

Назначение - это просто сохранение значения переменной.

Инициализация - это присвоение значения переменной на момент объявления.

Эти определения также применимы к полям.

int i; // simple declaration 
i = 42 // simple assignment 

int[] arr = { 1, 2, 3 }; 
// declaration with initialization, allows special shorthand syntax for arrays 

arr = { 4, 5, 6 }; // doesn't compile, special initializer syntax invalid here 
arr = new int[] { 4, 5, 6 }; // simple assignment, compiles fine 

Однако, следует отметить, что «инициализация» также имеет более расслабленное определение «первое присвоение переменного», независимо от того, где это происходит.

int i; // local variable declaration 
if (something) i = 42; 
System.out.println(i); 
    // compile time error: The local variable i may not have been initialized 

Это, однако, составляет:

int i; // the following also compiles if i were declared final 
if (something) i = 42; 
else i = 666; 
System.out.println(i); 

Здесь i может быть "инициализирован" из двух возможных мест, с помощью простых заданий. Из-за этого, если i был массивом, вы не можете использовать синтаксис сокращения инициализатора специального массива с этой конструкцией.

Так в основном «инициализация» имеет два возможных определений, в зависимости от контекста:

  • В своей узкой форме, это когда присвоение комбить с декларацией.
    • Это позволяет, помимо прочего, специального массив сокращенной инициализатор синтаксического
  • В более общем плане, это когда присвоение первый из переменных.
    • Он позволяет, между прочим, назначать переменную final в нескольких местах.
      • компилятор будет делать все возможное, чтобы гарантировать, что именно один из этих заданий может произойти, таким образом, «инициализация» final переменная

Там же JVM-контекст класса и инициализация экземпляра, инициализация объекта контекста ООП и т. д.

+0

"int [] arr = {1, 2, 3};" является объявленным и {1,2,3} -определением. Это подразумевает инициализацию. Правильно? – hhh

+0

Да, это пример синтаксиса специального инициализатора массива, поэтому он инициализируется. – polygenelubricants

57
String declaration; 
String initialization = "initialization"; 
declaration = "initialization"; //late initialization - will initialize the variable. 
    // Without this, for example, in java, you will get a compile-time error if you try 
    // to use this variable. 

declaration = "assignment"; // Normal assignment. 
    // Can be done any number of times for a non-final variable 
+7

"Лучший код не требует пояснений /" –

0

Я исхожу из C/C++ фона, но идеи должны быть одинаковыми.

Объявление - Когда объявлена ​​переменная, она сообщает компилятору выделить кусок памяти и связать с ним имя (и тип переменной). В C/C++ это может выглядеть следующим образом:

int x; 

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

x = 3 + 5; 

Он знает, чтобы поместить значение целого числа 8 (не значение с плавающей точкой 8) в ячейку памяти, также известный как «х».

Назначение - Это когда вы вводите значение в ранее объявленную переменную.Назначение связано с знаком «равно». В предыдущем примере переменной «x» присваивалось значение 8.

Инициализация - Это когда переменная задана со значением. Нет никакой гарантии, что каждая переменная будет установлена ​​на какое-либо значение по умолчанию во время объявления переменной (если вы явно не сделаете это). Можно утверждать, что инициализация является первым назначением переменной, но это не совсем так, как я объясню вкратце. Типичная инициализация представляет собой смесь объявления переменного с назначением следующим образом:

int x = 6; 

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

const int c = 15; 

Когда вы имеете дело с константами, вы получаете возможность присваивать их значение во время объявления/инициализации. В противном случае их нельзя трогать. Это связано с тем, что константы часто располагаются в памяти программ и памяти данных, и их фактическое назначение происходит во время компиляции и времени выполнения.

0

Шаг 1: Декларация: int a;

Этап 2: Инициализация: a = 5;

Этап 3: Назначение: a = b; (например: int b = 10, теперь a становится 10)

3

Ниже приводится краткое описание некоторых примеров.

Декларация: Декларация - это когда вы объявляете переменную с именем, а переменная может быть объявлена ​​только один раз.

Пример: int x;, String myName;, Boolean myCondition;

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

Пример: int x = 7;, String myName = "Emi";, Boolean myCondition = false;

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

Пример:

int x = 7; x = 12; ....... Мы просто изменили значение.

String myName = "Emi"; myName = "John" ....... Мы просто изменили значение.

Boolean myCondition = false; myCondition = true; ....... Мы просто изменили стоимость.

Примечание: в памяти будет сохранено последнее значение, которое мы положим.

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