Deklaracja to minimum wymagane, aby inny kod mógł ją wywołać lub odnieść się do niej. Podczas kompilowania innego kodu jest to minimum, którego potrzebujesz. Aby coś działało, wymagana jest definicja, musi być skompilowana tylko raz (nie raz na dzwoniącego)
Peter Lawrey
1
zapamiętywalny przez: de-finite, fin = end, "to finish it"; de-clare, clarus = clear, "żeby było jasne". Deklaracja jasno określa istnienie, typ i nazwę. Definicja to kod „prawdziwej pracy”, po którym można „zakończyć rozmowę o tym”. Są używane niezależnie od języka, więc twoje pytanie oznacza, jaki jest użytek z tych ogólnych pojęć w Javie.
n611x007
Odpowiedzi:
99
Różnica koncepcyjna jest prosta:
Deklaracja : Deklarujesz, że coś istnieje, na przykład klasa, funkcja lub zmienna. Nie mówisz nic o tym , jak wygląda ta klasa lub funkcja, po prostu mówisz, że istnieje.
Definicja : Definiujesz, w jaki sposób coś jest implementowane, na przykład klasa, funkcja lub zmienna, tj. Mówisz, czym właściwie jest.
W Javie jest między nimi niewielka różnica, a formalnie rzecz biorąc, deklaracja zawiera nie tylko identyfikator, ale także definicję. Oto, jak osobiście szczegółowo interpretuję te terminy:
Klasy : Java tak naprawdę nie oddziela deklaracji i definicji tak, jak robi to C / C ++ (w plikach nagłówkowych i cpp). Definiujesz je w momencie, w którym je deklarujesz.
Funkcje : kiedy piszesz interfejs (lub klasę abstrakcyjną), możesz powiedzieć, że deklarujesz funkcję, bez jej definiowania. Zwykłe funkcje są jednak zawsze definiowane dokładnie tam, gdzie są zadeklarowane. Jeśli chcesz, zobacz treść funkcji jako jej definicję.
Zmienne : deklaracja zmiennej może wyglądać następująco:
int x;
(deklarujesz, że zmienna xistnieje i ma typ int), jeśli jest to zmienna lokalna lub pole składowe. W Javie nie ma już informacji xdo zdefiniowania , poza możliwymi wartościami, które powinien posiadać, co jest określane przez przypisania do niego.
Oto ogólne podsumowanie tego, jak używam tych terminów:
Niestety nie jest to obsługiwane przez JLS. Zgodnie z JLS deklaracja klasy ZAWIERA treść klasy. To samo dotyczy metod i konstruktorów.
Stephen C
Dobrze. Z formalnego punktu widzenia całkowicie się z Tobą zgadzam (poza przypadkiem metod abstrakcyjnych / interfejsowych).
aioobe
Uważam, że dotyczy to również javascript, prawda? Może powinien zostać dodany tag JS.
Griffin,
Według identyfikatorów w kodzie javacdeklaracje klas wydają się być synonimami definicji klasy. Rozważmy na przykład public void visitClassDef(JCClassDecl tree).
aioobe
@Griffin - Zły pomysł. Pytanie dotyczy konkretnie Javy.
Stephen C
28
Specyfikacja języka Java określa i używa w szerokim zakresie terminu „deklaracja”, ale nie używa „definicji”, z wyjątkiem zwykłego angielskiego słowa.
Z moich dowodów wynika, że termin „deklaracja” pojawia się kilka razy w spisie treści i indeksie JLS, ale słowo „definicja” nie pojawia się ani w żadnym.
Tak więc, gdy widzisz, że ktoś używa słowa „definicja” w kontekście Javy, albo używa go w nietechnicznym sensie, albo jest niedbały ze swoją terminologią.
W tym drugim przypadku mogą oznaczać to samo co termin techniczny „deklaracja” lub mogą oznaczać coś innego. A jeśli mają na myśli coś innego, musisz ich zapytać, co mają na myśli. Jeśli to zdefiniowali ... w porządku, ale nie jest to standardowa terminologia.
Odpowiedzi, które stwierdzają, że „definicja” odnosi się do punktu, w którym zmienna jest inicjowana, nie są szczególnie obsługiwane ... w kontekście języka Java. W Javie inicjalizacja zmiennej następuje w momencie deklaracji lub w późniejszym przypisaniu. W tym drugim przypadku nie jest używany żaden specjalny termin ... ani potrzebny ... poza przypisaniem i / lub inicjalizacją. Nie ma określonego punktu, w którym przydzielana jest pamięć dla zmiennej. Rzeczywiście, są szanse, że miejsce na samą zmienną zostanie przydzielone przed osiągnięciem deklaracji.
Powodem, dla którego termin „definicja” nie jest używany w Javie w specyfikacji JLS, jest to, że nie jest on potrzebny.
Ponieważ Java umożliwia deklarowanie członków w dowolnej kolejności, nie ma potrzeby „deklaracji przekazywania”. To jest kontekst, w którym konieczne jest dokonanie rozróżnienia między tymi dwoma pojęciami.
W Javie przestrzeń stosu wymagana dla zmiennej jest stałą czasową kompilacji, więc obliczenia przesunięcia stosu są wykonywane w czasie kompilacji. (Pamiętaj, że w Javie tablica jest odwołaniem do obiektu sterty ... i tylko odwołanie jest przechowywane w ramce stosu).
Sposób, w jaki Java obsługuje „definicję bez inicjalizacji” pola lub zmiennej, nie wymaga pojedynczego punktu „deklaracji”. Jeśli wymagana jest inicjalizacja zmiennej, może się to zdarzyć w wielu punktach kodu źródłowego.
(Jedynym miejscem w Javie, w którym mogliby użyć deklaracji zamiast definicji, są metody abstrakcyjne. Z wyjątkiem tego, że gdyby to zrobili, musieliby odwołać się do zwykłej deklaracji metody jako definicji ... dla spójności ... i że byłoby mylące. Dlatego podprzykład „abstrakcyjny” nazywają po prostu deklaracją metody abstrakcyjnej).
C i C ++ obsłużyć te rzeczy inaczej, a więc nie trzeba wyraźną „deklarację” i „definicja” warunki w swoich opisach technicznych. Moje podejście do definicji „Sun Glossary” jest takie, że są one skoncentrowane na C / C ++.
deklaracja:
instrukcja, która ustanawia identyfikator i kojarzy z nim atrybuty, bez konieczności rezerwowania miejsca przechowywania (dla danych) lub zapewniania implementacji (dla metod).
definicja:
Deklaracja, która rezerwuje przechowywanie (dla danych) lub zapewnia implementację (dla metod).
Sposób, w jaki czytałem glosariusz Słońca, wyglądałby następująco:
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
1) JLS NIE używa terminu „definicja” do opisu drugiego stwierdzenia. Składniowo jest to zadanie. Semantycznie jest opisywany jako „inicjalizacja” zmiennej. 2) Drugie stwierdzenie nie jest deklaracją, więc nie może być definicją… „definicja: Deklaracja, która…” . 3) Link jest uszkodzony ...
Stephen C,
Zaproponowałem edycję, aby naprawić link. Pytanie i odpowiedź nie mówią nic o JLS.
Matthew Przeczytaj
4
1. deklaracja oznacza tworzenieprimitive or Object reference variable , ale bez przypisywania wartości lub obiektu r ..
na przykład:
int x; // declaration of x of type int
Cat myCat; // declaration of myCat an Object of type Cat
2. Definicja ma miejsce, gdy przypisujemy im wartości lub Object.
@Kumar Vivek Mitra - jeśli definicja to „int x = 5”, jaka byłaby różnica między definicją a intializacją?
khan
@SSK Inicjalizacja to definicja i vice versa ..... twoje zapytanie wydaje się być dużym wyzwaniem, zamiast rozwiać wątpliwości ... więc następnym razem dodaj „proszę”
Kumar Vivek Mitra
Tak ... zobacz serię Head First Java autorstwa Kathy Sierra i Berta Batesa
Kumar Vivek Mitra.
2
Myślę, że mogę lepiej wyjaśnić to pytanie w następujący sposób:
Pomyśl o następującym scenariuszu:
W Twojej firmie jest wolne stanowisko Inżyniera oprogramowania. Oznacza to, że osoba, którą wybierzesz na to stanowisko, będzie inżynierem oprogramowania (nie możesz wybrać specjalisty od marketingu na ten post). Tworzenie tego posta jest więc podobne do deklaracji.
Teraz, kiedy określisz, co osoba z tym stanowiskiem może / nie może zrobić, jakie ma uprawnienia, jakie są jego ograniczenia, to nazywa się to definicją.
Tak mówiąc
SoftwareEngineer se;
oznacza Deklarację;
i
classSoftwareEngineer{
// define role and responsibilities
}
deklaracja : instrukcja, która ustanawia identyfikator i kojarzy z nim atrybuty, bez konieczności rezerwowania miejsca przechowywania (dla danych) lub zapewniania implementacji (dla metod).
or
1. Declaration means creating a primitive or Object reference variable,
but with no assignment of value or object respectively..
definicja : Deklaracja, która rezerwuje przechowywanie (dla danych) lub zapewnia implementację (dla metod).
or
Defination is when we assign values or Object to them.
**Ex:**
List i; // declaration - variable on the stack
i = new ArrayList(); // definition - gives variable a reference
Odpowiedzi:
Różnica koncepcyjna jest prosta:
Deklaracja : Deklarujesz, że coś istnieje, na przykład klasa, funkcja lub zmienna. Nie mówisz nic o tym , jak wygląda ta klasa lub funkcja, po prostu mówisz, że istnieje.
Definicja : Definiujesz, w jaki sposób coś jest implementowane, na przykład klasa, funkcja lub zmienna, tj. Mówisz, czym właściwie jest.
W Javie jest między nimi niewielka różnica, a formalnie rzecz biorąc, deklaracja zawiera nie tylko identyfikator, ale także definicję. Oto, jak osobiście szczegółowo interpretuję te terminy:
Klasy : Java tak naprawdę nie oddziela deklaracji i definicji tak, jak robi to C / C ++ (w plikach nagłówkowych i cpp). Definiujesz je w momencie, w którym je deklarujesz.
Funkcje : kiedy piszesz interfejs (lub klasę abstrakcyjną), możesz powiedzieć, że deklarujesz funkcję, bez jej definiowania. Zwykłe funkcje są jednak zawsze definiowane dokładnie tam, gdzie są zadeklarowane. Jeśli chcesz, zobacz treść funkcji jako jej definicję.
Zmienne : deklaracja zmiennej może wyglądać następująco:
int x;
(deklarujesz, że zmienna
x
istnieje i ma typint
), jeśli jest to zmienna lokalna lub pole składowe. W Javie nie ma już informacjix
do zdefiniowania , poza możliwymi wartościami, które powinien posiadać, co jest określane przez przypisania do niego.Oto ogólne podsumowanie tego, jak używam tych terminów:
abstract class SomeClass { // class decl. // \ int x; // variable decl. | // | public abstract void someMethod(); // function decl. | // | public int someOtherMethod() { // function decl. | // | class if (Math.random() > .5) // \ | def. return x; // | function definition | else // | | return -x; // / | // | } // | } // /
źródło
javac
deklaracje klas wydają się być synonimami definicji klasy. Rozważmy na przykładpublic void visitClassDef(JCClassDecl tree)
.Specyfikacja języka Java określa i używa w szerokim zakresie terminu „deklaracja”, ale nie używa „definicji”, z wyjątkiem zwykłego angielskiego słowa.
Z moich dowodów wynika, że termin „deklaracja” pojawia się kilka razy w spisie treści i indeksie JLS, ale słowo „definicja” nie pojawia się ani w żadnym.
Tak więc, gdy widzisz, że ktoś używa słowa „definicja” w kontekście Javy, albo używa go w nietechnicznym sensie, albo jest niedbały ze swoją terminologią.
W tym drugim przypadku mogą oznaczać to samo co termin techniczny „deklaracja” lub mogą oznaczać coś innego. A jeśli mają na myśli coś innego, musisz ich zapytać, co mają na myśli. Jeśli to zdefiniowali ... w porządku, ale nie jest to standardowa terminologia.
Odpowiedzi, które stwierdzają, że „definicja” odnosi się do punktu, w którym zmienna jest inicjowana, nie są szczególnie obsługiwane ... w kontekście języka Java. W Javie inicjalizacja zmiennej następuje w momencie deklaracji lub w późniejszym przypisaniu. W tym drugim przypadku nie jest używany żaden specjalny termin ... ani potrzebny ... poza przypisaniem i / lub inicjalizacją. Nie ma określonego punktu, w którym przydzielana jest pamięć dla zmiennej. Rzeczywiście, są szanse, że miejsce na samą zmienną zostanie przydzielone przed osiągnięciem deklaracji.
Powodem, dla którego termin „definicja” nie jest używany w Javie w specyfikacji JLS, jest to, że nie jest on potrzebny.
(Jedynym miejscem w Javie, w którym mogliby użyć deklaracji zamiast definicji, są metody abstrakcyjne. Z wyjątkiem tego, że gdyby to zrobili, musieliby odwołać się do zwykłej deklaracji metody jako definicji ... dla spójności ... i że byłoby mylące. Dlatego podprzykład „abstrakcyjny” nazywają po prostu deklaracją metody abstrakcyjnej).
C i C ++ obsłużyć te rzeczy inaczej, a więc nie trzeba wyraźną „deklarację” i „definicja” warunki w swoich opisach technicznych. Moje podejście do definicji „Sun Glossary” jest takie, że są one skoncentrowane na C / C ++.
źródło
Z definicji słownika Słońca :
deklaracja: instrukcja, która ustanawia identyfikator i kojarzy z nim atrybuty, bez konieczności rezerwowania miejsca przechowywania (dla danych) lub zapewniania implementacji (dla metod).
definicja: Deklaracja, która rezerwuje przechowywanie (dla danych) lub zapewnia implementację (dla metod).
Sposób, w jaki czytałem glosariusz Słońca, wyglądałby następująco:
List i; // declaration - variable on the stack i = new ArrayList(); // definition - gives variable a reference
źródło
1. deklaracja oznacza tworzenie
primitive or Object reference variable
, ale bez przypisywania wartości lub obiektu r ..na przykład:
int x; // declaration of x of type int Cat myCat; // declaration of myCat an Object of type Cat
2. Definicja ma miejsce, gdy przypisujemy im wartości lub Object.
int x = 5; Cat myCat = new Cat();
3. W przypadku Method jest tak ...
public abstract void go(); // Method Declaration (Abstract method) public void go(){ // Method Defination // Your code }
źródło
Myślę, że mogę lepiej wyjaśnić to pytanie w następujący sposób:
Pomyśl o następującym scenariuszu:
W Twojej firmie jest wolne stanowisko Inżyniera oprogramowania. Oznacza to, że osoba, którą wybierzesz na to stanowisko, będzie inżynierem oprogramowania (nie możesz wybrać specjalisty od marketingu na ten post). Tworzenie tego posta jest więc podobne do deklaracji.
Teraz, kiedy określisz, co osoba z tym stanowiskiem może / nie może zrobić, jakie ma uprawnienia, jakie są jego ograniczenia, to nazywa się to definicją.
Tak mówiąc
oznacza Deklarację;
i
class SoftwareEngineer { // define role and responsibilities }
oznacza definicję. Mam nadzieję, że ci to pomoże.
źródło
Java
język definiuje tylko termin deklaracja nie używać definicji.Deklaracja:
class A{}// class declaration String str;// variable declaration
źródło
deklaracja : instrukcja, która ustanawia identyfikator i kojarzy z nim atrybuty, bez konieczności rezerwowania miejsca przechowywania (dla danych) lub zapewniania implementacji (dla metod).
or 1. Declaration means creating a primitive or Object reference variable, but with no assignment of value or object respectively..
definicja : Deklaracja, która rezerwuje przechowywanie (dla danych) lub zapewnia implementację (dla metod).
or Defination is when we assign values or Object to them. **Ex:** List i; // declaration - variable on the stack i = new ArrayList(); // definition - gives variable a reference
źródło
Deklaracja : określenie typu obiektu lub prymitywu
Definicja : Określenie wartości obiektu lub prymitywu
Deklaracja : Określanie podpisu metody
Definicja : określenie implementacji metody
źródło